1. Trang chủ
  2. » Luận Văn - Báo Cáo

Popjava thư viện lập trình cho ứng dụng song song và ứng dụng lưới

108 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 108
Dung lượng 1,39 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Omni RPC là một hiện thực của mô hình Grid RPC, sử dụng Globus như là cơ sở hạ tầng để có thể đưa ứng dụng chạy trên môi trường lưới.. Lý do thực hiện đề tài Mặc dù Globus đã đưa ra chu

Trang 1

Đại Học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA

-

PHAN ĐÌNH HẢI SƠN

POPJAVA THƯ VIỆN LẬP TRÌNH CHO ỨNG DỤNG SONG SONG

VÀ ỨNG DỤNG LƯỚI

Chuyên ngành: Khoa học máy tính

LUẬN VĂN THẠC SĨ

TP HỒ CHÍ MINH, tháng 12 năm 2008

Trang 2

i

TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

PHÒNG ĐÀO TẠO SĐH ĐỘC LẬP – TỰ DO – HẠNH PHÚC

Tp HCM, ngày 07 tháng 12 năm 2008

NHIỆM VỤ LUẬN VĂN THẠC SĨ

Ngày, tháng, năm sinh: 15-08-1983 Nơi sinh: TP HCM

I- TÊN ĐỀ TÀI:

POPJava - thư viện lập trình cho ứng dụng song song và ứng dụng lưới

II- NHIỆM VỤ VÀ NỘI DUNG:

Xây dựng thư viện lập trình cho ứng dụng song song và ứng dụng lưới dựa

trên ngôn ngữ Java Thư viện có khả năng sử dụng các run-time service của

POP-C++ system để chạy ứng dụng Ứng dụng sử dụng thư viện POPJava có khả năng

giao tiếp với ứng dụng xây dựng bằng POP-C++ và ngược lại

III- NGÀY GIAO NHIỆM VỤ: 01/2008

IV- NGÀY HOÀN THÀNH NHIỆM VỤ: 12/2008

V- CÁN BỘ HƯỚNG DẪN: TS Nguyễn Tuấn Anh

(Học hàm, học vị, họ tên và chữ ký) QL CHUYÊN NGÀNH

Nội dung và đề cương luận văn thạc sĩ đã được Hội đồng chuyên ngành thông qua

Ngày tháng năm

TRƯỞNG PHÒNG ĐT – SĐH TRƯỞNG KHOA QL NGÀNH

Trang 3

ii

CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

Cán bộ hướng dẫn khoa học: TS Nguyễn Tuấn Anh

Trang 4

iii

LỜI CAM ĐOAN

Tôi cam đoan rằng, ngoại trừ các kết quả tham khảo từ các công trình khác như đã ghi rõ trong luận văn, các công việc trình bày trong luận văn này là do chính tôi thực hiện và chưa có phần nội dung nào của luận văn này được nộp để lấy một bằng cấp ở trường này hoặc trường khác

Ngày 07 tháng 12 năm 2008

Trang 5

iv

Tôi gởi lòng tri ân đến tất cả bạn bè, những người

đã động viên, thăm hỏi cũng như đã có những giúp đỡ

thiết thực giúp tôi hoàn tất luận văn này

LỜI CẢM ƠN

Tôi xin gởi lời cảm ơn chân thành và sâu sắc nhất đến TS

Nguyễn Tuấn Anh, người Thầy đã tận tình hướng dẫn tôi trong suốt

quá trình thực hiện luận văn cao học và tạo mọi điều kiện để tôi có

thể hoàn thành luận văn này

Tôi cũng xin cảm ơn gia đình đã động viên và tạo mọi điều

kiện tốt nhất để tôi có thể tiếp tục theo đuổi việc học tập nghiên cứu

Tôi trân trọng dành tặng thành quả của luận văn này cho Cha Mẹ

Nhờ công lao dưỡng dục của Người mà chúng con mới có được

thành quả như ngày hôm nay Con xin hứa sẽ tiếp tục cố gắng phấn

đấu để vươn cao hơn nữa

Trang 6

v

TÓM TẮT ĐỀ TÀI

POP-C++ là một trong nhiều công cụ lập trình lưới được xây dựng và đưa vào

sử dụng POP-C++ System xây dựng các service hỗ trợ việc tìm kiếm và cấp phát tài nguyên phù hợp với yêu cầu của ứng dụng

Tuy nhiên, môi trường lưới là môi trường bất đồng nhất về cấu hình phần cứng, platform và việc phát triển ứng dụng trên ngôn ngữ C++ không thực sự dễ dàng Thư viện POPJava được xây dựng trên ngôn ngữ Java nhằm đảm bảo ứng dụng có thể tương thích với nhiều loại tài nguyên POPJava sử dụng lại các run-time service của POP-C++ để tận dụng khả năng tìm kiếm và cấp phát tài nguyên phù hợp của POP-C++ POPJava giúp người lập trinh xây dựng ứng dụng có khả năng giao tiếp với ứng dụng xây dựng bằng POP-C++ Do đó, người lập trình có thể xây dựng ứng dụng bao gôm một phần được phát triển bằng POPJava để có thể phát triển nhanh chóng và một phần được phát triển bởi POP-C++ nhằm đảm bảo performance

Trang 7

vi

ABSTRACT

POP-Java programming tool, which is developed as a Java library provides a Java-based implementation of parallel objects The POP-Java applications can use the existing runtime service of POP-C++ for deploying and running its components over the Grid Moreover, some performance-critical parts of POP-Java applications can also be implemented by POP-C++

Trang 8

vii

MỤC LỤC

NHIỆM VỤ LUẬN VĂN THẠC SĨ i

LỜI CAM ĐOAN iii

TÓM TẮT ĐỀ TÀI v

ABSTRACT vi

MỤC LỤC vii

DANH SÁCH HÌNH VẼ xi

Chương 1: GIỚI THIỆU ĐỀ TÀI 1

1.1 Tổng quan về ”Grid Computing” 1

1.2 Công cụ lập trình trên môi trường lưới 2

1.3 Nhu cầu lập trình hướng đến chất lượng dịch vụ 2

1.4 Lý do thực hiện đề tài 3

1.5 Mục tiêu và giới hạn của đề tài 4

1.5.1 Mục tiêu 4

1.5.2 Phạm vi của đề tài: 4

1.6 Cấu trúc của luận văn 5

Chương 2: CƠ SỞ LÝ THUYẾT 6

2.1 Định nghĩa “Grid Computing” 6

2.2 So sánh Grid và hệ thống siêu máy tính thông thường (super computer, cluster) 6

2.3 Phân loại “Grid Computing” 7

2.3.1 Computational grid 7

2.3.2 Scavenging grid 7

