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

xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới

87 252 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 87
Dung lượng 3,37 MB

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

Nội dung

POP-Phiên bản 1.1.1 POP-C++ hiện tại mới cung cấp một số chức năng cơ bản nhất như: trình biên dịch cho phép dịch source code sang ngôn ngữ ANSI C++, một compiler front-end cho phép tự ñ

Trang 1

ỦY BAN NHÂN DÂN TP.HCM TRƯỜNG ðẠI HỌC BÁCH KHOA TP.HCM

SỞ KHOA HỌC VÀ CÔNG NGHỆ KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH

BÁO CÁO NGHIỆM THU (Theo yêu cầu chỉnh sửa của hội ñồng cơ sở)

XÂY DỰNG CÔNG CỤ LẬP TRÌNH CHO TÍNH TOÁN THÍCH NGHI HIỆU NĂNG CAO

TRÊN MÔI TRƯỜNG TÍNH TOÁN LƯỚI

Chủ nhiệm: TS TRẦN VĂN HOÀI

THÀNH PHỐ HỒ CHÍ MINH THÁNG 12/ 2009

Trang 2

ii

TÓM TẮT NỘI DUNG NGHIÊN CỨU

Hiện tại chúng tôi ñang cùng với Trường Kỹ Sư và Kiến Trúc Fribourg, Thụy Sĩ nghiên cứu và phát triển một công cụ tính toán hiệu năng cao POP-C++ [20, 28] dựa trên khái niệm ñối tượng phân bố hướng tài nguyên POP-C++ hiện tại ñang ở phiên bản 1.1.1 ñược xây dựng dưới dạng mã nguồn mở ñồng sở hữu bởi hai tác giả

là TS Nguyễn Tuấn Anh và GS Pierre Kuonen (Trường Kỹ Sư Kiến Trúc Fribourg, Thụy Sĩ)

Việc phát triển ứng dụng dựa trên C++ là khá ñơn giản và hiệu quả C++ mở rộng C++ chỉ với một vài từ khóa mới cho phép khai báo các ñối tượng chạy phân bố dựa trên các yêu cầu cao về chất lượng dịch vụ của tài nguyên (QoS) POP-C++ cung cấp cùng một kiểu cú pháp ñể hiện thực các phương thức của ñối tượng phân bố như trong C++ Viết một chương trình chạy trên môi trường lưới cũng ñơn giản như là việc viết một chương trình chạy bằng C++

POP-Phiên bản 1.1.1 POP-C++ hiện tại mới cung cấp một số chức năng cơ bản nhất như: trình biên dịch cho phép dịch source code sang ngôn ngữ ANSI C++, một compiler front-end cho phép tự ñộng hóa quá trình dịch từ POP-C++ sang ngôn ngữ máy, thư viện truyền thông giữa các ñối tượng song song phân bố dựa trên TCP/IP

và dạng nhị phân XDR, một số dịch vụ thực thi cho phép giao tiếp với PreWS GRAM của bộ công cụ Globus Toolkit ñể thực thi ứng dụng Việc hỗ trợ ña phương thức giao tiếp (muti-protocols) và chuẩn dữ liệu (multi-encoding) hiện tại chưa ñược hỗ trợ trong POP-C++ Phương thức giao tiếp giữa các ñối tượng song song phân bố trên lưới tính toán hiện sử dụng các kết nối TCP/socket nên vẫn gặp vấn ñề khi các tài nguyên tính toán nằm trong các mạng ảo hoặc ngăn cách bởi các firewall Các chuẩn giao tiếp lưới như OGSA, WSRF hiện vẫn chưa ñược hỗ trợ Các nội dung nghiên cứu chính của ñề tài gồm:

1 Tìm hiểu các chuẩn OGSI và WSRF

2 Xây dựng công cụ hỗ trợ lập trình WSRF bằng cách mở rộng POP-C++:

• Tìm hiểu khả năng kích hoạt phương thức POP-C++ thông qua giao thức HTTP/SOAP

• Tìm hiểu khả năng mở rộng của thư viện hệ thống POP-C++

• Mở rộng thư viện hỗ trợ ñồng thời các giao thức truyền thông khác nhau dưới dạng các plugin

• Xây dựng hệ thống thông ñiệp kích hoạt ñối tượng dựa trên SOAP/WSRF

• Xây dựng công cụ chuyển ñổi từ ñối tượng song song POP-C++ sang dạng WSDL và ngược lại Công cụ này cho phép các dịch vụ chuẩn WSRF không viết bằng POP-C++ có thể gọi các dịch vụ WSRF/POP-

Trang 3

• Xây dựng Grid portal cho ứng dụng

• Chạy, ño ñạc và ñánh giá hiệu quả

Trang 4

iv

SUMMARY OF RESEARCH CONTENT

At the moment, depending on the concept of resources oriented distributed objects, we, along with the College of Engineering and Architecture of Fribourg, Switzerland, have been studying and developing a tool for high performance computing - POP-C++ [20, 28] The current open source version 1.1.1 of POP-C++

is owned by Dr Tuan-Anh Nguyen and Prof Pierre Kuonen (College of Engineering and Architecture of Fribourg, Switzerland)

Developing an application using POP-C++ is quite simple POP-C++ extends C++ by adding some new keywords that allow declaring distributed objects based

on requirements of quality of services (QoS) POP-C++ supplies the same syntax with C++ to implement methods of distributed objects Writing a distributed program in POP-C++ is as simple as writing a traditional program in C++

The current version of POP-C++ (1.1.1) only supplies fundamental components such as: a pre-compiler to convert POP-C++ source code to ANSI C++ language; a front-end compiler to automatically compile POP-C++ code to machine code, to distributed objects communication libraries based on TCP/IP connection and XDR format, to some services that allow communicating to PreWS GRAM of Globus Toolkit to launch an application It has not supported multi-protocol and multi-encoding in this version yet Communicating between parallel objects based on TCP/IP connections is not allowed when computing resources are located in virtual networks or separated by firewall Grid communicating standard such as OGSA, WSRF has not been supported yet

The project focuses on these main points:

1 Study OGSI and WSRF standards

2 Build a tool supporting programming using WSRF by extending POP-C++:

• Study how to invoke a remote method by using HTTP/SOAP

• Study how to extend POP-C++ libraries

• Extend POP-C++ libraries to support multi-protocol and multi-encoding

as plugins

• Implement message-encoding based on SOAP/WSRF

• Implement a tool that supports converting POP-C++ objects to WSDL and vice versa This tool makes standard WSRF services that are not written in POP-C++ can invoke a service written in WSRF/POP-C++ and vice versa, it also makes POP-C++ computing services be able to invoke other services based on WSRF (e.g GT4 GRAM)

3 Integrate POP-C++ into EDAGRID (Campus Grid) to connect and share computing resources of HCMUT

4 Build and develop grid applications and test them on EDAGRID:

Trang 5

v

• Parallel application to utilize physical distributed resources

• Build a Grid portal for that application

• Make some experiments to evaluate performance

Trang 6

vi

MỤC LỤC

TÓM TẮT NỘI DUNG NGHIÊN CỨU ii

SUMMARY OF RESEARCH CONTENT iv

MỤC LỤC vi

DANH SÁCH CÁC CHỮ VIẾT TẮT viii

DANH SÁCH BẢNG ix

DANH SÁCH HÌNH x

PHẦN MỞ ðẦU xii

CHƯƠNG 1: TỔNG QUAN 1

1.1 Tổng quan tình hình nghiên cứu thuộc lĩnh vực ñề tài 1

1.1.1 Ngoài nước: 1

1.1.2 Trong nước: 3

1.2 Tính cấp thiết của ñề tài 5

1.3 Ý nghĩa và tính mới về khoa học và thực tiễn 6

CHƯƠNG 2: NỘI DUNG NGHIÊN CỨU 7

2.1 Phân tích yêu cầu bài toán 7

2.2 Phân tích và tìm hiểu các công nghệ/hệ thống liên quan 8

2.2.1 Tìm hiểu chuẩn WSRF 8

2.2.2 Tìm hiểu giao thức SOAP của Web Services 14

2.2.3 Tìm hiểu các thư viện xử lý XML hiện có 16

2.2.3.1 Document Object Model (DOM) 17

2.2.3.2 Simple API for XML (SAX) 18

2.2.3.3 So sánh hai mô hình DOM và SAX 18

2.2.3.4 Xerces-C++ 19

2.2.4 Tìm hiểu thư viện hệ thống POP-C++ 19

2.2.5 Cơ chế kích hoạt phương thức từ xa và ñịnh dạng thông ñiệp của POP-C++ 22

2.2.5.1 Cơ chế kích hoạt phương thức từ xa 23

2.2.5.2 Cơ chế ñịnh dạng thông ñiệp của POP-C++ 24

2.3 Mở rộng POP-C++ hỗ trợ lập trình lưới 26

2.3.1 Thiết kế mở rộng POP-C++ hỗ trợ ñồng thời nhiều network protocol 26 2.3.2 Xây dựng hệ thống truyền thông POP-C++/HTTP 31

2.3.3 Thiết kế mở rộng POP-C++ hỗ trợ ñồng thời nhiều buffer 34

2.3.4 Thiết kế hệ thống ñịnh dạng dữ liệu theo chuẩn WSRF 36

2.3.5 Xây dựng hệ thống trao ñổi dữ liệu SOAP/XML 39

2.3.6 Tích hợp hệ thống vào POP-C++ 41

2.4 Tích hợp POP-C++ lên hạ tầng lưới EDAGrid 42

2.4.1 Mô hình thực thi ứng dụng POP-C++ 42

2.4.2 Qui trình thực thi ứng dụng 43

Trang 7

vii

2.4.3 Mở rộng và tắch hợp POP-C++ vào EDAGrid 44

2.4.4 Cải tiến API giao tiếp giữa ứng dụng POP-C++ và môi trường thực thi 45

2.4.4.1 Runtime API hiện tại 45

2.4.4.2 Nâng cấp và mở rộng API hiện có 46

2.4.5 Nâng cấp dịch vụ ứng dụng hỗ trợ service plugin 47

2.4.6 Tắch hợp POP-C++ trên EDAGrid 48

2.5 Công cụ hỗ trợ 50

2.5.1 Công cụ chuyển ựổi các giao tiếp (API) WSRF và POP-C++ 51

2.5.1.1 Kiến trúc POP-C++ compiler 51

2.5.1.2 Công cụ tạo WSDL từ source POP-C++ 52

2.5.2 Công cụ tự ựộng sinh ựối tượng song song từ ựặc tả WSDL/WSRF 53

2.5.2.1 Cấu trúc file WSDL 54

2.5.2.2 Cách hiện thực 56

2.6 Ứng dụng POP-C++ cho bài toán thiết kế vi mạch 56

2.6.1 Song song hóa giải thuật 56

2.6.2 Xây dựng Grid portal cho ứng dụng 57

2.6.2.1 Tìm hiểu EDAGrid 57

2.6.2.2 Tìm hiểu bài toán thiết kế vi mạch 59

2.6.2.3 Tìm hiểu Grid portal 60

2.6.2.4 Thiết kế giao diện Portlet cho bài toán thiết kế vi mạch 62

CHƯƠNG 3: KẾT QUẢ VÀ THẢO LUẬN 66

3.1 đánh giá kết quả dựa trên sản phẩm KH&CN 66

3.2 đánh giá kết quả dựa trên việc chuyển giao công nghệ 67

