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 2i
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 3ii
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 4iii
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 5iv
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 6v
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 7vi
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 8vii
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 9viii
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 10ix
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 11x
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 12xi
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 13xii
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 14Chươ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 15Chươ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 17Chươ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 18Chươ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 19Chươ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 20Chươ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 21Chươ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 22Chươ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 23Chươ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 24Chươ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 25Chươ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 26Chươ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 27Chươ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 28Chươ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 29Chươ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 30Chươ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 31Chươ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 32Chươ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 33Chươ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 35Chươ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 36Chươ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 37Chươ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 38Chươ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 39Chươ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 40Chươ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