2.3.3 Data grid 8

2.4 Các thành phần của môi trường Grid Computing 8

2.4.1 Portal/user interface 8

2.4.2 Security 9

2.4.3 Broker 10

2.4.4 Scheduler 11

Trang 9

viii

2.4.5 Data management 12

2.4.6 Job và resource management 12

2.4.7 Các chức năng khác 13

2.5 Ngôn ngữ lập trình cho Grid computing 13

Chương 3: PARALLEL OBJECT MODEL 16

3.1 Các đối tượng có thể chia sẻ phân tán 16

3.2 Các yêu cầu về tài nguyên 17

3.3 Các ngữ nghĩa gọi hàm (method invocation semantics) 17

3.3.1 Ngữ nghĩa ở phía gọi method có các ngữ nghĩa sau 18

3.3.2 Ngữ nghĩa ở phía thực thi đối tượng có các ngữ nghĩa sau: 18

3.4 POP-C++ programming language 19

3.4.1 Parclass method declarations and invocations 20

3.4.2 Object description 21

3.4.3 Object events 22

3.4.4 Mutual exclusive execution 22

3.4.5 Chương trình ví dụ 22

Chương 4: MỘT SỐ CÔNG CỤ LẬP TRÌNH GRID COMPUTING KHÁC 25

4.1 Proactive 25

4.1.1 Developer Tools & IDE 26

4.1.2 Programming / Composing 26

4.1.3 Deployment & Virtualization 26

4.1.4 Services 27

4.1.5 Chương trình ví dụ 27

4.2 OmniRPC 29

4.2.1 Chương trình ví dụ của OmniRPC: 31

4.2.2 Môi trường thực thi 31

4.2.3 Sử dụng OmniRPC agent để thực thi chương trình 32

4.2.4 Viết chương trình thực thi tại máy ở xa (remote host) 32

4.2.5 Đăng kí chương trình thực thi ở xa 33

4.2.6 Chương trình Client 34

Trang 10

ix

Chương 5: POPJava PROGRAMMING 36

5.1 Các component lúc runtime của POPJava++ 37

5.2 Sự mở rộng của POPJava từ Java 37

5.3 Kiến trúc của POPJava 38

5.4 DataSwaper 42

5.5 POPObject 44

5.6 Protocol 46

5.6.1 Combox Server 46

5.6.2 Combox 47

5.6.3 ComboxSocket 48

5.7 Encoding 50

5.8 Service Adapter 54

5.9 Broker 56

5.10 Interface 58

5.11 POPJavaFactory 61

5.11.1 POPJavaFactory 61

5.11.2 Class PJProxyFactory 63

5.11.3 Class PJMethodFilter 63

5.12 Protocol Plugin 63

5.13 Encoding Plugin 65

5.14 Object Decsription: 68

5.15 Quy trình khởi tạo một parallel object: 69

5.16 Lập trình với POPJava 72

Chương 6: ĐÁNH GIÁ POPJava 77

6.1 Khả năng tương thích với nhiều platform của POPJava 77

6.2 Khả năng tương thích của POPJava với POP-C++ 77

6.3 Tốc độ truyền dữ liệu của POPJava 78

6.4 Hạn chế của POPJava 81

Chương 7: KẾT LUẬN 83

7.1 Những đóng góp của đề tài 83

7.2 Hướng phát triển 84

Trang 11

x

TÀI LIỆU THAM KHẢO 86

PHỤ LỤC A: Hướng dẫn xây dựng ứng dụng với POP-C++ và POPJava 87

1 Chạy chương trình POPJava 87

2 Object POPJava gọi Object POPJava 87

3 Object POPJava gọi Object POP-C++ 87

4 Object POP-C++ gọi Object POPJava 90

PHỤ LỤC B: Javassist 92

1 Reading writing bytecode 92

2 Định nghĩa một class mới ngay trong thời gian chạy: 93

3 ProxyFactory 94

Trang 12

xi

DANH SÁCH HÌNH VẼ

Hình 2.1: Userview của “Grid computing” 9 

Hình 2.2: Security trong môi trường lưới 10 

Hình 2.3: Broker service 10 

Hình 2.4: Scheduler 11 

Hình 2.5: Data management 12 

Hình 2.6: GRAM 13 

Hình 3.1: Ngữ nghĩa gọi hàm: Đồng thời(Conc1, Conc2, Conc3), tuần tự (Seq1, Seq2), và Mutex (Mutex1) 19 

Hình 3.2: Sự khác nhau giữa class trong C++ và parallel class trong POP-C++ 19 

Hình 4.1: Grid Infrastructure Standards 25 

Hình 4.2: Ứng dụng viết bằng OmniRPC 30 

Hình 4.3: OmniRPC agent 32 

Hình 5.1: The layered architecture of POP programming system 36 

Hình 5.2: Các component lúc runtime 37 

Hình 5.3: Interface và broker trong POPJava 38 

Hình 5.4: Kiến trúc của POPJava 39 

Hình 5.5: ComboxSocket 48 

Hình 5.6: Qui trình tiếp nhận và xử lý request của ComboxServer 49 

Hình 5.7: Service Adapter 55 

Hình 5.8: Vai trò của broker 56 

Hình 5.9: Cấu trúc của Request Header 57 

Hình 5.10: Qui trình xử lý request của Broker 58 

Hình 5.11: Vai trò của Interface 59 

Hình 5.12: Hoạt động của Interface 59 

Hình 5.13: Quá trình binding giữa Interface và Broker 60 

Hình 5.14: Quá trình chuyển lời gọi hàm thành Request 61 

Hình 5.15: POPJavaFactory 62 

Hình 5.16: ComboxFactory 64 

Hình 5.17: ComboxPlugin 65 

Trang 13

xii

Hình 5.18: BufferPlugin 66 

Hình 5.19: BufferPlugin 67 

Hình 5.20: Qui trình khởi tạo parallel object ở máy cục bộ 71 

Hình 5.21: Qui trình khởi tạo parallel object ở máy ở xa 72 

Hình 6.1: Chương trình kiểm tra tốc độ truyền nhận giữa các parallel object 78 

Hình 6.2: Tốc độ truyền dữ liệu giữa hai Object POP-C++ 79 

Hình 6.3: Tốc độ truyền dữ liệu giữa Object POP-C++ và Object POPJava 79 

Hình 6.4: Tốc độ truyền dữ liệu giữa Object POPJava và Object POP-C++ 80 

Hình 6.5: Tốc độ truyền dữ liệu giữa Object POP-C++ và Object POPJava 80 

Hình 7.1: Vấn đề Firewall 84 

Hình 7.2: Phương án để vượt qua Firewall 85 

Trang 14