3.3 đánh giá kết quả dựa trên việc xây dựng và phát triển hướng nghiên cứu 68

CHƯƠNG 4: KẾT LUẬN VÀ đỀ NGHỊ 70

PHỤ LỤC 72

TÀI LIỆU THAM KHẢO 73

Trang 8

viii

DANH SÁCH CÁC CHỮ VIẾT TẮT

SOAP Simple Object Access Protocol

WSDL Web Services Description Language

WSRF Web Service Resource Framework

XDR External Data Representation Standard

Trang 9

ix

DANH SÁCH BẢNG

Bảng 2 - 1: So sánh kích thước thông ñiệp XDR và SOAP 19

Bảng 2 - 2: Một số thư viện hệ thống của POP-C++ 21

Bảng 3 - 1: Sản phẩm của ñề tài so với bản ñăng ký 66

Bảng 3 - 2: Sản phẩm khoa học của ñề tài 67

Trang 10

x

DANH SÁCH HÌNH

Hình 1 - 1: Mô hình lập trình lưới (dựa trên [3]) 2

Hình 2 - 1: Cách tiếp cần hệ thống POP-C++ phiên bản 1.1.1 trong môi trường có firewall 7

Hình 2 - 2: Mô hình ñề xuất hệ thống POP-C++ phiên bản mới trong môi trường có firewall 8

Hình 2 - 3: Một lời gọi Web Service cơ bản [2] 9

Hình 2 - 4: Lời gọi Web Service không có trạng thái [2] 10

Hình 2 - 5: Lời gọi Web Service có trạng thái [2] 11

Hình 2 - 6: Mối quan hệ giữa OGSA, GT4, WSRF, và Web [2] 12

Hình 2 - 7: WS-Resource [2] 13

Hình 2 - 8: Gửi nhận thông ñiệp thông qua giao thức SOAP 14

Hình 2 - 9: Trao ñổi thông ñiệp dùng giao thức SOAP [7] 15

Hình 2 - 10: Cấu trúc của một SOAP message [12] 16

Hình 2 - 11: Cấu trúc cây của DOM [38] 17

Hình 2 - 12: Quá trình tạo các ñối tượng trong POP-C++ [19] 20

Hình 2 - 13: Lược ñồ lớp một số ñối tượng trong POP-C++ 21

Hình 2 - 14: Giao tiếp giữa các ñối tượng trong POP-C++ 23

Hình 2 - 15: Gửi nhận thông ñiệp giữa ñối tượng Interface và Object 24

Hình 2 - 16: ðịnh dạng của buffer 25

Hình 2 - 17: Mô hình kết nối giữa các ñối tượng combox trong POP-C++ 27

Hình 2 - 18: Quá trình kết nối giữa các ñối tượng trong POP-C++ sử dụng combox 29

Hình 2 - 19: Quá trình load combox plugin của hệ thống POP-C++ 30

Hình 2 - 20: Giao tiếp giữa các ñối tượng sử dụng combox_http 32

Hình 2 - 21: Gửi nhận thông ñiệp giữa các ñối tượng thông qua buffer 34

Hình 2 - 22: Quá trình trao ñổi dữ liệu trong POP-C++ 36

Hình 2 - 23: Request message theo ñịnh dạng của WSRF 38

Hình 2 - 24: Response message theo ñịnh dạng của WSRF 39

Hình 2 - 25: Request SOAP message 41

Hình 2 - 26: Response SOAP message 41

Hình 2 - 27: Kiến trúc phân lớp của POP-C++ 42

Hình 2 - 28: Tương tác giữa dịch vụ ứng dụng (service A) và dịch vụ toàn cục (service B) 43

Hình 2 - 29: Các bước khởi tạo thực thi parallel object 44

Hình 2 - 30: Tổ chức lại API của POP-C++ runtime service 46

Hình 2 - 31: Cơ chế plugin dịch vụ mới vào POP-C++ 48

Hình 2 - 32: Tích hợp POP-C++ vào EDAGrid 49

Hình 2 - 33: POP-C++ compiler 51

Hình 2 - 34: Các thành phần chính của POP-C++ parser 52

Trang 11

xi

Hình 2 - 35: Công cụ tạo WSDL từ POP-C++ 53Hình 2 - 36: File WSDL ñịnh nghĩa phương thức cộng hai số nguyên 55Hình 2 - 37: Giải thuật tạo file parclass từ file WSDL 56

Trang 12

xii

PHẦN MỞ ðẦU

1 Tên ñề tài: Xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới

Chủ nhiệm ñề tài: TS Trần Văn Hoài (thay cho TS Nguyễn Tuấn Anh)

Cơ quan chủ trì: Trường ðại Học Bách Khoa

Thời gian thực hiện: Từ tháng 12/2007 ñến tháng 12/2009

Kinh phí ñược duyệt: 360.000 ngàn ñồng

Kinh phí cấp giai ñoạn 1: 200.000.000ñ theo thông báo số:270/TB-SKHCN ngày

• Hỗ trợ phát triển ứng dụng hiệu năng cao trên môi trường lưới

• Các thành phần phân bố của ứng dụng có khả năng thích nghi và uyển chuyển trong việc lựa chọn ñộng các giao thức truyền thông thích hợp

• Nghiên cứu phát triển giải thuật hỗ trợ liên lạc giữa các components ở các mạng khác nhau ngăn cách bởi firewall

Trang 13

1

CHƯƠNG 1: TỔNG QUAN 1.1 Tổng quan tình hình nghiên cứu thuộc lĩnh vực ñề tài

1.1.1 Ngoài nước:

Tính toán lưới (Grid computing) [8][1] là một hướng nghiên cứu mới cho phép

sử dụng các tài nguyên phân bố ñể giải quyết các bài toán lớn trong khoa học và thực tiễn; cho phép chia sẻ tri thức; và thực hiện các công việc mang tính cộng tác (collaborative works) Thuật ngữ Grid ñầu tiên ñược sử dụng ñể chỉ ñến lưới các máy tính ñơn thuần dùng cho tính toán, gọi là computational Grid - một hệ thống hạ tầng phần mềm và phần cứng cho phép truy xuất rẻ và thuận tiện tới các hệ thống tính toán hiệu năng cao ña dạng ñược phân bố về mặt ñịa lý [8]

Các nghiên cứu hiện tại trên thế giới và ở trong nước mới tập trung vào việc phát triển các phần mềm quản lý hệ thống cho môi trường lưới (Grid middleware) Các chuẩn về dịch vụ lưới như OGSI/OGSA, WSRF lần lượt ra ñời ñánh dấu những cột mốc quan trọng trong việc giải quyết tính tương tác giữa các thực thể phân bố trong môi trường lưới bất ñồng nhất Các chuẩn này ñịnh nghĩa dịch vụ lưới như là một dịch vụ Web có trạng thái (Stateful Web services) với hệ thống trao ñổi thông ñiệp dựa trên XML

Việc khai thác nguồn tài nguyên Grid một cách hiệu quả là một thách thức lớn

do môi trường này hoàn toàn khác với môi trường tính toán truyền thống Sự khác biệt này ñược thể hiện ở sáu ñặc ñiểm sau: (1) Khoảng cách ñịa lý giữa các tài nguyên: tài nguyên không chỉ bó hẹp trong phạm vi một tổ chức mà nằm ở các tổ chức cách xa nhau; (2) Số lượng các tài nguyên rất lớn, có thể ñạt tới hàng triệu nút; (3) Sự hiểu biết cục bộ về môi trường lưới: người dùng không thể nắm ñược toàn bộ môi trường lưới mà chỉ biết ñược một phần nhỏ của nó; (4) Tính bất ñồng nhất cao của môi trường, cả phần cứng lẫn phần mềm; (5) Sự không ổn ñịnh và không an toàn của môi trường do phần nhiều các hệ thống ñược kết nối với nhau qua Internet;

và (6) Mỗi một tài nguyên có thể ñược quản lý bởi một chủ thể khác nhau

Sự khác biệt về bản chất giữa môi trường lưới với môi trường trính toán truyền thống (cụm máy tính) như vừa nêu ở trên dẫn ñến việc khai thác ñồng thời các hệ thống máy tính mạnh ñược phân bố ở các ñịa ñiểm khác nhau trong môi trường lưới

ñể giải quyết các bài toán lớn là một thách thức Các công cụ hỗ trợ lập trình lưới cho tính toán hiệu năng cao (Ví dụ: PVM [30], MPI [26]) hiện mới chỉ dừng lại ở mức hỗ trợ triển khai từ xa vào một hệ thống tính toán cụ thể thông qua cổng lưới (Grid portal) Các ứng dụng lưới có khả năng sử dụng ñồng thời nhiều tài nguyên phân bố ñòi hỏi người lập trình phải có kiến thức về môi trường lưới ñồng thời phải cấu hình môi trường một cách thích hợp ðiều này dẫn ñến việc lập trình trên lưới vẫn còn là xa lạ với người dùng bình thường

Trang 14

sử dụng ñể phát triển ứng dụng lưới Thay vì phát triển các ứng dụng theo dạng hướng tài nguyên (resource-centric) truyền thống (xác ñịnh các tài nguyên cụ thể ñể chạy ứng dụng), công cụ cần phát triển ứng dụng theo dạng hướng dịch vụ (service-centric) (yêu cầu ñộng các dịch vụ với một chất lượng dịch vụ QoS ñịnh sẵn mà không cần quan tâm ñến dịch vụ ñó chạy ở ñâu)

Trên thế giới, việc nghiên cứu và phát triển công cụ lập trình lưới cho tính toán hiệu năng cao ñược phân hóa thành hai hướng ñộc lập:

• Các công cụ hỗ trợ phát triển dịch vụ lưới (Grid services): cho phép xây dựng các dịch vụ lưới dựa trên các chuẩn OGSI/OGSA [33] hoặc WSRF [34] Các dịch vụ lưới này thường tương ñối chậm (do trao ñổi thông ñiệp dùng XML) nên thường chúng chỉ ñóng vai trò như là một “cổng lưới” (Grid portal) cho phép người dùng truy cập vào các ứng dụng tính toán song song hiệu năng cao trong hệ thống cục bộ Do OGSI (2003) và WSRF (2005) là các chuẩn mới nên hiện tại, các công cụ phát triển các dịch vụ theo các chuẩn này chưa nhiều và ña phần vẫn dựa trên các công cụ sẵn có của Web services

• Công cụ phát triển ứng dụng hiệu năng cao: các thành phần phân bố không phải là Grid services mà chúng sử dụng các giao thức, ñịnh dạng dữ liệu ñặc biệt ñể trao ñổi (tốc ñộ cao) Các ứng dụng phát triển bởi các công cụ loại này thường có ưu ñiểm về mặt tốc ñộ nhưng việc tương tác giữa các thành phần phân bố bất ñồng nhất gặp nhiều khó khăn

Hình 1 - 1: Mô hình lập trình lưới (dựa trên [3])

Nhiều công cụ và mô hình lập trình lưới ñã ñược nghiên cứu phát triển và ñược Lee phân loại như trong Hình 1 - 1 Tuy nhiên, việc kết hợp và biến các dịch vụ lưới thành một thành phần của một ứng dụng song song hiệu năng cao hiện vẫn chưa làm ñược

Trang 15

3

1.1.2 Trong nước:

Tính toán lưới còn rất mới mẻ tại Việt Nam và số lượng các nhóm nghiên cứu cũng như các dự án nghiên cứu về công nghệ lưới còn rất ít Mặc dù nhu cầu về tính toán trong khoa học và công nghệ ở Việt Nam cũng như trên thế giới ngày càng gia tăng và khoa học tính toán ñược áp dụng vào nhiều lĩnh vực Về mặt phát triển ứng dụng, người ta mới chỉ dừng lại ở mức sử dụng các công cụ tính toán hiệu năng cao truyền thống như MPI, PVM ñể xây dựng và triển khai ứng dụng trên các hệ thống máy tính ña xử lý hoặc máy tính cụm cục bộ ñược kết nối bởi ñường truyền tốc ñộ cao, ñồng nhất và ổn ñịnh Việc triển khai ứng dụng hiệu năng cao khai thác ñồng thời sức mạnh tính toán giữa các sites khác nhau vẫn còn là câu hỏi ngỏ

Tại Việt Nam, nhiều nơi sở hữu các hệ thống máy tính mạnh nhưng chúng ta chưa thể chia sẻ và phối hợp hữu hiệu các hệ thống máy tính này thành một hệ thống lớn hơn ñể cùng giải quyết các ứng dụng có nhu cầu tính toán thật lớn ðiều này ñược giải thích bởi hai nguyên nhân: (1) chúng ta còn thiếu các công cụ và phần mềm lưới quản lý các tài nguyên phân bố phù hợp với hoàn cảnh Việt Nam; (2) Hiện còn thiếu các công cụ lập trình cấp cao hỗ trợ phát triển và triển khai ứng dụng trên môi trường lưới tính toán

Nhu cầu về tính toán trong khoa học và công nghệ ở Việt Nam ñược thể hiện rõ trong các hội thảo về “Tính toán hiệu năng và Tính toán lưới” tổ chức tại Hà Nội và

TP Hồ Chí Minh vào tháng 1 năm 2004, hội thảo về “Xây dựng và phát triển khoa học và công nghệ tính toán tại TP Hồ Chí Minh giai ñoạn 2006-2010” tổ chức tại

TP Hồ Chí Minh vào tháng 1 năm 2006, hội thảo quốc tế “Tính toán nâng cao và ứng dụng” (ACOMP2007) tổ chức tại ðH Bách Khoa TPHCM vào tháng 3 năm

2007, hội nghị quốc tế lần thứ 4 về tính toán khoa học hiệu năng cao (HPSC2009),

tổ chức tại Hà Nội vào tháng 3 năm 2009, hội thảo quốc tế “PRAGMA 17 and International Workshop on GEO Information” tổ chức tại Hà Nội vào tháng 10 năm

2009 Các chuyên gia và các nhà nghiên cứu trong nhiều lĩnh vực khác nhau như sinh tin học, vật lý, hóa học, viễn thám tham gia các hội thảo này ñều có chung nhận ñịnh là tính toán hiệu năng cao và tính toán lưới là cần thiết vì ngày càng nhiều các bài toán trong các ngành khoa học khác nhau có ñộ phức tạp cao cần phải ñược giải quyết trên các hệ thống máy tính mạnh hay trên lưới tính toán Tại các nước phát triển như Mỹ, Nhật, Anh, ðức họ có nhiều trung tâm máy tính mạnh nhưng Việt Nam không thể ñầu tư xây dựng nhiều trung tâm tính toán như vậy do ñiều kiện kinh tế Trong khi ñó, hệ thống mạng máy tính tại Việt Nam ñang phát triển mạnh và ñã có khả năng liên kết các hệ thống máy tính trong nước với nhau Việc khai thác sức mạnh tính toán của môi trường lưới kết nối các hệ thống máy tính mạnh này thông qua các công cụ hỗ trợ lập trình cấp cao là khả thi và có ý nghĩa thiết thực

Trang 16

4

Khai thác hiệu quả các hệ thống máy tính mạnh và liên kết chúng ñể cùng giải quyết một bài toán lớn là một trong các mục tiêu chính của tính toán lưới Vấn ñề này chưa ñược giải quyết một cách có hệ thống tại Việt Nam vì các nhóm nghiên cứu về công nghệ lưới còn rất ít và lĩnh vực này còn mới mẻ Theo sự hiểu biết của chúng tôi thì ñã có một số nhóm bắt ñầu nghiên cứu về công nghệ lưới tại: ðại học Bách Khoa – ðHQG TP.HCM, ðại học Khoa học Tự nhiên – ðHQG TP.HCM, ðại học Bách Khoa Hà Nội, Phân viện Công nghệ Thông tin TP.HCM, Viện Toán học – Viện Khoa học và Công nghệ Việt Nam Trong những năm gần ñây có một số ñề tài làm về tính toán lưới Tuy nhiên các ñề tài này tập trung phát triển ứng dụng là chính, sử dựng các cổng truy cập lưới (Grid Portal) mà chưa quan tâm ñến việc phát triển, xây dựng hạ tầng lưới tính toán chuẩn cũng như phát triển mô hình và công cụ lập trình lưới Các nhóm nghiên cứu thiên về ứng dụng ñã phát triển khá mạnh ở Việt Nam (chẳng hạn như nhóm ở Phân viện Công nghệ Thông tin TP.HCM) Tuy nhiên, nếu có ñược một công cụ lập trình tốt thì các nghiên cứu của những nhóm ứng dụng sẽ phát triển xa hơn nữa Công cụ ñược các nhóm sử dụng là Globus Toolkit (GT) [10] và phiên bản MPI cho GT (MPICH-G) [27] Mô hình lập trình này còn một số ñiểm hạn chế: không thể triển khai ứng dụng ñồng thời trên nhiều nút lưới khác nhau, không tối ưu và giảm hiệu quả khi tốc ñộ mạng và tốc ñộ tài nguyên tính toán chậm và bất ñồng nhất, không hỗ trợ sử dụng ñộng các tài nguyên tính toán, v.v

Riêng tại khoa KH&KTMT ðH Bách Khoa TPHCM, chúng tôi cũng ñã có những nghiên cứu bước ñầu về công cụ lập trình trên lưới tính toán như POP-C++ [15][18][28] POP-C++ mở rộng ngôn ngữ C++ cho phép các ñối tượng (objects)

tự ñộng tìm kiếm các tài nguyên tính toán thích hợp Các ngữ nghĩa của việc kích hoạt phương thức (method invocation semantics) cũng dược mở rộng cho phép người dùng ñịnh nghĩa và kiểm soát các mức ñộ song song khác nhau của ñối tượng phân bố POP-C++ ñã ñược Viện Nghiên Cứu Tuyết Liên Bang Thụy Sĩ sử dụng ñể phát triển ứng dụng tính toán lưới cho bài toán mô hình phát triển tuyết tại vùng núi Alpine của Thụy Sĩ [11] Ngoài POP-C++, một loạt các công cụ hỗ trợ lập trình song song phân bố cũng ñã ñược xây dựng và triển khai thử nghiệm trên các hệ thống máy tính cụm như DPPT (Distributed and Parallel Programming Tool) [13], VEPAD (Virtual Environment for Parallel And Distributed programs developing) [23], Grid-enabled Meta-Heuristics Framework [5]

Việc nghiên cứu công cụ hỗ trợ phát triển ứng dụng lưới là cần thiết, nhất là khi các dự án về hạ tầng lưới ñang ñược hình thành và ñi vào hoạt ñộng như EDAGrid [16] - Campus Grid kết nối các máy tính cụm và PCs tại ðH Bách Khoa TPHCM (dự án Vườn ươm công nghệ 2005-2008), VN-Grid Core - Lưới tính toán kết nối các hệ thống máy tính mạnh và các máy tính ñơn lẻ thuộc ðH Quốc Gia TPHCM (ñề tài trọng ñiểm ðH Quốc Gia TPHCM 2007-2010) Một hạ tầng lưới chỉ có thể

Trang 17

5

phát huy ñược hiệu quả của mình khi việc phát triển và triển khai ứng dụng dễ dàng

và hiệu quả Công cụ lập trình chính là chiếc cầu nối quan trọng giữa hạ tầng lưới

và các ứng dụng tính toán hiệu năng cao

Nói tóm lại, còn rất nhiều thách thức trong nghiên cứu tính toán lưới ở Việt Nam, cả về hạ tầng, công cụ phát triển lẫn ứng dụng Việc xây dựng công cụ hỗ trợ lập trình hiệu năng cao trên lưới sẽ thúc ñẩy khai thác sức mạnh tính toán lưới cho các bài toán lớn, tạo ñà cho các ngành có nhu cầu tính toán cao phát triển

1.2 Tính cấp thiết của ñề tài

Nhu cầu về tài nguyên tính toán trong việc giải quyết các bài toán lớn trong khoa học, công nghệ, kinh tế xã hội là có thực Việc xây dựng các hệ máy tính song song cho từng ñơn vị này ñòi hỏi các nguồn ñầu tư rất lớn và khó khả thi trong ñiều kiện hiện tại của Việt Nam Một hướng giải quyết khả thi và ít tốn kém chính là tập hợp các tài nguyên tính toán hiện có (máy tính cụm, các PCs trong các phòng thí nghiệm, trạm làm việc, v.v.) ở các cơ quan, ñơn vị khác nhau thành một hệ thống máy tính mạnh ñủ ñể ñáp ứng các nhu cầu tính toán cho các bài toán trên

Với sự phát triển nhanh chóng của mạng viễn thông, hạ tầng vật lý cho một môi trường chia sẻ tài nguyên diện rộng là hoàn toàn khả thi tại Việt Nam Nhiều dự án

ñã và ñang ra ñời với mục tiêu xây dựng các phần mềm hệ thống quản lý môi trường lưới như EDAGrid- xây dựng Campus Grid kết nối tài nguyên tính toán của (toàn bộ) ðH Bách Khoa TPHCM (ñề tài Vườn ươm Công nghệ 2005-2008 do TS Trần Văn Hoài chủ nhiệm), VN-Grid Core-xây dựng lưới tính toán chia sẻ tài nguyên các trường thành viên ðH Quốc Gia TPHCM hướng tới hình thành lưới tính toán Quốc gia (ñề tài trọng ñiểm ðH Quốc Gia TPHCM 2007-2010 do TS Nguyễn Thanh Sơn làm chủ nhiệm) Các dự án này tập trung vào xây dựng phần mềm hệ thống quản lý các nút lưới cũng như các dịch vụ gắn kết các nút lưới thành các máy tính ảo mạnh

Tuy vậy, việc lập trình và triển khai ứng dụng hiệu năng cao trên các hạ tầng lưới trên hiện vẫn gặp khó khăn do thiếu các công cụ hỗ trợ Hơn nữa, ñộ phức tạp cao của môi trường này ñòi hỏi người dùng phải có những kiến thức nhất ñịnh về hệ thống lưới Trong ñề tài VN-Grid ñang ñược phát triển, ngoài việc xây dựng hạ tầng, nhóm nghiên cứu này cũng hướng ñến thử nghiệm sử dụng khả năng của lưới tính toán vào bài toán CFD trong mô phỏng hàng không Tuy nhiên, một khó khăn chính của người làm trong nhóm hàng không là họ có ít kiến thức về lập trình trên cluster, lưới Vì thế hiện nay khả năng sử dụng hiệu quả tài nguyên tính toán lưới là còn khá hạn chế

Mục tiêu của ñề tài này chính là xây dựng môi trường lập trình lưới hỗ trợ phát triển ứng dụng hiệu năng cao hướng ñến chất lượng dịch vụ Cùng với các dự án hạ