Chương 1: Giới thiệu đề tài Trang 1

Chương 1 GIỚI THIỆU ĐỀ TÀI

1.1 Tổng quan về ”Grid Computing”

“Grid Computing” đang nhận được rất nhiều sự quan tâm trong ngành công nghiệp công nghệ thông tin Mặc dù nó đã được sử dụng trong các học viện và các cộng đồng khoa học từ lâu nhưng các chuẩn mực, kĩ thuật, công cụ và sản phẩm vẫn đang được xây dựng để có thể sử dụng trong thương mại Cũng như nhiều kĩ thuật mới khác, có rất nhiều công cụ "Grid Computing" đã được xây dựng và sử dụng; và một trong những công cụ được sử dụng nhiều nhất để tạo ra và quản lý môi trường lưới là Globus Toolkit [1]

“Grid Computing” cũng tương tự như mạng lưới điện thực tế Một khi cơ sở

hạ tầng của “Grid Computing” được xây dựng hoàn chỉnh, người sử dụng có thể truy xuất vào một máy tính ảo có độ tin cậy và thích hợp với nhu cầu của họ Máy tính ảo này sẽ bao gồm rất nhiều tài nguyên khác nhau bao gồm máy tính cá nhân, PDA, máy chủ, cluster… Nhưng người sử dụng không thể thấy được những tài nguyên cá nhân cũng giống như người sử dụng điện không thể thấy được nguồn điện được sinh ra như thế nào, từ than đá, khí đốt, sức gió hay sức nước

Để đạt được như vậy, cần phải xây dựng một chuẩn cho “Grid Computing” về tính bảo mật thông tin Chuẩn Open Grid Service Architecture (OGSA) và các công

cụ được cung cấp bởi Globus Toolkit đã cung cấp một framework để xây dựng một

hệ thống “Grid Computing” đảm bảo sự bảo mật Trước tiên, các doanh nghiệp, tổ chức có thể xây dựng cơ sở hạ tầng “Grid Computing” của riêng họ; nhưng vào thời gian sau, những lưới này cần được kết nối lại Việc kết nối có thể thực hiện đươc thông qua chuẩn OGSA và việc xây dựng lưới tính toán có sức mạnh tương tự như lưới điện sẽ trở thành hiện thực

Trang 15

Chương 1: Giới thiệu đề tài Trang 2

1.2 Công cụ lập trình trên môi trường lưới

Globus Toolkit đã đưa ra chuẩn OGSA, cũng như một framework để mỗi tổ chức có thể tự xây dựng cho mình một môi trường lưới Tuy nhiên việc lập trình trên môi trường lưới vẫn còn đang được bỏ ngỏ Globus Toolkit mới chỉ đưa ra các API cho phép submit một job lên môi truờng lưới, theo dõi và lấy kết quả thực thi của một job

Hiện nay đã có một số mô hình lập trình trên Grid được xây dựng và đưa vào thử nghiệm như ProActive[4], POP-C++ [3], Grid RPC[8]

ProActive là một thư viện trên ngôn ngữ Java giúp đơn giản hóa việc lập trình

và thực thi các ứng dụng song song trên mạng LAN, Cluster và các Data Center Servers, Grid, trên các hệ điều hành Linux, Windows, Mac [4]

POP-C++[3] bao gồm một trình biên dịch, một hệ thống run-time hỗ trợ cho việc lập trình và thực thi ứng dụng song song trên LAN, Cluster, Grid Ngôn ngữ POP-C++ là mở rộng của ngôn ngữ C++ hiện thực mô hình đối tượng song song (parallel object model) và yêu cầu tài nguyên(resource requirement) Hệ thống run-time của POP-C++ giúp việc tìm kiếm tài nguyên phù hợp với yêu cầu của từng mô hình đối tượng song song

Omni RPC là một hiện thực của mô hình Grid RPC, sử dụng Globus như là cơ

sở hạ tầng để có thể đưa ứng dụng chạy trên môi trường lưới

1.3 Nhu cầu lập trình hướng đến chất lượng dịch vụ

Sự ra đời của mạng lưới thông minh có băng thông lớn và các cơ sở hạ tầng mạng tốt, như những mạng lưới có băng thông lớn dựa trên Generalized MultiProtocol Label Switching (GMPLS) và Automatically Switched Optical Networks (ASON)/Automatically Switched Transport Networks (ASTN), đang cổ

vũ cho sự phát triển tính toán lưới từ mạng nội bộ (LAN) đến mạng diện rộng (WAN)

Trang 16

Chương 1: Giới thiệu đề tài Trang 3

Trong khi ở mạng LAN, các tài nguyên gần như đồng nhất, các ứng dụng tính toán lưới hầu như được tận dụng cho tài nguyên mạng, thì trong mạng diện rộng (WANs), tài nguyên được chia sẻ giữa các ứng dụng không đồng nhất khác nhau về cấu hình, băng thông, platform; do đó việc phân bổ, lựa chọn tài nguyên thích hợp

là một vấn đề hết sức khó khăn Ngoài ra, các tài nguyên trong lưới thường không

ổn định, nảy sinh ra nhiều vấn đề ảnh hưởng đến chất lượng của dịch vụ Do đó, nhu cầu bảo đảm chất lượng dịch vụ đối với các ứng dụng “Grid Computing” là hết sức quan trọng

1.4 Lý do thực hiện đề tài

Mặc dù Globus đã đưa ra chuẩn OGSA và một framework giúp cho việc xây dựng môi trường lưới dễ dàng và việc tích hợp các môi trường lưới trở nên hiện thực, nhưng vẫn chưa có một chuẩn mực nào cho việc xây dựng một công cụ lập trình cho các ứng dụng chạy trên lưới

Như đã nói ở trên, môi trường lưới là một môi trường rất không đồng nhất về tài nguyên như cấu hình phần cứng, platform… nên ứng dụng chạy trên môi trường lưới cần có khả năng thích ứng với nhiều loại platform khác nhau, cấu hình phần cứng khác nhau Ngoài ra, nhằm đảm bảo chất lượng dịch vụ, cũng như tận dụng được sức mạnh của môi trường lưới, cần có một dịch vụ để tìm kiếm tài nguyên thích hợp cho ứng dụng

Đề tài này sẽ xây dựng một thư viện POPJava trên ngôn ngữ Java nhằm giúp

đỡ việc phát triển ứng dụng trên môi trường lưới Vì thư viện được phát triển trên ngôn ngữ Java nên ứng dụng sử dụng thư viện này tất nhiên có khả năng thích ứng cao với nhiều loại platform, nhiều cấu hình phần cứng khác nhau Ngôn ngữ Java cũng rất mạnh và rất tiện lợi cho việc phát triển ứng dụng, nó hỗ trợ rất nhiều thư viện, công cụ khiến việc lập trình trở nên dễ dàng hơn Ngoài ra, để thỏa mãn việc tìm kiếm tài nguyên thích hợp cho ứng dụng, POPJava sẽ sử dụng hệ thống run-time của POP-C++