Trang 18

1.3 Ý nghĩa và tính mới về khoa học và thực tiễn

ðề tài xây dựng công cụ lập trình lưới giúp dễ dàng triển khai ứng dụng song song theo mô hình ñối tượng song song ñộng hướng ñến chất lượng dịch vụ ðây chính là một ñiểm mới của công cụ ñược xây dựng so với các công cụ lập trình lưới hiện có Bằng việc sử dụng nền ngôn ngữ hướng ñối tượng C++, mở rộng ngôn ngữ này cho phép thêm vào chương trình các ñối tượng song song, ñề tài mở ra một phương pháp phát triển ứng dụng hiệu năng cao thích hợp với môi trường tính toán lưới

Một ñiểm mới khác của ñề tài chính là khả năng thích nghi với các nền tảng phần cứng và hạ tầng mạng hiện có của Việt Nam bằng cách lựa chọn ñộng protocols liên lạc và ñịnh dạng thông ñiệp trao ñổi giữa các ñối tượng song song phân bố trên môi trường lưới, giúp nâng cao hiệu năng của ứng dụng

Trong khi một loạt các dự án xây dựng hạ tầng lưới tính toán ñã và ñang ñược triển khai xây dựng tại TP Hồ Chí Minh như EDAGrid, VN-Grid Core, việc hỗ trợ các công cụ lập trình là hết sức cần thiết và mang ý nghĩa thực tiễn nhằm ñẩy nhanh

và chia sẻ hiệu quả nguồn tài nguyên tính toán sẵn có cho các tính toán khoa học, kỹ thuật, tiết kiệm ñầu tư hạ tầng tính toán mới

Trang 19

7

CHƯƠNG 2: NỘI DUNG NGHIÊN CỨU

2.1 Phân tích yêu cầu bài toán

Sau khi tìm hiểu hệ thống POP-C++ phiên bản 1.1.1, chúng tôi ñã khái quát cách tiếp cận của hệ thống như trong mô hình sau (Hình 2 - 1)

Hình 2 - 1: Cách tiếp cần hệ thống POP-C++ phiên bản 1.1.1 trong môi trường có

firewall

Khi người dùng yêu cầu tạo một ñối tượng mới bằng ngôn ngữ POP-C++, thông qua hạ tầng lưới, ñối tượng này ñược cấp phát chạy trên một tài nguyên nào ñó của lưới thỏa mãn yêu cầu người dùng Khi ñó ñối với người dùng, họ không cần quan tâm ñối tượng thực sự mà họ yêu cầu ñang chạy trên máy nào hay trên tài nguyên nào của lưới Và kể từ khi yêu cầu POP-C++ tạo ñối tượng song song, người dùng

có thể tương tác với nó như thể ñối tượng này ñang chạy trên máy cục bộ vậy Khi người dùng triệu gọi một phương thức nào ñó của ñối tượng ở xa, thông qua môi trường lưới, họ có thể tương tác trực tiếp với ñối tượng ñó thông qua cách thức ñược quy ñịnh bởi POP-C++ Trong phiên bản 1.1.1, các ñối tượng giao tiếp với nhau thông qua kết nối socket, vì vậy các giao tiếp giữa các ñối tượng này phần lớn

bị firewall chặn lại, chính vì vậy mà ở phiên bản hiện tại, các ñối tượng POP-C++ không thể hoạt ñộng khi chúng bị ngăn cách bởi firewall hay các ñối tượng POP-C++ không thể giao tiếp trong môi trường lưới có firewall

Cũng giống như vậy, khi các ñối tượng song song của POP-C++ bị ngăn cách bởi mạng ảo, chúng không thể thấy ñược ñịa chỉ IP của nhau Thay vào ñó chúng giao tiếp với nhau thông qua proxy Tuy nhiên các proxy trong thực tế thường không cho phép việc kết nối vào nó thông qua một cổng bất kỳ ñể ñảm bảo an ninh Chính vì vậy mà kết nối socket từ một ñối tượng song song vào proxy server thường không ñược chấp nhận vì một kết nối socket yêu cầu mở một cổng bất kỳ ñể giao tiếp và truyền nhận dữ liệu

Với phân tích ñó, nhóm chúng tôi ñã ñề ra giải pháp ñể giải quyết vấn ñề trên – dùng giao thức HTTP ñể gửi nhận dữ liệu giữa các ñối tượng trong lưới khi môi trường lưới có firewall hay khi các ñối tượng bị ngăn cách với nhau bởi mạng ảo Cách tiếp cận mà nhóm chúng tôi ñề xuất có thể khái quát như trong mô hình dưới ñây (Hình 2 - 2)

Trang 20

8

Hình 2 - 2: Mô hình ñề xuất hệ thống POP-C++ phiên bản mới trong môi trường có firewall

Với mô hình ở Hình 2 - 2 trong môi trường có firewall, sau khi ñược phân bố trên tài nguyên lưới, các ñối tượng giao tiếp với nhau thông qua giao thức HTTP, vì vậy mà dữ liệu gửi nhận giữa chúng không bị chặn lại bởi firewall vì hầu hết firewall không chặn giao thức HTTP

Giống như vậy trong môi trường có mạng ảo, các ñối tượng song song sau khi ñược phân bố trên tài nguyên lưới, chúng giao tiếp với nhau thông qua proxy server

Vì hầu hết các proxy hiện tại không chặn giao thức HTTP, do ñó mà các kết nối từ một ñối tượng ñến proxy ñều ñược proxy chấp nhận và chuyển dữ liệu nó nhận ñược cho ñối tượng còn lại Bằng cách này các ñối tượng trong môi trường lưới bị ngăn cách bởi mạng ảo vẫn có thể kết nối ñược với nhau

ðể hiện thực mô hình hệ thống POP-C++ sử dụng giao thức HTTP, trước hết chúng tôi ñã tìm hiểu các công nghệ có liên quan: tìm hiểu chuẩn WSRF trong phần 2.2.1, tìm hiểu giao thức SOAP trong phần 2.2.2, tìm hiểu các thư viện xử lý XML trong phần 2.2.3 Sau ñó chúng tôi tìm hiểu sâu hơn về hệ thống POP-C++: các thư viện hệ thống (phần 2.2.4), và cơ chế hoạt ñộng chi tiết của hệ thống (phần 2.2.5) Sau khi ñã có kiến thức nền tảng cần thiết, chúng tôi bắt tay vào việc thiết kế chi tiết hệ thống như sẽ ñược trình bày trong phần 2.3

2.2 Phân tích và tìm hiểu các công nghệ/hệ thống liên quan

2.2.1 Tìm hiểu chuẩn WSRF

Như ñã trình bày trong phần 2.1, ñể khắc phục nhược ñiểm của hệ thống C++ phiên bản 1.1.1, nhóm chúng tôi ñề xuất xây dựng giao thức HTTP ñể thực hiện việc giao tiếp dữ liệu giữa các ñối tượng trong môi trường lưới Hiện tại Grid

POP-có hỗ trợ chuẩn WSRF hoạt ñộng dựa trên giao thức HTTP và ñang hoạt ñộng rất tốt Với sự kết hợp giữa WSRF và HTTP, ta có thể xây dựng hệ thống tận dụng ñược những ưu ñiểm của HTTP và WSRF như không phụ thuộc vào ngôn ngữ lập trình, không phụ thuộc vào platform, không bị hạn chế bởi firewall

Hiện tại Web Service ñang nổi lên như là một kiến trúc dùng ñể xây dựng các ứng dụng phân bố Web Service dựa trên mô hình kiến trúc hướng dịch vụ (SOA) với client là người yêu cầu dịch vụ, còn server là người cung cấp dịch vụ Cách tiếp

Trang 21

9

cận của Web Service khác với các cách tiếp cận truyền thống trong Java RMI, CORBA, DCOM bằng cách dựa trên các chuẩn mở là XML và HTTP – các chuẩn ñang rất phổ biến hiện nay và ñang ñược hỗ trợ rộng rãi

Với cách tiếp cận ñó, Web Service có một ưu ñiểm hơn hẳn các cách tiếp cận khác là client và server có thể giao tiếp với nhau thông qua giao thức HTTP, vì vậy việc giao tiếp này có thể thực hiện ñược trong môi trường mạng ảo hay trong môi trường giữa các mạng khác nhau có sử dụng firewall

Hình 2 - 3: Một lời gọi Web Service cơ bản [2]

Dựa vào Hình 2 - 3, ta thấy khi client muốn giao tiếp với server, nó gọi client stub ñể chuyển yêu cầu sang bên server Bên server có server stub có nhiệm vụ lắng nghe các request từ client gửi ñến, và gửi các request ñó cho server thực hiện Sau khi thực hiện xong request của client, server gửi kết quả cho client thông qua server stub Bên client, sau khi gửi request cho server thực hiện, client stub lắng nghe response gửi trả về từ server stub và chuyển các response ñó cho client Khi ñó kết thúc quá trình gọi một service giữa client và server

Client stub và server stub giao tiếp với nhau thông qua môi trường internet với giao thức bất kỳ, miễn sao request từ client có thể truyền ñến ñược cho server theo ñúng ñịnh dạng mà Web Service quy ñịnh Tuy nhiên, hiện nay giao thức chủ yếu ñược dùng ñể truyền nhận giữa client và server là HTTP Với cơ chế ñó thì client và server có thể giao tiếp ñược với nhau mà không bị firewall ngăn cản ðây cũng chính là ñiểm khác biệt chính của Web Services với Java RMI, CORBA, DCOM vì các kỹ thuật còn lại sử dụng các giao thức giao tiếp tối ưu, hoặc là ñặc trưng của ngôn ngữ ñó, hoặc là chúng sử dụng thêm một số luật do chúng quy ñịnh ñể truyền nhận dữ liệu ñược nhanh chóng Vì vậy mà các giao thức này thường không ñi qua ñược firewall vì cổng giao tiếp của chúng phụ thuộc vào ứng dụng

Web Service là dịch vụ không có trạng thái (stateless), nó không có khả năng lưu giữ thông tin hoặc trạng thái của các lần gọi trước Vì vậy khi client gửi một request ñến cho server yêu cầu server thực hiện một hành ñộng gì ñó, sau khi kết nối này chấm dứt thì trạng thái của server sau khi thực hiện hành ñộng ñó không ñược lưu lại Do ñó, lần sau nếu client lại yêu cầu server thực hiện hành ñộng ñã gọi lần trước thì server lại phục vụ yêu cầu ñó như lúc ñầu

Trang 22

10

Hình 2 - 4: Lời gọi Web Service không có trạng thái [2]

Như ở Hình 2 - 4, khi client gọi hàm cộng thêm 5 thì server trả về kết quả là 5 Khi ñó trạng thái bên server không lưu lại giá trị 5 khi kết nối ñến client chấm dứt Tiếp theo client yêu cầu server cộng thêm 6, do server không lưu trạng thái của nó lúc trước nên nó phục vụ yêu cầu này như cách nó ñã phục vụ yêu cầu lần trước Tức kết quả trả về của nó là 6 Tương tự khi client yêu cầu server cộng thêm 7, kết quả server trả về là 7

Với tính chất không có trạng thái, Web Service có thể cung cấp một số dịch vụ không yêu cầu phải lưu giữ thông tin trạng thái của các lần gọi trước Ví dụ như dịch vụ dự báo thời tiết, khi người dùng hỏi tình trạng thời tiết ở một nơi nào ñó vào một thời ñiểm trong tương lai, dịch vụ Web không cần phải biết thông tin trạng thái của các lần gọi trước ñó, nó cũng không cần phải quan tâm lúc trước người này có gửi các yêu cầu tương tự như vậy hay không Tuy nhiên trong môi trường tính toán lưới, việc sử dụng các thông tin trạng thái là thường xuyên Vì vậy cần phải mở rộng Web Service ñể nó trở thành dịch vụ có trạng thái

Trang 23

11

Hình 2 - 5: Lời gọi Web Service có trạng thái [2]

Hình 2 - 5 minh họa một dịch vụ có trạng thái, lúc ñầu server có trạng thái là 0, khi client yêu cầu dịch vụ cộng thêm 5, server trả về kết quả là 5 và nó lưu trạng thái của nó hiện tại là 5 Sau ñó client yêu cầu dịch vụ cộng thêm 6, lúc này server

sẽ lấy thông tin trạng thái hiện tại của nó là 5 cộng thêm với giá trị ñược yêu cầu là

6, kết quả mà server trả về là 11, và trạng thái hiện tại của server là 11 Tương tự, khi client yêu cầu dịch vụ cộng thêm 7, server trả về kết quả là 18 và lưu trạng thái hiện tại của nó là 18

Với mô hình gọi dịch vụ như thế này, ta có dịch vụ Grid Service – dịch vụ lưới Như vậy ta có thể hiểu Grid Service là dạng mở rộng của Web Service, khi nó có kết hợp các thông tin trạng thái Nói cách khác, Grid Service là Web Service có trạng thái hay Grid Service là Web Service kết hợp với các tài nguyên ñể lưu giữ thông tin trạng thái

Trang 24

12

Hình 2 - 6: Mối quan hệ giữa OGSA, GT4, WSRF, và Web [2]

Như vậy Grid Service là dạng mở rộng của Web Service, ñể viết nên một Grid Service, người ta cũng phải tuân theo các chuẩn của Web Service, tuy nhiên do Grid Service có thêm thông tin trạng thái nên người ta phải mở rộng các chuẩn của Web Service hiện có, tạo thành chuẩn mới – Web Service Resource Framework (WSRF) ðây là chuẩn mà người dùng phải tuân theo khi muốn tạo một Grid Service

WSRF là một khung mẫu ñịnh nghĩa các ñặc tả mà người dùng phải tuân theo ñể tạo thành công một Grid Service Nó ñưa ra thêm mốt số khái niệm mới ñể diễn tả trạng thái của một service như khái niệm tài nguyên WS-Resource dùng ñể mô hình hóa, quản lý và lưu giữ các thông tin trạng thái Khi muốn biết trạng thái của một service nào ñó, ta chỉ cần xét xem tài nguyên của nó nằm ở ñâu, lấy các thông tin trạng thái trên tài nguyên ñó sẽ quyết ñịnh ñược thông tin của service Một tài nguyên có trạng thái kết hợp với Web Service ñược xem như là WS-Resource (Hình

2 - 7)

Trang 25

13

Hình 2 - 7: WS-Resource [2]

Các ñặc tả mà WSRF ñưa ra bao gồm:

• WS-ResourceLifetime: cung cấp một số cơ chế ñơn giản giúp quản lý thời

gian sống của các tài nguyên lưu giữ thông tin trạng thái ðặc tả này cung cấp cơ chế cho phép người dùng gửi các request yêu cầu Grid Service hủy một tài nguyên lưu giữ trạng thái ngay lập tức hay sau một khoảng thời gian nào ñó Nó cũng cung cấp một interface cho phép WS-Resource tự ñộng hủy sau một khoảng thời gian xác ñịnh trước

• WS-ResourceProperties: ðặc tả này dùng ñể miêu tả các thuộc tính của

một tài nguyên lưu giữ thông tin trạng thái Việc khai báo các thuộc tính của một WS-Resource biểu diễn một phép chiếu hay một cái nhìn về trạng thái của WS-Resource ðặc tả này cũng ñược dùng ñể xác ñịnh các thuộc tính của tài nguyên ñược ñịnh nghĩa như thế nào và chúng ñược truy xuất ra sao Một tài nguyên có thể ñược cấu thành từ một hay nhiều thuộc tính Ví dụ trong Hình 2 - 7, mỗi tài nguyên có 3 thuộc tính: Filename, Size, và Descriptors WS-ResourceProperties ñịnh nghĩa một tập các phương thức trao ñổi thông ñiệp chuẩn cho phép người dùng có thể gửi yêu cầu ñể lấy giá trị các thuộc tính hay cập nhật giá trị các thuộc tính ñó

• WS-Notification: Mặc dù không phải là ñặc tả của WSRF, WS-Notification

là một tập các ñặc tả gần với nó ðặc tả này cho phép một Grid Service ñược cấu hình giống như một người gửi thông báo, và một client ñược cấu hình giống như là một người nhận thông báo ðiều này có nghĩa là khi có một thay ñổi xảy ra trong Grid Service (hay chính xác hơn là một trong các WS-

Trang 26

14

Resource của nó), thay ñổi ñó sẽ ñược thông báo ñến tất cả các client có ñăng

ký dịch vụ này

• WS-BaseFaults: ðặc tả này ñịnh nghĩa một XML Schema cho các lỗi cơ

bản cùng với các luật dùng ñể xác ñịnh những loại lỗi này Mục ñích của ñặc

tả này là ñể chuẩn hóa cách dùng các thuật ngữ, khái niệm, loại XML, và WSDL của một loại lỗi cơ bản của Grid Service Nhìn chung việc ñặc tả các thông ñiệp có mang thông tin lỗi sẽ nâng cao khả năng hỗ trợ xem các lỗi ñó

là gì và cách quản lý nó ra sao Với ñặc tả này, người dùng cũng dễ hiểu lỗi hơn nếu các interface thống nhất với nhau về thông tin lỗi

• WS-ServiceGroup: ðặc tả này cho phép nhóm các Grid Service hay các

WS-Resource lại với nhau Nó cho phép thực hiện các tác vụ như thêm dịch

vụ mới vào nhóm, hay loại bỏ ñi một dịch vụ nào ñó ra khỏi nhóm, hoặc tìm một dịch vụ nào ñó trong nhóm thỏa mãn một ñiều kiện nào ñó Mặc dù ñặc

tả này cung cấp một số chức năng rất hạn chế, nó là nền tảng ñể xây dựng nên các dịch vụ khám phá mạnh mẽ (như dịch vụ IndexService trong GT4), những dịch vụ khám phá này cho phép chúng ta nhóm các dịch vụ khác nhau lại với nhau và truy xuất chúng thông qua một ñiểm nhập duy nhất

• WS-RenewableReferences: Tại thời ñiểm hiện tại, chưa có phiên bản nào

của WSRF hiện thực ñặc tả này Tuy nhiên ñặc tả này sẽ chuẩn hóa cơ chế cho phép Grid Service tạo mới một endpoint reference khi tham chiếu ñến tài nguyên hiện tại trở nên không hợp lý

2.2.2 Tìm hiểu giao thức SOAP của Web Services

Grid Service là dạng mở rộng của Web Service, do ñó ñể hiểu sâu hơn về Grid Service, chúng tôi cũng ñã tìm hiểu Web Service và cơ chế hoạt ñộng của nó mà quan trọng nhất là giao thức SOAP của Web Service

Hình 2 - 8: Gửi nhận thông ñiệp thông qua giao thức SOAP

Như ở Hình 2 - 8, ta thấy các ñối tượng trong lưới giao tiếp với nhau thông qua giao thức HTTP Và cũng như ở phần trên ta thấy nếu có sự kết hợp tốt giữa Web Service và giao thức HTTP, ta sẽ xây dựng ñược một hệ thống không phụ thuộc vào platform và ngôn ngữ lập trình, cũng như không bị hạn chế bởi firewall Và giao thức SOAP ñược nhóm chúng tôi tìm hiểu cũng không nằm ngoài mục ñích kết hợp

Trang 27

ðể gửi nhận thông ñiệp giữa client stub và server stub trong Web Service, người

ta dùng giao thức SOAP (Hình 2 - 9)

Hình 2 - 9: Trao ñổi thông ñiệp dùng giao thức SOAP [7]

Như vậy thông tin request của client sẽ ñược chuyển sang ñịnh dạng của giao thức SOAP trước khi nó ñược truyền ñi qua bên server, bên server sẽ xử lý thông ñiệp ở ñịnh dạng của giao thức SOAP và lấy ñược request của client, sau ñó nó xử

lý và truyền ngược trở lại cho client cũng theo giao thức SOAP

Trang 28

Hình 2 - 10: Cấu trúc của một SOAP message [12]

, ta thấy một SOAP message bao gồm các ph

SOAP message ñược bọc trong cặp tag SOAP-ENV:Envelope

dùng nhiều namespace khác nhau như xmlns:SOAP(SOAP Envelope), xmlns:xsi (XML Schema for Instance) và

(XML Schema Definition) Mỗi namespace có m

ữ liệu cơ bản ñược ñịnh nghĩa trong thuencodingStyle

SOAP message có hai phần chính là header (có thể

a nội dung của thông ñiệp cần gửi)

ñược dùng ñể chứa các dữ liệu phục vụ

c, giao tác và tính phí

là phần chính của một SOAP message Nó ñư

ề request hoặc response

có chứa một tag ñơn dùng ñể chứa tên phương th

n vào và một URI (Uniform Resource Identifier) c

cũng có thể ñược dùng trong SOAP body

u các thư viện xử lý XML hiện có

ñã trình bày, dữ liệu truyền nhận thông qua Web Service ph

ủa SOAP, tức là nó cũng phải tuân theo ñ

ng chúng ta cần xây dựng phải có khả năng h

i namespace có một ý nghĩa

ĩa trong thuộc tính không xuất hiện) và

ụ cho các quá trình Nó ñược dùng ñể chứa

a tên phương thức gọi, các (Uniform Resource Identifier) của ñịa chỉ

ñể giải thích các lỗi

n thông qua Web Service phải

i tuân theo ñịnh dạng của ngôn

năng hỗ trợ việc truyền

Trang 29

17

nhận dữ liệu thông qua giao thức SOAP, do ñó dữ liệu truyền trên môi trường lưới cũng phải theo dịnh dạng của giao thức SOAP ñể sử dụng ñược các dịch vụ Grid Service mà hệ thống có hỗ trợ

Tuy nhiên việc xử lý trực tiếp dữ liệu trên các ñối tượng dữ liệu XML là công việc ñòi hỏi nhiều công sức, và hiện tại có nhiều thư việc ñược phát triển ñể hỗ trợ việc xử lý ñối tượng dữ liệu này ðể tận dụng những ưu ñiểm của các thư viện này trong việc xử lý dữ liệu XML, nhóm chúng tôi quyết ñịnh tìm hiểu chúng ñể giảm bớt công sức khi hiện thực

Hiện tại, có rất nhiều thư viện có khả năng hỗ trợ việc xử lý cấu trúc XML, và chúng có khả năng hỗ trợ trên nhiều ngôn ngữ khác nhau Thường thì các thư viện này không xử lý trực tiếp trên file XML, thay vào ñó, các thư viện thường xử lý trên các mô hình ñược xây dựng sẵn, mà mô hình này cho phép việc thêm bớt các phần