Trang 17

Chương 1: Giới thiệu đề tài Trang 4

1.5 Mục tiêu và giới hạn của đề tài

1.5.1 Mục tiêu

Mục tiêu của đề tài là xây dựng một thư viện POPJava trên ngôn ngữ Java hỗ trợ việc phát triển các ứng dụng trên môi trường lưới, hỗ trợ object resource requirement Chương trình viết bằng POPJava có khả năng tương thích với chương trình viết bằng POP-C++ Nhờ đó người dùng có thêm lựa chọn khi phát triển ứng dụng trên môi trường lưới: có thể chuyển một phần hoặc toàn bộ chương trình đã phát triển trên POP-C++ thành chương trình phát triển trên POPJava Ngoài ra, POPJava cũng phải sử dụng được hệ thống run-time có sẵn của POP-C++ để tận dụng các dịch vụ tìm kiếm, quản lý tài nguyên, theo dõi ứng dụng của hệ thống POP-C++

Một mục tiêu khác của POPJava là xây dựng một kiến trúc cho phép người dùng phát triển các giao thức truyền nhận dữ liệu, cách thức mã hóa dữ liệu truyền nhận như các plugin

1.5.2 Phạm vi của đề tài:

• Xây dựng một interface chuẩn cho việc mã hóa (encoding) dữ liệu truyền nhận, người dùng có thể hiện thực interface này để đưa ra một kiểu mã hóa dữ liệu khác tối ưu hơn hoặc đáp ứng tốt hơn yêu cầu của họ, gọi là các encoding-plugin

• Xây dựng một interface chuẩn cho việc truyền nhận dữ liệu (protocol) giữa các node trên lưới, người dùng cũng có thể đưa ra một phương thức truyền nhận khác với điều kiện phải hiện thực đầy đủ interface này, gọi là các protocol-plugin

• Xây dựng cơ chế load các plugin trên trong thời gian thực thi vào hệ thống, cho phép chương trình của người sử dụng lựa chọn các plugin thích hợp cho ứng dụng của họ

Trang 18

Chương 1: Giới thiệu đề tài Trang 5

• Xây dựng các encoding-plugin và protocol-plugin chuẩn có khả năng giao tiếp với các plugin của POP-C++, nhờ đó các object của POPJava và POP-C++ có khả năng tương tác với nhau

• Xây dựng hệ thống Exception để người dùng có thể gỡ lỗi chương trình dễ dàng

• Xây dựng các class đóng gói các kiểu dữ liệu nguyên tố, kiểu dữ liệu input

để kiểu dữ liệu trong Java và C++ tương thích với nhau

• Xây dựng Factory để sinh ra các Parallel Object

1.6 Cấu trúc của luận văn

Chương một giới thiệu tổng quan về Grid Computing, các công cụ lập trình trên môi trường lưới cũng như nhu cầu lập trình hướng đến chất lượng dịch vụ Phần cuối của chương một tóm tắt mục tiêu và phạm vi của đề tài

Chương hai giới thiệu Grid Computing, phân loại Grid Computing và các thành phần của môi trường lưới, cơ sở hạ tầng lưới và các vấn đề về kiến trúc của ứng dụng lưới

Chương ba trình bày mô hình parallel object và ngôn ngữ POP-C++

Chương bốn giới thiệu hai công cụ lập trình lưới là ProActive và OmniRPC Chương năm giới thiệu thư viện POPJava, thư viện lập trình trên ngôn ngữ Java hỗ trợ việc xây dựng ứng dụng lưới

Chương sáu đánh giá khả năng tương thích với nhiều platform của POPJava, khả năng tương thích của POPJava với POP-C++, và hiệu suất của POPJava Phân cuối chương sáu trình bày những hạn chế của POPJava

Cuối cùng, chương bảy nói về những đóng góp của đề tài cũng như hướng phát triển của đề tài

Trang 19

Chương 2: Cơ sở lý thuyết Trang 6

Chương 2

CƠ SỞ LÝ THUYẾT

2.1 Định nghĩa “Grid Computing”

“Grid computing” là một dạng của hệ thống máy tính song song, một hệ thống

siêu máy tính ảo, tổ hợp bởi các cluster độc lập, các máy tính cá nhân, laptop,

PDA… để tận dụng các tài nguyên rảnh rỗi để giải quyết các bài toán lớn, giải quyết

các nhiệm vụ đòi hỏi thời gian rất lớn để hoàn thành Ngoài ra, “Grid Computing”

có thể dùng để cung cấp các dịch vụ tính toán và lưu trữ trực tuyến

Kĩ thuật này đã được ứng dụng trong ngành khoa học tính toán hiệu năng cao

để giải quyết các bài toán lớn trong toán học, sinh học; và nó còn được dùng trong

các công ty thương mại cho những ứng dụng khác nhau như nghiên cứu, phát minh

thuốc chữa bệnh, dự đoán tình hình kinh tế, phân tích địa chấn, xử lý dữ liệu trong

việc hỗ trợ thương mại và Web service

2.2 So sánh Grid và hệ thống siêu máy tính thông thường (super

computer, cluster)

Thông thường Grid được tổ hợp bởi rất nhiều máy tính rất khác nhau về cấu

hình phần cứng như mainboard, CPU, bộ phận lưu trữ, network interface… được

kết nối qua một hệ thống mạng cá nhân hoặc internet thông qua network interface

thông thường như Ethernet Điều này hoàn toàn khác với hệ thống siêu máy tính

thông thường, một hệ thống đồng nhất về cấu hình, được kết nối thông qua một hệ

thống mạng tốc độ rất cao và ổn định

Lợi điểm chính của Grid là các node có thể được xây dựng từ những máy tính

thông thường mà khi kết nối lại thì có sức mạnh như một siêu máy tính, nhưng chi

phí xây dựng thấp Tuy nhiên, nhược điểm của Grid là cấu hình phần cứng giữa các

node rất khác nhau, hệ thống lưu trữ và hệ thống mạng kết nối giữa các node không

có tốc độ cao và ổn định

Trang 20

Chương 2: Cơ sở lý thuyết Trang 7

Do đó, Grid thích hợp cho các ứng dụng tính toán song song có thể chia ra các

ứng dụng con chạy độc lập, ít giao tiếp với nhau, ít đòi hỏi việc đồng bộ dữ liệu

giữa các node

Khả năng mở rộng của Grid cao hơn nhờ vào khả năng kết nối các Grid với