tử hay thay ñổi cấu trúc file XML là ñơn giản nhất DOM [24] và SAX [32] là hai

mô hình như thế Hai mô hình sẽ ñược trình bày trong phần 2.2.3.1 (DOM) và 2.2.3.2 (SAX)

2.2.3.1 Document Object Model (DOM)

DOM là mô hình ñối tượng tài liệu ñộc lập với platform và ñộc lập với ngôn ngữ lập trình Nó ñịnh nghĩa một cách thức chuẩn ñể truy cập và xử lý các tài liệu XML DOM biểu diễn một tài liệu XML như là một cấu trúc cây, với các node trên cây biểu diễn cho các phần tử, thuộc tính hoặc text

Hình 2 - 11: Cấu trúc cây của DOM [38]

Với cách biểu diễn trên, DOM giúp ta giảm công sức khi ta thêm, bớt một nút của cây hay hay ñổi cấu trúc của của toàn bộ cây

Sau khi ñã xử lý xong các tác vụ trên cây, ta có thể chuyển cây DOM này ngược trở lại sang dạng file XML

Trang 30

18

2.2.3.2 Simple API for XML (SAX)

Tương tự như DOM, SAX là một mô hình ñộc lập với platform và ngôn ngữ lập trình SAX ñịnh nghĩa một cách thức cho phép việc xử lý các tài liệu XML một cách hiệu quả

Không giống như DOM, khi muốn xử lý một file XML nào ñó, DOM phải load toàn bộ cấu trúc của file ñó vào bộ nhớ chính trước khi tiến hành xử lý ðây là một công việc tốn nhiều công sức và chiếm dụng tài nguyên bộ nhớ SAX cung cấp một

cơ chế ngược lại với DOM - cơ chế streaming và ñiều khiển sự kiện (event-driven) Với cơ chế này, SAX xử lý file XML theo dòng, và khi nó bắt gặp một sự kiện nào ñó (text node, element node, processing instruction, comment) thì nó sẽ tiến hành xử lý sự kiện ñó, sau ñó SAX tiếp tục xử lý sự kiện tiếp theo, và cứ thế cho ñến khi toàn bộ file XML ñược xử lý xong

2.2.3.3 So sánh hai mô hình DOM và SAX

Vì SAX xử lý file XML theo dòng (stream), khi xử lý ñến node nào thì nó mới load node ñó lên bộ nhớ chính Vì vậy tại mỗi thời ñiểm dung lượng bộ nhớ nó chiếm dụng là không nhiều Dung lượng bộ nhớ nhiều nhất mà SAX chiếm dụng phụ thuộc vào ñộ sâu của file XML và khối lượng dữ liệu trên một node Về mặt tổng thể thì số lượng này không ñáng kể so với toàn bộ cấu trúc của cây

Ngược lại, mỗi khi DOM muốn xử lý một file XML nào ñó, nó phải load cả file vào bộ nhớ, sau ñó mới tiến hành xử lý Vì vậy mà dung lượng bộ nhớ mà DOM chiếm dụng là rất lớn, lớn hơn nhiều so với SAX

Với tính chất ñiều khiển sự kiện, việc xử lý tài liệu của SAX nhanh hơn của DOM, vì tại mỗi thời ñiểm, dung lượng bộ nhớ mà DOM chiếm dụng luôn nhiều hơn SAX, mà việc di chuyển ñến một phần tử nào ñó ñể xử lý tốn khá nhiều thời gian nếu file XML lớn

Do tính chất của DOM là load toàn bộ file XML vào bộ nhớ Vì vậy ñối với các file XML lớn, có khả năng bộ nhớ không ñủ dung lượng ñể chứa cả file XML Mô hình DOM không giải quyết ñược các vấn ñề này

Vì SAX xử lý dữ liệu theo dòng (stream) nên SAX chỉ có thể xử lý tài liệu một cách tuần tự Khi ñã xử lý qua một phần tử nào ñó rồi thì SAX không có khả năng quay lại các phần tử trước ñể xử lý lại Vì vậy mà SAX gặp phải vấn ñề nếu file XML có yêu cầu kiểm tra tính ñúng ñắn của nó [31] Ngược lại, do DOM load cả file XML vào bộ nhớ nên nó có khả năng xử lý các node một cách tùy ý, vì vậy vấn

ñề kiểm tra tính ñúng ñắn của file XML sẽ ñược loại bỏ

Và với tính chất chỉ truy xuất theo dòng, SAX không trực tiếp giải quyết ñược một số yêu cầu phải load toàn bộ file vào bộ nhớ trước khi xử lý [31]

Trang 31

Bảng 2 - 1: So sánh kích thước thông ñiệp XDR và SOAP

Số phần tử

(INTEGER)

Kích thước thông ñiệp XDR (bytes)

Kích thước thông ñiệp SOAP (bytes)

Với các phân tích ở trên, chúng tôi nhận thấy hệ thống mà chúng tôi ñề xuất xử

lý dữ liệu XML không theo một cách tuần tự, và kích thước của một file XML mà

hệ thống xử lý là không lớn Chính vì vậy mà với những ưu nhược ñiểm của từng

mô hình mà ta ñã phân tích, chúng tôi ñề xuất hệ thống chúng tôi sẽ xây dựng sử dụng mô hình DOM

2.2.3.4 Xerces-C++

Sau khi ñã giới hạn mô hình mà hệ thống sẽ sử dụng, chúng tôi tiếp tục tìm hiểu một thư viện cụ thể có hỗ trợ xử lý cấu trúc XML và sử dụng mô hình DOM Do giới hạn ngôn ngữ ñề tài ñang viết là C++, do ñó thư viện mà chúng tôi tìm hiểu cũng phải có hỗ trợ ngôn ngữ C++ Và Xerces-C++ [37] thỏa mãn cả hai ñiều kiện

ñó Do ñó hệ thống chúng tôi ñề nghị sẽ sử dụng thư viện này ñể thực hiện các thao tác lên cấu trúc XML

Xerces-C++ là một thư viện ñược viết bằng ngôn ngữ C++, cho phép phân tích

và thao tác trên các file XML Thư viện này hỗ trợ việc ñọc và tạo ra các dữ liệu XML dễ dàng hơn Ngoài ra nó còn cung cấp cơ chế ñể phân tích, tạo mới, thao tác

và kiểm tra tính ñúng ñắn của các tài liệu XML Xerces-C++ hiện thực một số API chuẩn ñể xử lý file XML gồm DOM, SAX, và SAX2 [37]

2.2.4 Tìm hiểu thư viện hệ thống POP-C++

Trong phần này, chúng tôi tiến hành tìm hiểu cấu trúc thư viện hệ thống, chức năng của các thư viện hệ thống, và cách chúng hoạt ñộng Dựa vào các tìm hiểu

Trang 32

20

này, chúng tôi có ñược cái nhìn tổng quan về hệ thống, biết ñược cơ chế hoạt ñộng của hệ thống và từ ñó xác ñịnh những thư viện nào cần can thiệp, và chúng tôi cần

viết thêm những thư viện nào ñể phục vụ cho mục ñích cải tiến hệ thống

POP-C++ là ngôn ngữ mở rộng của ngôn ngữ C++, cho phép lập trình trên môi trường lưới Khi một chương trình ñược viết ở POP-C++, chương trình parser sẽ chuyển nó sang ngôn ngữ C++, sau ñó trình biên dịch và liên kết sẽ biên dịch trên file C++ vừa tạo ra Trong quá trình biên dịch và liên kết, trình biên dịch và liên kết

có liên kết với một số thư viện của POP-C++ ñể tạo thành một chương trình có thể chạy song song (Hình 2 - 12)

Hình 2 - 12: Quá trình tạo các ñối tượng trong POP-C++ [19]

Thư viện của POP-C++ hỗ trợ quá trình dịch và liên kết mã POP-C++ ñể tạo thành một chương trình có thể chạy ñược trên môi trường lưới Các thư viện của POP-C++ hỗ trợ việc tạo ra các ñối tượng song song, quy ñịnh cách chúng giao tiếp

ra sao, theo phương thức là gì, cách mã hóa dữ liệu ra sao, Nói chung là tất cả những gì người lập trình làm ñơn giản như họ vẫn làm trên các chương trình truyền thống, chạy trên một máy ñơn Các phần còn lại ñều do POP-C++ ñảm nhiệm Sau ñây là lược ñồ lớp của một số ñối tượng trong POP-C++ (Hình 2 - 13)

Trang 33

21

Hình 2 - 13: Lược ñồ lớp một số ñối tượng trong POP-C++

Sau ñây là bảng tóm tắt một số hàm thư viện hệ thống của POP-C++ và chức năng của chúng

Bảng 2 - 2: Một số thư viện hệ thống của POP-C++

paroc_base ðối tượng cơ bản trong POP-C++, có khai báo hàm virtual

serialize ñể tuần tự hóa ñối tượng gửi ñi

paroc_array Tạo ñối tượng mảng, cấp phát một mảng gồm n phần tử liên

tiếp nhau trong bộ nhớ

paroc_string Tạo ñối tượng chuỗi

paroc_list Tạo ñối tượng danh sách, cấp phát một danh sách liên kết các

ñối tượng và cung cấp các toán tử trên nó

paroc_od

Tạo ñối tượng miêu tả thông số cần thiết ñể chạy một ñối tượng, thông số này có thể là tốc ñộ CPU, dung lượng bộ nhớ, băng thông, giao thức kết nối dùng ñể giao tiếp, cách

mã hóa buffer

paroc_exception Tạo ñối tượng exception, ñịnh nghĩa một số hằng exception

và cung cấp cơ chế ñể in ra các exception ñó

paroc_event Tạo một hàng chờ các sự kiện, cung cấp cơ chế ñể ñưa các sự

kiện vào hàng chờ, và phục vụ các sự kiện ñó khi nó tới lượt paroc_mutex Hỗ trợ cơ chế lập trình tương hỗ, cho phép khóa (lock) và mở

khóa (unlock) một sự kiện nào ñó

paroc_interface Tạo ñối tượng interface cung cấp cho người dùng cơ chế ñể

Trang 34

paroc_connection Tạo ñối tượng kết nối, ñây là ñối tượng ảo dùng ñể tạo một

kết nối giữa hai combox với nhau

paroc_object

Tạo ñối tượng object, ñối tượng này có thể ñược chạy trên một máy từ xa, và là ñối tượng thực sự chứa các hiện thực của các phương thức mà người dùng cần

paroc_accesspoint

Tạo ñối tượng accesspoint cung cấp ñiểm truy cập ñến một ñối tượng từ xa Khi một ñối tượng nào ñó muốn truy cập ñến một ñối tượng từ xa thì ñối tượng ñó phải biết ñiểm truy cập này

paroc_broker

Tạo ñối tượng broker, cung cấp các cơ chế cho phép nhận request từ interface, chuyển request ñó cho object và trả kết quả ñã tính toán ñược ngược trở về interface Khi một object ñược tạo thì ñối tượng này cũng ñược tạo theo

2.2.5 Cơ chế kích hoạt phương thức từ xa và ñịnh dạng thông ñiệp của

phương thức từ xa thông qua giao thức HTTP, và sau ñó chúng tôi phải chỉnh sửa

lại thư viện paroc_buffer ñể nó có thể hỗ trợ cách mã hóa dữ liệu theo chuẩn WSRF

như yêu cầu của hệ thống cần nâng cấp