nhau thông qua môi trường Internet

Cũng có một số khác biệt trong việc phát triển và cài đặt ứng dụng Việc viết

chương trình có thể chạy trên môi trường của Grid là khá khó khăn vì chương trình

này phải có khả năng chạy trên các môi trường có cấu hình phần cứng, băng thông

mạng và hệ điều hành khác nhau, tài nguyên không ổn định

2.3 Phân loại “Grid Computing”

“Grid Computing” có thể được sử dụng để đáp ứng nhiều loại ứng dụng với

các yêu cầu khác nhau Thông thường, Gird được phân loại theo loại giải pháp mà

nó tập trung khai thác nhất Người ta phân loại Grid thành ba loại như dưới đây

Tuy nhiên, không có một ranh giới rõ ràng giữa ba loại đó và người ta có thể kết

hợp giữa chúng để tạo ra một loại Grid mới nhằm đáp ứng nhu cầu sử dụng Và khi

xem xét việc phát triển ứng dụng trên hạ tầng lưới, người sử dụng cần lưu ý rằng

loại môi trường lưới đang sử dụng sẽ ảnh hưởng rất lớn đến hiệu suất của ứng dụng

2.3.1 Computational grid

Computational grid tập trung vào việc xây dựng quản lý các tài nguyên phục

vụ tính toán Đối với computational grid, hầu như các node trong grid là các server

hiệu suất cao

2.3.2 Scavenging grid

Scavenging grid thường được sử dụng với số lượng lớn các máy tính desktop

nhằm tận dụng tài nguyên của chúng khi rảnh rỗi Người chủ sở hữu các máy

desktop đó thường cho phép môi trường lưới điều khiển khi máy tính rảnh

Trang 21

Chương 2: Cơ sở lý thuyết Trang 8

2.3.3 Data grid

Data grid chịu trách nhiệm cho việc lưu trữ và cung cấp khả năng truy xuất dữ

liệu giữa các tổ chức khác nhau Người dùng không phải quan tâm tới việc dữ liệu

thực sự nằm ở chỗ nào Ví dụ, chúng ta có hai trường đại học cùng làm công việc

nghiên cứu trên các dữ liệu riêng biệt Data grid cho phép họ truy xuất, quản lý dữ

liệu và theo dõi việc truy xuất dữ liệu của từng người dùng như người nào đã truy

xuất dữ liệu nào

2.4 Các thành phần của môi trường Grid Computing

Phần này sẽ mô tả ở mức tổng quát các thành phần chính yếu của môi trường

lưới Tuỳ thuộc vào việc thiết kế và mục đích của lưới, một số thành phần có thể

cần thiết hoặc không cần thiết, và trong một số trường hợp, chúng có thể được kết

hợp thành một dạng lai

2.4.1 Portal/user interface

Đối với người sử dụng, sức mạnh của grid như một thùng chứa ở phía sau bức

tường, và người sử dụng không nên thấy được cấu trúc phức tạp của “Grid

Computing” Mặc dù giao diện người sử dụng nhìn thấy có thể ở nhiều dạng khác

nhau và được dùng cho các ứng dụng khác nhau, nhưng Grid nên được coi như một

loại portal Đa số người sử dụng đều quen thuộc với khái niệm Web portal: Web

portal cung cấp một interface duy nhất để truy xuất các nguồn thông tin các nhau

Trong khi đó, Grid portal cung cấp một interface để người sử dụng có thể chạy ứng

dụng và sử dụng các tài nguyên và dịch vụ được cung cấp bởi Grid Như vậy, người

sử dụng sẽ coi Grid như một tài nguyên tính toán ảo, giống như người tiêu dùng

điện đối với mạng lưới điện thực tế

Trang 22

Chương 2: Cơ sở lý thuyết Trang 9

Hình 2.1: Userview của “Grid computing”

2.4.2 Security

Một trong những vấn đề quan trọng của “Grid computing” là vấn đề bảo mật

Mọi môi trường lưới phải có cơ chế để đảm bảo tính bảo mật, bao gồm việc xác

thực (authentication), ủy quyền (authorization), mã hóa dữ liệu… GSI (The Grid

Security Infrastructure) trong Globus Tollkit cung cấp cơ chế bảo mật vững chắc

bao gồm việc hiện thực OpenSSL Nó cũng cung cấp cơ chế single sign-on; vì vậy

khi một người dùng đã được xác thực, proxy certificate được khởi tạo và sử dụng

cho tất cả trường hợp người đó sử dụng lưới cho tới khi thoát ra Khi thiết kế môi

trường lưới chúng ta có thể sử dụng GSI sign-in để sử dụng portal hoặc xây dựng

riêng một cơ chế bảo mật cho portal Sau đó portal sẽ chịu trách nhiệm quản lý việc

log-in của người dùng

Trang 23

Chương 2: Cơ sở lý thuyết Trang 10

Hình 2.2: Security trong môi trường lưới

2.4.3 Broker

Một khi đã được xác thực, người dùng sẽ được phép chạy ứng dụng Tùy

thuộc vào ứng dụng, và các thông số được cung cấp bởi người dùng, ở giai đoạn

tiếp theo, chúng ta cần phải nhận dạng các tài nguyên thích hợp trong lưới Nhiệm

vụ này có thể được gọi là broker Mặc dù không có broker nào được cung cấp bởi

Globus, nhưng Globus cung cấp một service LDAP, service này gọi là Grid

Information Service, hoặc Monitoring and Discovery Service, chịu trách nhiệm

cung cấp thông tin của tác tài nguyên trong hệ thống

Hình 2.3: Broker service

Trang 24

Chương 2: Cơ sở lý thuyết Trang 11

2.4.4 Scheduler

Sau khi tài nguyên đã được xác định, bước tiếp theo là phải định thời cho từng

job chạy trên lưới Nếu một tập hợp các job độc lập thực thi, công việc định thời sẽ

rất đơn giản Tuy nhiên nếu người dùng muốn đặt chỗ một số tài nguyên để một số

job của ứng dụng có thể chạy đồng thời (trong trường hợp này, các job này cần phải

giao tiếp với nhau), khi đó bộ định thời cần được xây dựng để quản lý, định thời các

job

Globus Toolkit chưa bao gồm một bộ định thời, nhưng có một số bộ định thời

có sẵn đã được kiểm tra và có thể sử dụng trong Globus

Cũng cần lưu ý rằng có nhiều cấp độ định thời trong môi trường lưới Ví dụ,

một cluster có thể được coi là một tài nguyên, nhưng bản thân cluster đó cũng có bộ

định thời riêng quản lý các node của nó Một bộ định thời meta scheduler sẽ quản

lý, định thời các job trên cluster, trong khi bộ định thời riêng của cluster sẽ chịu

trách nhiệm định thời các job trên các node của nó

Hình 2.4: Scheduler

Trang 25

Chương 2: Cơ sở lý thuyết Trang 12

2.4.5 Data management

Nếu mọi dữ liệu, kể cả dữ liệu cho từng module của ứng dụng, không nằm trên

node mà job được thực thi thì cần phải có một cơ chế bảo mật cho các phương thức

truy xuất dữ liệu giữa các node trong lưới Globus Toolkit đã cung cấp một

component quản lý dữ liệu đảm bảo chức năng như trên là Grid Access to

Secondary Storage, ví dụ như GridFTP GridFTP được xây dựng trên protocol FTP

chuẩn, nhưng thêm chức năng GSI để xác thực và ủy quyền người sử dụng Do đó

một khi người dùng đã có một chứng thực, người đó có thể sử dụng GridFTP để

truy xuất dữ liệu mà không cần phải login vào mỗi node

Hình 2.5: Data management

2.4.6 Job và resource management

Grid Resource Allocation Manager cung cấp service để có thể thực thi job trên

tài nguyên cụ thể, kiểm tra trạng thái và lấy về kết quả khi nó hoàn thành

Trang 26

Chương 2: Cơ sở lý thuyết Trang 13

Hình 2.6: GRAM

2.4.7 Các chức năng khác

Có rất nhiều chức năng khác cần thiết của môi trường lưới cần phải được xem

xét khi thiết kế và hiện thực ứng dụng; ví dụ: việc giao tiếp giữa các process, quản

lý tài khoản, thu lợi nhuận từ việc cung cấp dịch vụ…

2.5 Ngôn ngữ lập trình cho Grid computing

Khi một ứng dụng được phát triển, việc dùng ngôn ngữ nào để phát triển luôn

được đặt ra Các ứng dụng tính toán hiệu năng cao thường được viết bởi ngôn ngữ

C hoặc Fortran Những ứng dụng không đặt mục tiêu đạt được thời gian thực thi

ngắn nhất lên hàng đầu, nhưng có nội dung quan trọng có thể được viết bằng ngôn

ngữ khác như Java hoặc ngôn ngữ scipt như Perl

Trong một ứng dụng lưới đơn lẻ, một vấn đề cần xem xét là cần khảo sát sự

phụ thuộc giữa những yêu cầu về tài nguyên của ứng dụng với những tài nguyên

sẵn có

Một số vấn đề quan trọng cần khảo sát khi lựa chọn ngôn ngữ để phát triển

ứng dụng lưới:

Trang 27

Chương 2: Cơ sở lý thuyết Trang 14

¾ Khả năng thích ứng với những platform khác nhau

Người sử dụng có thể lựa chọn ngôn ngữ Java để tạo ra các file thực thi có thể

chạy trên các platform có hỗ trợ Java Virtual Machine hoặc ngôn ngữ thông dịch

như Perl có khả năng chạy trên bất kì platform nào

Ngoài ra, người sử dụng cũng có thể dùng các ngôn ngữ có khả năng biên dịch

ở các platform khác nhau như ngôn ngữ C, để có thể phát triển ứng dụng và biên

dịch thành các file thực thi tương ứng với mỗi platform

¾ Run-time libraries/modules

Tuỳ vào ngôn ngữ và tuỳ vào cách chương trình liên kết với nhau, có một số

yêu cầu về các thư viện run-time hoặc các module phụ thuộc Khi đó, để ứng dụng

có thể chạy được, các thư viện và module cần thiết phải sẵn sàng hoặc có thể di

chuyển tới tài nguyên dùng để chạy ứng dụng

¾ Ngôn ngữ được hỗ trợ để giao tiếp với kiến trúc lưới

Nếu một ứng dụng cần giao tiếp với cơ sở hạ tầng lưới như Globus, việc lựa

chọn ngôn ngữ cũng phụ thuộc sự hỗ trợ sẵn có Ví dụ, Globus Toolkit V2.2 chỉ

mới hỗ trợ cho ngôn ngữ C, nhưng hiện nay nó đã hỗ trợ cho Java, Perl và các ngôn

ngữ khác

¾ Khả năng độc lập của job đối với môi trường

Một ứng dụng lưới không nhất thiết phải đòi hỏi một môi trường đồng nhất,

nhưng chắc chắn phải xem xét những tài nguyên cần thiết để cài đặt ứng dụng

− Hệ điều hành, và những thông tin cài đặt cần thiết để thực thi ứng dụng,

cũng như các dịch vụ tin cậy, các chương trình hỗ trợ như registry: Điều này phụ

thuộc vào ứng dụng có khả năng chạy trên mọi hệ điều hành hay chỉ giới hạn ở một

hệ điều hành nào đó

− Dung lượng bộ nhớ cần thiết để chạy một job: Dung lượng bộ nhớ sẵn có

không chỉ phụ thuộc và bộ nhớ vật lý mà còn phụ thuộc vào chính sách cấp phát bộ

nhớ của hệ điều hành

Trang 28

Chương 2: Cơ sở lý thuyết Trang 15

− Thư viện liên kết để thực thi ứng dụng: Chúng có thể bắt buộc phải sẵn sàng

trên node chạy ứng dụng hoặc có thể được chép tới node thực thi ứng dụng

− Tuỳ chọn biên dịch ảnh hưởng rất lớn đến tính tương thích của ứng dụng Ví

dụ, thứ tự các bit trong số thực, số nguyên có thể làm chương trình chạy sai nếu một

ứng dụng được chạy trên một node khác với node dùng để biên dịch chương trình

− Runtime environment của node thực thi ứng dụng cũng có thể làm cho ứng

dụng không thể tương thích Ví dụ node thực thi có version JDK thấp hơn version

yêu cầu

− Version của Application Server cũng như khả năng của nó cũng cần phải

xem xét khi phát triển ứng dụng

− Những ứng dụng khác như trình biên dịch, cơ sở dữ liệu, các dịch vụ hệ

thống cần phải hoạt động tốt và sẵn sàng khi chạy ứng dụng lưới

− Cấu hình phần cứng đòi hỏi khi ứng dụng chạy các job Ví dụ, các yêu cầu

về bộ phận lưu trữ, các thiết bị ngoại vi

¾ Checkpoint và khả năng restart

Một ứng dụng lưới có thể được thiết kế chỉ nhằm mục đích chạy và trả kết quả

về cho người dùng hoặc grid portal tùy thuộc vào việc nó chạy thành công hoặc thất

bại Nhưng trong một số trường hợp thất bại, một job có thể cần được chạy lại lần