Trước khi bước vào phần hiện thực hệ thống, nhóm chúng tôi cũng ñã có tìm hiểu cơ chế kích hoạt phương thức từ xa (phần 2.2.5.1) và cơ chế ñịnh dạng thông ñiệp (phần 2.2.5.2) của POP-C++ Dựa trên các tìm hiểu này, chúng tôi có thể hiểu

rõ hơn về cơ chế truyền nhận thông ñiệp giữa các ñối tượng trong POP-C++, từ ñó chúng tôi có cách tác ñộng phù hợp vào hệ thống ñể hệ thống chúng tôi sẽ xây dựng

có thể hỗ trợ ñược giao thức HTTP và ñịnh dạng dữ liệu theo chuẩn WSRF

Trang 35

23

2.2.5.1 Cơ chế kích hoạt phương thức từ xa

Như ở Hình 2 - 2, ta thấy khi người dùng tạo một ñối tượng trên tài nguyên lưới

và truy xuất vào tài nguyên ñó, thì họ phải có cách thức nào ñó ñể kích hoạt phương thức trên ñối tượng ở xa và thông báo cho ñối tượng ñó biết phương thức mà họ cần gọi Trong phần này, chúng tôi tìm hiểu cách thức ñể một ñối tượng kích hoạt một ñối tượng khác trên tài nguyên lưới như thế nào, việc kích hoạt này có liên quan ñến những thành phần nào của POP-C++, từ ñó chúng tôi biết ñược cơ chế hoạt ñộng của nó và có cách tác ñộng phù hợp ñể thỏa mãn yêu cầu hệ thống mới

Như ở Hình 2 - 12, sau khi tạo ra mã ở dạng ngôn ngữ C++, trình biên dịch và liên kết sẽ liên kết mã C++ và các thư viện của POP-C++ ñể tạo thành các ñối tượng khác nhau và các ñối tượng này có thể ñược phân bố ở các máy khác nhau trên lưới

ñể có thể thực hiện việc tính toán song song

Khi người dùng gọi một phương thức nào ñó, thì thực sự họ ñang giao tiếp với ñối tượng Interface của lớp ñó, sau ñó ñối tượng Interface sẽ tìm phương thức ñó trên các ñối tượng ở xa và triệu gọi phương thức tương ứng trên các ñối tượng ở xa Các ñối tượng ở xa khi nhận ñược request yêu cầu thực hiện một phương thức nào

ñó, nó sẽ thực hiện phương thức ñó trên máy ở xa và gửi ngược kết quả trở lại cho ñối tượng gọi

Các ñối tượng interface và object giao tiếp với nhau thông qua một ñối tượng trung gian là broker Nhiệm vụ của broker là nhận các request từ các ñối tượng interface chuyển tới, phân tích request và gửi nó cho ñối tượng object chứa mã thực thi request, sau khi ñối tượng object thực thi xong yêu cầu, nó gửi kết quả về cho broker và broker gửi kết quả ñó trở về ñối tượng interface Như vậy ñối tượng object mới thực sự chứa các hiện thực của các phương thức, và mỗi object có một broker riêng

Các ñối tượng trong POP-C++ giao tiếp với nhau thông qua ñối tượng combox ðối tượng này có nhiệm vụ thực hiện việc kết nối ñến các ñối tượng ở xa, gửi request cho các ñối tượng ở xa và nhận response từ các ñối tượng ở xa truyền về Các ñối tượng combox này kết nối với nhau thông qua ñối tượng connection

Hình 2 - 14: Giao tiếp giữa các ñối tượng trong POP-C++

Trang 36

24

Mỗi combox ñều có ñối tượng buffer riêng, khi một combox muốn gửi thông ñiệp cho một combox khác, nó chỉ việc gửi cả ñối tượng buffer ñó sang combox ñích thông qua ñối tượng connection

Khi một ñối tượng muốn gửi dữ liệu thông qua combox, trước hết nó gửi dữ liệu

ñó ñến ñối tượng buffer, sau ñó buffer mã hóa dữ liệu theo chuẩn xác ñịnh trước, tiếp ñến combox gửi cả buffer ñó qua ñối tượng connection Ở ñầu bên kia, combox nhận ñược buffer chứa dữ liệu, do ñã biết trước ñịnh dạng mã hóa nên ñối tượng buffer bên kia có thể lấy ñược dữ liệu mà ñối tượng bên này ñã gửi là gì

Lược ñồ tuần tự sau miêu tả quá trình gọi hàm func vào ñối tượng interface:

Hình 2 - 15: Gửi nhận thông ñiệp giữa ñối tượng Interface và Object

2.2.5.2 Cơ chế ñịnh dạng thông ñiệp của POP-C++

Như ñã phân tích, ñể truyền nhận dữ liệu thông qua môi trường lưới, các ñối tượng phải mã hóa thông ñiệp gửi ñi theo một ñịnh dạng nào ñó Trong phần này chúng tôi tìm hiểu cơ chế ñịnh dạng thông ñiệp của POP-C++, cấu trúc của một ñối tượng buffer gồm có những thành phần nào, cấu trúc của mỗi thành phần ñó ra sao

Từ những tìm hiểu này, chúng tôi có thể xây dựng ñược một buffer mới ñịnh dạng

dữ liệu theo chuẩn WSRF và có thể tích hợp buffer này vào hệ thống

Các thông ñiệp mà các ñối tượng trong POP-C++ truyền cho nhau ñều ñược buffer ñóng gói và nhờ combox gửi ñi thông qua giao thức connection Cấu trúc của một buffer gồm có hai phần: phần header và phần body Phần header ñược dùng ñể chứa các thông tin ñịnh dạng buffer và một số thông tin về ñối tượng ñích Phần body chứa nội dung của thông ñiệp ñã ñược mã hóa và ñịnh dạng

Trang 37

25

Hình 2 - 16: ðịnh dạng của buffer

Phần header bao gồm các thành phần sau:

• Kiểu thông ñiệp: kiểu thông ñiệp có thể là request, response hay exception

Tùy theo mỗi kiểu thông ñiệp mà ta sẽ quyết ñịnh cách ñịnh dạng của phần body của buffer

• ðịnh danh của lớp, phương thức và ngữ nghĩa của phương thức ñó: khi ñối

tượng interface yêu cầu ñối tượng object thực hiện một phương thức thì request mà interface gửi sang object phải cung cấp ñầy ñủ các thông tin mà ñối tượng object cần, các thông số này bao gồm ñịnh danh của lớp ñối tượng (classid) dùng ñể xác ñịnh ñúng ñối tượng, phương thức của lớp cần gọi (classid) dùng ñể xác ñịnh ñúng phương thức cần gọi (vì trong một một lớp

có rất nhiều phương thức, ta cần phải chỉ rõ phương thức cần gọi là phương thức nào), ngữ nghĩa của phương thức (một phương thức gửi ñi có thể có nhiều ngữ nghĩa khác nhau như ñồng bộ, bất ñồng bộ, tuần tự, ñồng thời hay chờ các phương thức ñược gọi trước thực hiện xong mới thực hiện phương thức này)

• Tên phương thức: thông số này ñược thiết lập khi ñối tượng object gửi

response trở về ñối tượng interface Trong một khoảng thời gian, có thể một ñối tượng yêu cầu nhiều phương thức cùng lúc với ngữ nghĩa khác nhau, vì vậy thuộc tính này dùng ñể xác ñịnh kết quả của phương thức ñang trả về là thuộc về phương thức nào

• Mã lỗi: thông số này ñược thiết lập khi ñối tượng object xác ñịnh có lỗi xảy

ra trong khi thực hiện yêu cầu của ñối tượng interface Thông số này giúp bên nhận hiểu ñược tại sao request gửi ñi không ñược ñáp ứng, và exception tạo ra là do ñâu

Phần body chứa thông tin của thông ñiệp gửi ñi theo một ñịnh dạng ñược quy ñịnh trước Ví dụ ñối với ñịnh dạng thô, phần body của buffer ở ñịnh dạng thô, tức

là nội dung của phần body của buffer và nội dung của thông ñiệp là giống nhau; buffer có ñịnh dạng theo chuẩn XDR [25] thì phần thân buffer phải ñược ñịnh dạng theo chuẩn XDR ñể cho cách biểu diễn dữ liệu truyền ñi trên mạng không phụ thuộc vào kiến trúc máy tính

Trang 38

26

2.3 Mở rộng POP-C++ hỗ trợ lập trình lưới

Sau khi tìm hiểu cơ chế hoạt ñộng của các thành phần trong POP-C++, chúng tôi bắt ñầu thiết kế lại và mở rộng hệ thống sao cho nó có thể khắc phục ñược những nhược ñiểm hiện tại và có khả năng mở rộng hơn nữa trong tương lai

Trước hết phần 2.3.1 trình bày cơ chế mở rộng của combox ñể hệ thống có thể

hỗ trợ ñồng thời nhiều network protocols, cơ chế ñể có thể nhận dạng một plugin của combox và cơ chế hoạt ñộng của combox sau khi mở rộng

Sang phần 2.3.2, hiện thực một combox cụ thể hỗ trợ giao thức HTTP Trong ñó chúng tôi giới thiệu qua về cơ chế hoạt ñộng của combox này, làm sao ñể tích hợp combox này vào hệ thống

Phần 2.3.3 trình bày cơ chế mở rộng của buffer ñể hệ thống có thể hỗ trợ ñồng thời nhiều cách mã hóa dữ liệu khác nhau Sau ñó chúng tôi giới thiệu qua về ñịnh dạng dữ liệu theo chuẩn WSRF, cơ chế mã hóa dữ liệu của một buffer cụ thể trong phần 2.3.4 Qua phần 2.3.5 sẽ trình bày một buffer cụ thể ñịnh dạng dữ liệu theo chuẩn WSRF, cách thức hoạt ñộng của nó và làm thế nào ñể tích hợp buffer ñó vào

hệ thống

Cuối cùng sang phần 2.3.6, ta sẽ xem xét làm thế nào ñể tích hợp các thành phần vừa ñược mở rộng vào hệ thống POP-C++ hiện tại

2.3.1 Thiết kế mở rộng POP-C++ hỗ trợ ñồng thời nhiều network protocol

Hiện tại POP-C++ phiên bản 1.1.1 chỉ có hỗ trợ giao thức XDR/socket, bây giờ

hệ thống chúng tôi ñề nghị có hỗ trợ thêm giao thức HTTP Do ñó bây giờ chúng tôi thiết kế mở rộng POP-C++ ñể nó có thể hỗ trợ ñồng thời cả hai giao thức trên, hay rộng hơn nữa, nhóm chúng tôi dự kiến sẽ mở rộng hệ thống ñể nó có thể hỗ trợ ñồng thời nhiều network protocol khác nhau

Ở Hình 2 - 14 ta thấy hai ñối tượng muốn giao tiếp ñược với nhau, chúng phải nhờ vào ñối tượng combox giao tiếp thông qua một connection nào ñó Khi combox

A muốn giao tiếp với combox B, combox A phải gửi một request yêu cầu kết nối ñến combox B, combox B sau khi nhận yêu cầu, nếu chấp nhận kết nối thì combox

B sẽ thiết lập một connection ñến combox A Sau khi ñã có connection giữa hai combox, việc gửi nhận dữ liệu giữa hai combox sẽ ñược thực hiện trên connection

ñó ðể việc gửi nhận dữ liệu giữa hai combox ñược thực hiện chính xác, hai combox này phải giao tiếp với nhau theo một giao thức nào ñó mà hai combox này quy ước với nhau trước