thứ hai, lần thứ ba cho tới khi nó thành công Tuy nhiên, có thể giảm sự lãng phí tài

nguyên của hệ thống bằng cách xây dựng các checkpoint và xây dựng khả năng

khôi phục ứng dụng ngay tại điểm mà nó thất bại

Trang 29

Chương 3: Parallel Object Model Trang 16

Chương 3 PARALLEL OBJECT MODEL

Mô hình giới thiệu một kiểu đối tượng mới: một đối tượng song song hoạt động giống như một đối tượng thuần tuý trong C++ và Java nhưng được bổ sung thêm một số đặc tính sau:

• Các đối tượng có thể chia sẻ được phân tán

• Sự định vị các đối tượng động và rõ ràng được điều khiển bằng các mô

tả những yêu cầu cấp cao

• Sự đa dạng về ngữ nghĩa gọi hàm

3.1 Các đối tượng có thể chia sẻ phân tán

Trước tiên, mô hình đối tượng song song đi theo cách tiếp cận object-centric,

có nghĩa là lập trình viên có thể tạo cũng như hủy đi các đối tượng song song một cách chủ động bằng cách gửi các yêu cầu ở bất cứ nơi phân tán nào nằm trong ứng dụng

Thứ hai, chuyển một đối tượng song song từ nơi này sang nơi khác qua việc gọi hàm từ xa là trong suốt đối với các lập trình viên Điều này giúp cho việc loại bỏ các biên giới tài nguyên trong các ứng dụng hướng đối tượng được phân tán theo cách truyền thống

Cuối cùng, khi mỗi đối tượng song song có thể được sử dụng từ một thành phần phân tán khác thì tất cả các đối tượng song song có thể được chia sẻ trong một ứng dụng đơn

Trang 30

Chương 3: Parallel Object Model Trang 17

3.2 Các yêu cầu về tài nguyên

Trong các môi trường phân tán khá tĩnh, đồng nhất và nhỏ như Clusters of Workstations (CoW), người sử dụng biết được tất cả các tài nguyên hiện hành, do

đó họ có thể chỉ định bằng tay một tài nguyên thích hợp cho mỗi đối tượng song song Khi kích thước, tính không đồng nhất, cũng như tính thay đổi của môi trường tăng như trên Grid, việc chọn lựa bằng tay các tài nguyên thích hợp trở thành vô cùng khó khăn Trong một số môi trường nào đó, các công cụ hỗ trợ có thể cho phép người sử dụng mô tả các yêu cầu tài nguyên ở mức độ tổng quát và các dịch

vụ cơ bản chọn lựa một cách tự động các tài nguyên thích hợp

Các đối tượng song song mô tả các yêu cầu tài nguyên của nó trong một đối tượng gọi là OD (Object Description) Mỗi hàm Constructor có thể kết hợp với một

OD Sự mô tả tài nguyên trong mỗi OD có thể được tham số hoá bởi các dữ liệu đầu vào Dựa trên việc tạo ra một đối tượng song song, OD sẽ tự động ước lượng để tạo

ra những chỉ định tài nguyên được sử dụng lần lượt bởi hệ thống runtime để thực hiện việc khám phá, bảo vệ và định vị tài nguyên cho đối tượng

Một biểu thức OD có thể ở trên khả năng tính toán, bộ nhớ, băng thông mạng, nghi thức truyền thông… Nó cũng có thể chứa đựng các thông tin tuỳ chọn như tên của dịch vụ khám phá tài nguyên, sự định vị đối tượng, hoặc phương pháp mã hoá

dữ liệu (raw, XDR or SOAP/XML)

3.3 Các ngữ nghĩa gọi hàm (method invocation semantics)

Mô hình đối tượng song song đề cao ngữ nghĩa gọi hàm để hỗ trợ mối quan hệ song song của inter-object và intra-object Ngữ nghĩa định nghĩa hành vi của mỗi phương pháp dẫn chứng trên cả 2 phía: phía gọi method - interface side và phía thực thi của đối tượng – object side

Trang 31

Chương 3: Parallel Object Model Trang 18

3.3.1 Ngữ nghĩa ở phía gọi method có các ngữ nghĩa sau

Gọi đồng bộ (Synchronous invocation): người gọi đợi đến khi việc thực hiện

phương pháp từ xa kết thúc và kết quả được trả về

Gọi bất đồng bộ (Asynchronous invocation): người gọi trả về ngay lập tức

sau khi gửi yêu cầu đến đối tượng ở xa Kiểu gọi này không đợi các kết quả trả về

Để nhận các kết quả trả về, người gọi có thể cung cấp một đối tượng song song

“phản hồi” (callback) như một thông số gọi hàm

3.3.2 Ngữ nghĩa ở phía thực thi đối tượng có các ngữ nghĩa sau:

Mutex (Mutex invocation): ngữ nghĩa này đảm bảo như một rào chắn của tất

cả các sự gọi hàm bên trong đối tượng song song Ngữ nghĩa mutex yêu cầu hàm được thực hiện chỉ khi không có hàm nào khác đang chạy Nếu không thì nó sẽ chờ đến khi tất các các hàm được kết thúc Trong thời gian chờ, “mutex” cũng khoá tất

cả những yêu cầu khác được gửi đến sau đó (rào chắn)

Gọi tuần tự (Sequential invocation): bảo đảm việc chuỗi hoá các các hàm

tuần tự Tất cả các hàm tuần tự sẽ được phục vụ theo thứ tự đến của chúng mà không có tình trạng chồng lên nhau Đợi sự yêu cầu gọi tuần tự không ngăn cản những hàm đồng thời khác được thực hiện tại cùng thời điểm

Gọi đồng thời (Concurrent invocation): là việc thực hiện hàm nhờ vào việc

sinh ra quá 1 quá trình mới (thread) nếu không có hàm mutex đang chờ hoặc đang thực hiện (xem ngữ nghĩa sự gọi mutex)

Hình sau minh hoạ sự khác nhau của các ngữ nghĩa gọi hàm về mặt đối tượng Lời gọi tuần tự Seq1 được phục vụ ngay lập tức, và chạy đồng thời với Conc1 Seq2

bị hoãn lại vì Seq1 đang thực hiện Khi sự gọi mutex Mutex1 đến, nó phải đợi đến khi các hàm đang chạy kết thúc Trong thời gian đợi, nó ngăn chặn những yêu cầu khác tới sau (Conc3)

Trang 32

Chương 3: Parallel Object Model Trang 19

Hình 3.1: Ngữ nghĩa gọi hàm: Đồng thời(Conc1, Conc2, Conc3), tuần tự

(Seq1, Seq2), và Mutex (Mutex1)

3.4 POP-C++ programming language