Hiện tại hệ thống POP-C++ 1.1.1 chỉ có hỗ trợ giao thức TCP/socket ñể kết nối giữa các ñối tượng với nhau ðiều ñó có nghĩa là nếu hai ñối tượng muốn giao tiếp với nhau thì chúng luôn phải dùng giao thức TCP/socket Tuy nhiên giao thức này

Trang 39

27

có một số hạn chế khi triển khai trên hệ thống lưới như vấn ñề firewall, vấn ñề mạng ảo, dẫn ñến yêu cầu cần phải có một giao thức kết nối khác có thể khắc phục ñược những hạn chế này Vì vậy mà POP-C++ cần phải có cơ chế ñể hỗ trợ nhiều giao thức ñồng thời

Khi POP-C++ hỗ trợ nhiều giao thức ñồng thời, nếu một ñối tượng muốn kết nối ñến một ñối tượng khác, ñối tượng ñó phải xác ñịnh xem ñối tượng ñích cần kết nối ñến có những ñặc tính gì, từ ñó ñối tượng ñó mới chọn trong danh sách các giao thức mà hiện thời hệ thống có ñang hỗ trợ ñể dẫn ñến quyết ñịnh sẽ chọn giao thức nào trong danh sách ñó Khi ñã quyết ñịnh ñược giao thức kết nối thích hợp, ñối tượng ñó chỉ ñơn giản tạo một combox có hỗ trợ kết nối vừa chọn và yêu cầu combox ñó kết nối ñến ñối tượng ñích

Như vậy ta có thể hình dung một combox ñược tạo ra sẽ hỗ trợ một giao thức nào ñó xác ñịnh trước Khi hai combox cùng loại, tức là cùng hỗ trợ một loại giao thức thì chúng có thể kết nối ñược với nhau, và kết nối ñược tạo ra giữa chúng cũng tương ứng với loại combox ñó Ví dụ hai combox có hỗ trợ giao thức TCP/socket muốn giao tiếp với nhau thì kết nối tạo ra giữa chúng cũng phải là TCP/socket

Hình 2 - 17: Mô hình kết nối giữa các ñối tượng combox trong POP-C++

Quá trình kết nối giữa các ñối tượng trong POP-C++ sau khi ñược mở rộng có thể diễn ra như sau:

1 ðối tượng A muốn kết nối ñến ñối tượng B

2 Vì ñối tượng A muốn kết nối ñến ñối tượng khác, nó phải nhờ vào ñối tượng

combox Do ñó, trước hết ñối tượng A tạo ra ñối tượng combox_factory ñể

sinh ra combox

3 Khi combox_factory ñược tạo ra, trước tiên nó sẽ load tất cả các protocol mà

hệ thống có hỗ trợ vào một danh sách chứa các protocol Sau này khi cần tìm

Trang 40

vào accesspoint của ñối tượng B

5 ðối tượng A nhờ ñối tượng combox_factory tạo ra combox có hỗ trợ giao

thức trên

6 Sau khi ñã có combox với giao thức thích hợp, ñối tượng A nhờ combox kết nối ñến ñịa chỉ của B

7 Bên phía ñối tượng B, do B là ñối tượng ñược ñối tượng A gửi yêu cầu kết

nối ñến nên có thể xem như B là server ñang lắng nghe kết nối và A như là client gửi yêu cầu kết nối ðể lắng nghe kết nối thì B cũng cần phải thực hiện thông qua combox Do ñó trước hết B cũng tạo ra một combox_factory ñể tạo

ra combox mong muốn

8 Khi combox_factory bên phía ñối tượng B ñược tạo ra, cũng tương tự như bên phía ñối tượng A, trước tiên hàm khởi tạo combox_factory sẽ load tất cả

các protocol mà hệ thống có hỗ trợ vào một danh sách chứa các protocol Sau này khi cần tìm một giao thức kết nối nào ñó mà hệ thống có hỗ trợ hay không, POP-C++ chỉ cần tìm trong danh sách này mà không cần phải load lại các protocol

9 Khi load xong các protocol mà hệ thống có hỗ trợ, ñối tượng B nhờ

combox_factory ñể tạo ra tất cả các combox tương ứng với các protocol mà

hệ thống có hỗ trợ và lắng nghe trên tất cả các combox ñó

10 Khi A gửi yêu cầu kết nối ñến B, combox tương ứng với protocol của combox A chấp nhận yêu cầu và tạo kết nối

11 Sau khi ñã có kết nối, A và B có thể gửi và nhận dữ liệu với nhau một cách bình thường

Lược ñồ dưới ñây minh họa cho quá trình trên:

Ngày đăng: 07/02/2015, 22:55

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Bernman, F. and Hey, T. and Fox, G., Grid Computing – Making the Global Infrastructure a Reality, John Wiley & Sons, Ltd., 2003 Sách, tạp chí
Tiêu đề: Grid Computing – Making the Global Infrastructure a Reality
Tác giả: Bernman, F., Hey, T., Fox, G
Nhà XB: John Wiley & Sons, Ltd.
Năm: 2003
[3] C. Lee et al., A Grid programming primer, Technical report, Advanced Programming Models Research Group, Grid Forum, August 2001.http://www.eece.unm.edu/~apm/docs/APM Primer 0801.pdf Sách, tạp chí
Tiêu đề: A Grid programming primer
[4] D. H. S. Phan, T. A. Nguyen, POP-Java programming system, Proc. International Workshop on Advanced Computing and Applications, Ho Chi Minh City, Vietnam, March 12-14, 2008 Sách, tạp chí
Tiêu đề: POP-Java programming system
Tác giả: D. H. S. Phan, T. A. Nguyen
Nhà XB: Proc. International Workshop on Advanced Computing and Applications
Năm: 2008
[5] D.-K. Tran, T. V. Hoai, The Workflow Framework for Metaheuristic Search on Grid Environment, submitted to Proc. of 4rd International Conference on High Performance Scientific Computing (HPSC2009), Mar. 2-6, 2009, Hanoi, Vietnam Sách, tạp chí
Tiêu đề: The Workflow Framework for Metaheuristic Search on Grid Environment
[6] Dat C. Nguyen, Thuc D. Nguyen, Large integer factoring on grid computing environment, Journal of Sience and Technology, Vol. 46, No. 5A, VietNam Academy of Science, pp. 193-204, 2009 Sách, tạp chí
Tiêu đề: Large integer factoring on grid computing environment
Tác giả: Dat C. Nguyen, Thuc D. Nguyen
Nhà XB: Journal of Sience and Technology
Năm: 2009
[7] Ferreira, Luis and al., Introduction to Grid Computing with Globus, IBM, 2003 Sách, tạp chí
Tiêu đề: Introduction to Grid Computing with Globus
[8] Foster, I. and Kesselman, C., The Grid 2 – Blueprint for a new Computing Infrastructure, the 2nd edition, Morgan Kaufmann, 2004 Sách, tạp chí
Tiêu đề: The Grid 2 – Blueprint for a new Computing Infrastructure
[9] Hien H. T. Phan, Man V. M. Nguyen, T. A. Nguyen, Applying parallel computing for enumeration orthogonal arrays, Proc. International Workshop on Advanced Computing and Applications, Ho Chi Minh City, Vietnam, March 12-14, 2008 Sách, tạp chí
Tiêu đề: Applying parallel computing for enumeration orthogonal arrays
[10] I. Foster, Globus Toolkit Version 4: Software for Service-Oriented Systems, IFIP International Conference on Network and Parallel Computing, Springer- Verlag LNCS 3779, pp 2-13, 2006 Sách, tạp chí
Tiêu đề: Globus Toolkit Version 4: Software for Service-Oriented Systems
[11] Lehning, M., Volksch, I., Gustafsson, D., Nguyễn Tuấn Anh, Stahli, M., Zappa, M., ALPINE3D: A detailed model of mountain surface processes and its application to snow hydrology, Hydrological Processes (20), 2006 Sách, tạp chí
Tiêu đề: ALPINE3D: A detailed model of mountain surface processes and its application to snow hydrology
Tác giả: Lehning, M., Volksch, I., Gustafsson, D., Nguyễn Tuấn Anh, Stahli, M., Zappa, M
Nhà XB: Hydrological Processes
Năm: 2006
[12] Maozhen Li, Mark Baker, The Grid: Core Technologies, John Wiley & Sons, 2005 Sách, tạp chí
Tiêu đề: The Grid: Core Technologies

HÌNH ẢNH LIÊN QUAN

Hình 2 - 4: Lời gọi Web Service không có trạng thái [2] - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 4: Lời gọi Web Service không có trạng thái [2] (Trang 22)
Hình 2 - 5: Lời gọi Web Service có trạng thái [2] - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 5: Lời gọi Web Service có trạng thái [2] (Trang 23)
Hình 2 - 6: Mối quan hệ giữa OGSA, GT4, WSRF, và Web [2] - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 6: Mối quan hệ giữa OGSA, GT4, WSRF, và Web [2] (Trang 24)
Hình 2 - 7: WS-Resource [2] - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 7: WS-Resource [2] (Trang 25)
Hỡnh 2 - 9: Trao ủổi thụng ủiệp dựng giao thức SOAP [7] - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
nh 2 - 9: Trao ủổi thụng ủiệp dựng giao thức SOAP [7] (Trang 27)
Hình 2 - 11: Cấu trúc cây của DOM [38] - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 11: Cấu trúc cây của DOM [38] (Trang 29)
Hỡnh 2 - 15: Gửi nhận thụng ủiệp giữa ủối tượng Interface và Object - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
nh 2 - 15: Gửi nhận thụng ủiệp giữa ủối tượng Interface và Object (Trang 36)
Hỡnh 2 - 18: Quỏ trỡnh kết nối giữa cỏc ủối tượng trong POP-C++ sử dụng combox - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
nh 2 - 18: Quỏ trỡnh kết nối giữa cỏc ủối tượng trong POP-C++ sử dụng combox (Trang 41)
Hình 2 - 19: Quá trình load combox plugin của hệ thống POP-C++ - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 19: Quá trình load combox plugin của hệ thống POP-C++ (Trang 42)
Hỡnh 2 - 20: Giao tiếp giữa cỏc ủối tượng sử dụng combox_http - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
nh 2 - 20: Giao tiếp giữa cỏc ủối tượng sử dụng combox_http (Trang 44)
Hỡnh 2 - 21: Gửi nhận thụng ủiệp giữa cỏc ủối tượng thụng qua buffer - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
nh 2 - 21: Gửi nhận thụng ủiệp giữa cỏc ủối tượng thụng qua buffer (Trang 46)
Hỡnh 2 - 22: Quỏ trỡnh trao ủổi dữ liệu trong POP-C++ - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
nh 2 - 22: Quỏ trỡnh trao ủổi dữ liệu trong POP-C++ (Trang 48)
Hình 2 - 27: Kiến trúc phân lớp của POP-C++ - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 27: Kiến trúc phân lớp của POP-C++ (Trang 54)
Hình 2 - 28: Tương tác gi - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 28: Tương tác gi (Trang 55)
Hình 2 - 30: Tổ chức lại API của POP-C++ runtime service - xây dựng công cụ lập trình cho tính toán thích nghi hiệu năng cao trên môi trường tính toán lưới
Hình 2 30: Tổ chức lại API của POP-C++ runtime service (Trang 58)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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