POP-C++ hiện thực mô hình parallel bằng cách mở rộng ngôn ngữ C++ để hỗ trợ parallel object Bảng sau thể hiện sự so sánh giữa parallel object class của POP-C++ và class C++ truyền thống Chỉ có một số ít khác biệt giữa chúng

Hình 3.2: Sự khác nhau giữa class trong C++ và parallel class trong

POP-C++

Trang 33

Chương 3: Parallel Object Model Trang 20

3.4.1 Parclass method declarations and invocations

Lập trình viên có thể định nghĩa ngữ cảnh gọi hàm của mỗi method Ở phía interface có hai ngữ cảnh gọi hàm là sync (synchronous) và async (asynchronous);

và ở phía object thực thi có ba ngữ cảnh: conc (concurrent), seq (sequential) và mutex

Lập trình viên cũng có thể giúp trình biên dịch POP-C++ sinh ra mã có độ hiệu quả cao bằng cách đặc tả các chỉ thị in (cho tham số input) và out (cho tham số output) Tham số output chỉ có ý nghĩa đối với các method synchronous Nếu lập trình viên không đặc tả các chỉ thị đó, POP-C++ sẽ áp dụng một số luật sau để gán các chỉ thị mặc định:

¾ Nếu method là asynchronous, tất cả các tham số là input

¾ Nếu method là synchronous:

• Các tham số là hằng hoặc được truyền tham trị, sẽ được gán chỉ thị input

• Các tham số địa chỉ hoặc array sẽ được gán chỉ thị input và output POP-C++ có thể tự động marshal/demarshal tất cả các kiểu dữ liệu nonpointer (bao gồm kiểu primitive và kiểu structure) Kiểu dữ liệu pointer của C++ rất nhập nhằng nên lập trình viên phải đặc tả rõ số phần tử của dữ liệu bằng chỉ thị size=<number> trong block marshalling

Ví dụ sau đây minh họa cách để định nghĩa một parclass method Sort là một method synchronous-concurrent của SortObj có hai thông số: một array các integer (input và output) và số lượng các phần tử n

sync conc void Sort([in, out, size=n]int *data, int n);

}

parclass SortObj {

Trang 34

Chương 3: Parallel Object Model Trang 21

3.4.2 Object description

Object Description (OD) có thể được định nghĩa cho mỗi parclass trực tiếp ngay khi khai báo hàm constructor Cú pháp của một khai báo OD như sau:

@{resources requirement expression}

Hiện tại, POP-C++ cho phép lập trình viên đặc tả các yêu cầu về tài nguyên dựa trên các yêu cầu về sức mạnh tính toán (Mflops; keyword: power), bộ nhớ (MB; keyword: memory), băng thông (Mb/s; network), vị trí của tài nguyên (host name hoặc IP address; url), protocol (socket or http; protocol), và các mã hóa dữ liệu truyền đi (raw, xdr, raw-zlib or xdr-zlib; encoding)

Cú pháp để khai báo OD:

resources requirement expression :=

od.<resource type1> (<numexpr>) | od.<resource type1> (<numexpr>, <numexpr>) | od.<resource type2> (<strexpr>)

resource type1 := power | memory | network | walltime

resource type2 := protocol | encoding | url

numexpr := a number expression

strexpr := a null-terminated string expression

Ví dụ: Hàm contructor của parclass Matrix (size n _ m) dưới đây yêu cầu tài

nguyên có sức mạnh tính toán 200 Mflops (ít nhất là 100 MFlops) (non-strict OD)

và protocol là socket hoặc

Trang 35

Chương 3: Parallel Object Model Trang 22

3.4.3 Object events

Mỗi parallel object có một event queue riêng có thể được sử dụng để đồng bộ

và thông báo cho các concurrent method khác trong object về một số event riêng biệt Mỗi event có một Id riêng, để đợi event thứ n, có thể dùng eventwait(n) để đợi cho tới khi method khác raise event đó qua hàm eventraise(n) Event thường được dùng để thông báo một dữ liệu mới của object khác

3.4.4 Mutual exclusive execution

Programmer có thể dùng keyword mutex để đảm bảo tính nhất quán dữ liệu

3.4.5 Chương trình ví dụ

Sau đây là một parallel class đơn giản, lưu trong file integer.ph

public:

Integer() @{ od.power(100, 80); };

seq async void Set(int val);

conc int Get();

mutex async void Add(Integer &other);

Trang 36

Chương 3: Parallel Object Model Trang 23

Hiện thực của parallel class Integer lưu trong file integer.cc như sau:

void Integer::Set(int val)

Chương trình Client sử dụng parallel class Integer cũng rất đơn giản, lưu trong file main.cc như sau:

int main(int argc, char *argv[])

Để biên dịch parallel class Integer, người dùng có thể sử dụng command sau:

% parocc –object –o integer.obj integer.ph integer.cc

Trang 37

Chương 3: Parallel Object Model Trang 24

Để biên dịch chương trình Client, người dùng có thể sử dụng command sau:

% parocc –o main integer.ph integer.cc main.cc

Để tạo ra file object map lưu trữ thông tin về file thực thi, hệ điều hành của parallel class Integer, người dùng có thể sử dụng command sau:

% /integer.obj –listlong >objmap

Cuối cùng để chạy chương trình, người dùng chỉ cần sử dụng command sau:

% parocrun /main objmap

Trang 38

Chương 4: Một số công cụ lập trình Grid Computing khác Trang 25

Hình 4.1: Grid Infrastructure Standards 4.1: Grid Infrastructure Standards

Trang 39

Chương 4: Một số công cụ lập trình Grid Computing khác Trang 26

4.1.1 Developer Tools & IDE

Proactive cung cấp một plugin Eclipse gồm các thành phần sau đây cho phép theo dõi chương trình song song và phân bố, đánh giá hiệu suất để có thể cải tiến chương trình

• Monitoring and Control

• The Monitoring plugin

• The Job Monitoring plugin

• The TimIt plugin

4.1.3 Deployment & Virtualization

Hỗ trợ giao tiếp giữa các thành phần với tất cả các protocol và Grid infrastructures, Desktop Grid, File transfer và ad-hoc Scheduling

Trang 40

Chương 4: Một số công cụ lập trình Grid Computing khác Trang 27

4.1.4 Services

Các chức năng như Features như Fault-Tolerance, Load Balancing, Security

và những thứ khác có thể thêm vào thời gian triển khai ứng dụng

Việc gọi hàm của một class ActiveObject cũng giống như gọi hàm của một class Java thông thường:

TinyHello tiny = (TinyHello) ProActive.newActive(

TinyHello.class.getName(), null);

StringMutableWrapper received = tiny.sayHello(); //

possibly remote call

Ngày đăng: 08/03/2021, 23:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w