Tải bản đầy đủ (.doc) (52 trang)

tính toán lưới - gtlinux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (684.44 KB, 52 trang )

Chương này mô tả quá trình cài đặt và cấu hình Globus Toolkit 4.0. Chúng tôi
sẽ triển khai cài đặt Globus Toolkit trong mạng gồm 3 máy tính. Các vấn đề chính
trong chương này gồm có:
• Download Globus Toolkit 4.0
• Các gói tin của Globus Toolkit 4.0
• Mô hình môi trường mạng Grid
• Cài đặt Globus Toolkit 4.0
• Cấu hình và thử nghiệm môi trường Grid
• Gỡ bỏ Globus Toolkit 4.0
1.1. Download Globus Toolkit 4.0
Globus Toolkit 4.0 là phần mềm mã nguồn mở hỗ trợ nhiều hệ điều hành. Các
gói tin binary hỗ trợ môi trường Windows, Linux (SuSE Linux 9/8, Red Hat Linux 9,
Fedora Core 2/3 và Debian 3.1) và Solaris 9. Việc biên dịch GT4 từ các gói tin nguồn
có thể hỗ trợ thêm các hệ điều hành AIX và Mac OS X. Các thành phần phát triển trên
nền tảng Java như WSRF hoặc WS Java Core đều tương thích với các hệ điều hành hỗ
trợ Java, trong đó có Windows. Hiện nay, việc sử dụng hệ điều hành Linux để phát
triển môi trường Grid đang trở nên phổ biến. Vì vậy, chúng tôi sử dụng hệ điều hành
Fedora Core 3 để phát triển môi trường Grid. Các gói tin sử dụng là các gói tin binary.
Truy cập địa chỉ: để download các gói
tin này.
Gói tin GT4 cho Fedora Core 3 là: gt4.0.0-ia32-fedora3-binary-installer.tar.gz
1.2. Mô hình môi trường mạng Grid
Chúng tôi sử dụng 3 máy tính để cài đặt môi trường mạng Grid.
Hình 23: Mô hình mạng Grid
Các máy tính bao gồm:
1
• CA: Đây là nơi chứng thực quyền hạn. Do đó, chúng tôi sử dụng SimpleCA có
sẵn trong gói tin GT4.
• Host A, Host B: là các nốt mạng Grid. Chúng tôi cài đặt gói tin GT4 cho các
nốt này.
Host A và Host B sử dụng hai tên người dùng khác nhau là auser1 và buser1,


nhưng chúng cùng chia sẻ một ID người dùng chung là:
/O=Grid/O=Globus/OU=gridk47.com/CN=grid user 1
Bảng 7.2a mô tả các máy tính của mạng Grid.
Tên máy Tên host Chức năng Hệ điều hành Gói tin cài
đặt
CA ca.gridk47.com Chứng thực
quyền hạn
Fedora Core 3 Gói GT4
binary
Host A hosta.gridk47.com Nốt mạng
Grid
Fedora Core 3 Gói GT4
binary
Host B hostb.gridk47.com Nốt mạng
Grid
Fedora Core 3 Gói GT4
binary
Bảng 7.2a Các máy tính trong mạng Grid
Bảng 7.2b mô tả phiên bản các phần mềm sử dụng
Tên phần mềm Phiên bản Thư mục chủ
Globus Toolkit 4.0 4.0.0 /usr/local/globus-4.0.0
Java SDK 1.5 /usr/local/java
Apache Ant 1.6.3 /usr/local/ant
Bảng 7.2b: Phiên bản các phần mềm sử dụng
1.3. Cài đặt Globus Toolkit 4.0
Chương này mô tả thứ tự các bước để cài đặt Globus Toolkit 4.0
1.3.1. Cài đặt các phần mềm yêu cầu cho Globus Toolkit 4.0
Trước khi cài đặt Globus Toolkit 4.0, cần cài đặt các phần mềm sau:
Tên phần mềm Phiên bản
Java SDK 1.5

2
Apache Ant 1.6.3
Bảng 7.3a: Các phần mềm cho Globus Toolkit 4.0
a - Cài đặt Java SDK
Để cài đặt Java SDK
• Lấy gói tin Java SDK, vào địa chỉ:
• Cài đặt Java SDK:
[root@hosta]# rpm -ivh jdk-1_5_0_06-linux-i586-rpm.rpm
• Để thiết lập biến môi trường cho Java SDK, mở tệp /etc/profile và thêm đoạn sau:
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
• Để biến môi trường hoạt động, đóng tệp /etc/profile và chạy lệnh:
[root@hosta]# . etc/profile
• Để kiểm tra Java SDK đã được cài đặt thành công, dùng lệnh:
[root@hosta]# java version
b - Cài đặt Apache Ant
Để cài đặt Apache Ant:
• Lấy gói tin Apache Ant tài địa chỉ:
• Bung tệp nén Apache Ant:
[root@hosta]# tar xvzf apache-ant-1.6.3-bin.tar.gz -C /usr/local
• Thiết lập biến môi trường cho Apache Ant, mở tệp /etc/profile và thêm đoạn sau:
export ANT_HOME=/usr/local/apache-ant-1.6.3
export PATH=$ANT_HOME/bin:$PATH
• Để biến môi trường hoạt động, đóng tệp /etc/profile và chạy lệnh:
[root@hosta]# . etc/profile
• Để kiểm tra Apache Ant đã cài đặt thành công, dùng lệnh:
3
[root@hosta]# ant version
1.3.2. Cấu hình môi trường Linux cho Globus Toolkit 4.0
Trước khi cài đặt Globus Toolkit, cần cấu hình một số thứ trong môi trường

Fedora Core 3 đang sử dụng trên các máy tính trong mạng.
a-Thêm tài khoản người dùng
Trong Fedora, sử dụng lệnh: adduser để thêm một người dùng mới. Ví dụ:
adduser auser1 để thêm người dùng auser1. Bảng sau đây là những người dùng cần
thêm vào trong các máy tính trên mạng.
Tên host Tên người dùng
ca globus
hosta globus, auser1
hostb globus, buser1
Bảng 7.3b: Danh sách người dùng trên các máy tính
b- Thiết lập thời gian
Trong mạng Grid computing, việc đồng bộ hoá thời gian giữa các máy tính
với nhau là rất quan trọng. Nếu thời gian không được đồng bộ, khi dùng chứng thực
GSI sẽ xảy ra lỗi. Do đó, chúng tôi thiết lập time server là NTP cho môi trường Grid
của mình và thiết lập thời gian cho tất cả các máy tính trong hệ thống.
Để cấu hình NTP:
• Trên máy tính CA làm NTP server, chỉnh sửa tệp: /etc/ntp.conf, bỏ comment 2 dòng
dưới đây bằng cách bỏ ký từ # đầu dòng:
server 127.127.1.0 # local clock
driftfile /etc/ntp/drift
• Thực hiện tương tự với 2 máy Host A và Host B:
server (địa chỉ IP của CA) # time server
driftfile /etc/ntp/drift
• Trên tất cả các máy, cầu hình ntp deamon bằng cách dùng lệnh:
[root@hosta]# chkconfig ntpd -on
• Bắt đầu chạy dịch vụ ntp
4
[root@hosta]# service ntpd start
• Để kiểm tra thời gian đã được đồng bộ hay chưa, dùng lệnh ntpq. Nếu có dấu sao
(*) đằng trước tên host thì cấu hình NTP đã thành công:

[root@hosta]# ntpq -p
remote refid st t when poll reach delay offset jitter
==========================================
*ca.gridk47.com LOCAL(0) 6 u 516 1024 377 0.931 -2.258 0.262
c- Thiết lập tường lửa
Ở đây cúng tôi không thiết lập tường lửa. Nếu thiết lập tường lửa, cần phải
mở các cổng TCP sau đây để lắng nghe các dịch vụ và thành phần của Globus Toolkit.
Cổng TCP Các thành phần của GT4
2811 GridFTP
8080 Globus container (chế độ không bảo mật)
8443 Globus container (chế độ bảo mật)
Bảng 7.3c: Các cổng TCP cần mở khi thiết lập tường lửa
1.3.3. Cài đặt Globus Toolkit 4.0
Để cài đặt Globus Toolkit 4.0, chúng tôi sử dụng gói tin Binary cho Fedora
Core 3.
• Lấy gói tin binary, vào địa chỉ:

• Vào người dùng globus, bung tệp nén binary:
[globus@hosta]$ tar xvzf gt4.0.0-ia32-fedora3-binary-installer.tar.gz \
-C /tmp
• Thiết lập biến môi trường cho thư mục chứa Globus:
[globus@hosta]$ export GLOBUS_LOCATION=/usr/local/globus-4.0.0
• Thay đổi quyền hạn của thư mục này cho người dùng globus:
[globus@hosta]$ su
Password:
5
[root@hosta]# mkdir $GLOBUS_LOCATION
[root@hosta]# chown globus:globus $GLOBUS_LOCATION
[root@hosta]# exit
exit

[globus@hosta]$
Cấu hình và cài đặt Globus Toolkit 4.0, mô tả qua các bước sau:
[globus@hosta]$ cd /tmp/gt4.0.0-ia32-fedora3-binary-installer
[globus@hosta]$ ./configure prefix=$GLOBUS_LOCATION
checking for javac /usr/local/java/j2sdk1.5.0/bin/javac
checking for ant /usr/local/apache-ant-1.6.3/bin/ant
configure: creating ./config.status
config.status: creating Makefile
[globus@hosta]$ make 2>&1 | tee build.log
cd gpt-3.2autotools2004 && OBJECT_MODE=32 ./build_gpt
build_gpt ====> installing GPT into /usr/local/globus-4.0.0
(Bỏ qua thông tin)
[globus@hosta]$ make install
ln -s /usr/local/globus-4.0.0/etc/gpt/packages
/usr/local/globus-4.0.0/etc/globus_packages
/usr/local/globus-4.0.0/sbin/gpt-postinstall
(Bỏ qua thông tin)
config.status: creating fork.pm
Done
1.4. Cấu hình và thử nghiệm môi trường Grid
Sau khi cài đặt xong Globus Toolkit, cần phải cấu hình môi trường grid. Để
cấu hình môi trường grid, cần cấu hình các thành phần sau:
• Cấu hình các biến môi trường
6
• Cấu hình bảo mật
• Cấu hình Java WS Core
• Cấu hình và kiểm tra GridFTP
1.4.1. Cấu hình các biến môi trường
Để tất cả các người dùng đều có thể sử dụng các biến môi trường của Grid.
Chẳng hạn: GLOBUS_LOCATION, mở tệp /etc/profile và thêm đoạn:

export GLOBUS_LOCATION=/usr/local/globus-4.0.0
source $GLOBUS_LOCATION/etc/globus-user-env.sh
source $GLOBUS_LOCATION/etc/globus-devel-env.sh
1.4.2. Cấu hình bảo mật
Chúng tôi sử dụng SimpleCA để cài đặt bảo mật. SimpleCA là thành phần
được tích hợp trong Globus Toolkit 4.0.
a- Cài đặt các gói tin CA
Vào tài khoản người dùng globus tại máy CA
Để cài đặt simpleCA, dùng lệnh setup-simple-ca và thực hiện các bước:
[globus@ca]$ $GLOBUS_LOCATION/setup/globus/setup-simple-ca
WARNING: GPT_LOCATION not set, assuming:
GPT_LOCATION=/usr/local/globus-4.0.0
C e r t i f i c a t e A u t h o r i t y S e t u p
This script will setup a Certificate Authority for signing Globus users
certificates. It will also generate a simple CA package that can be
distributed to the users of the CA.
The CA information about the certificates it distributes will be kept in:
/home/globus/.globus/simpleCA/
/usr/local/globus-4.0.0/setup/globus/setup-simple-ca: line 250: test: res:
integer expression expected
The unique subject name for this CA is:
7
cn=Globus Simple CA, ou=simpleCA-ca.gridk47.com, ou=GlobusTest, o=Grid
Do you want to keep this as the CA subject (y/n) [y]: y
Enter the email of the CA (this is the email where certificate requests will be
sent to be signed by the CA):
The CA certificate has an expiration date. Keep in mind that once the CA
certificate has expired, all the certificates signed by that CA become invalid.
A CA should regenerate the CA certificate and start re-issuing ca-setup
packages before the actual CA certificate expires. This can be done by

re-running this setup script. Enter the number of DAYS the CA certificate
should last before it expires.
[default: 5 years (1825 days)]: (type the number of days)1825
Enter PEM pass phrase: (nhập mật khẩu chứng thực)
Verifying - Enter PEM pass phrase: (nhập mật khẩu chứng thực)
(Bỏ qua thông tin)
setup-ssl-utils: Complete
b- Thiết lập bảo mật cho các nốt mạng
Sau khi cài đặt simpleCA, một gói tin được tạo ra để cấu hình bảo mật cho các
nốt mạng khác. Sao các gói tin này vào mỗi nốt mạng.
• Vào tài khoản globus trên các máy Host A và Host B, sao chép gói tin tại máy CA.
[globus@hosta]$ scp globus@ca:/home/globus/.globus/simpleCA \
/globus_simple_ca_(ca_hash)_setup-0.18.tar.gz .
[globus@hosta]$ $GLOBUS_LOCATION/sbin/gpt-build \
globus_simple_ca_(ca_hash)_setup-0.18.tar.gz gcc32dbg
[globus@hosta]$ $GLOBUS_LOCATION/sbin/gpt-postinstall
• Vào tài khoản root, cấu hình CA cho mỗi nốt mạng. Sau khi cấu hình, thư mục
/etc/grid-security được tạo ra
[root@hosta]# $GLOBUS_LOCATION/setup\
8
/globus_simple_ca_[ca_hash]_setup/setup-gsi -default
c- Đăng ký và xác nhận chứng thực host
Mỗi host khi tham gia mạng grid đều phải đăng ký chứng thực và được CA
xác nhận chứng thực. Ví dụ để đăng ký chứng thực cho Host A
• Vào tài khoản root, yêu cầu đăng ký chức thực với tên host là hosta
[root@hosta]# grid-cert-request -host hosta
Để xác nhận chứng thực
• Chép tệp /etc/grid-security/hostcert_request.pem được tạo ra khi đang ký chứng
thực tại Host A vào máy CA.
• Trong máy Host A, vào tài khoản globus, xác nhận chứng thực bằng lệnh: grid-ca-

sign
[globus@ca]$ grid-ca-sign -in hostcert_request.pem -out hostcert.pem
To sign the request
please enter the password for the CA key: (nhập mật khẩu chứng thực)
The new signed certificate is at:
/home/globus/.globus/simpleCA//newcerts/01.pem
• Chép đè tệp hostcert.pem đè lên tệp có sẵn trong thư mục /etc/grid-security tại Host
A
d- Đăng ký và xác nhận chứng thực người dùng
Tương tự như host, mỗi người dùng khi tham gia vào mạng Grid đều phải
đăng ký chứng thực và được xác nhận chứng thực người dùng. Ví dụ để đăng ký và
xác nhận chứng thực với người dùng auser1 tại Host A
Để đăng ký chứng thực:
[auser1@hosta]$ grid-cert-request
Enter your name, e.g., John Smith: grid user 1
A certificate request and private key is being created.
You will be asked to enter a PEM pass phrase.
This pass phrase is akin to your account password,and is used to protect your
9
key file.
If you forget your pass phrase, you will need to obtain a new certificate.
Generating a 1024 bit RSA private key
++++++
++++++
writing new private key to '/home/auser1/.globus/userkey.pem'
Enter PEM pass phrase: (nhập mật khẩu chứng thực)
Verifying - Enter PEM pass phrase: (nhập lại mật khẩu chứng thực)

Để xác nhận chứng thực người dùng
• Chép tệp /home/auser1/.globus/usercert_request.pem từ máy Host A sang máy CA.

• Tại máy CA, vào tài khoản globus, xác nhận chứng thực bằng cách dùng lệnh grid-
ca-sign
[globus@ca]$ grid-ca-sign -in usercert_request.pem -out usercert.pem
To sign the request
please enter the password for the CA key:
The new signed certificate is at:
/home/globus/.globus/simpleCA//newcerts/02.pem
Chép tệp usercert.pem đè lên tệp đã có sẵn tại thư mục /home/auser1/.globus/
ở Host A.
• Để kiểm tra người dùng đã được chứng thực, vào tài khoản auser1 và dùng lệnh:
grid-proxy-init -debug -verify
[auser1@hosta]$ grid-proxy-init -debug -verify
User Cert File: /home/auser1/.globus/usercert.pem
User Key File: /home/auser1/.globus/userkey.pem
Trusted CA Cert Dir: /etc/grid-security/certificates
Output File: /tmp/x509up_u511
10
Your identity:
/O=Grid/OU=GlobusTest/OU=simpleCA-
ca.gridk47.com/OU=gridk47.com/CN=grid
user 1
Enter GRID pass phrase for this identity:
Creating proxy ++++++++++++
++++++++++++
Done
Proxy Verify OK.
e- Ánh xạ người dùng local với người dùng grid
Globus Toolkit 4.0 yêu cầu ánh xạ giữa người dùng được xác thực grid với
người dùng local.
• Để lấy tên người dùng được xác thực grid, dùng lệnh grid-cert-request.

[auser1@hosta]$ grid-cert-info -subject -f /home/auser1/.globus/usercert.pem
/O=Grid/OU=GlobusTest/OU=simpleCA-
ca.gridk47.com/OU=gridk47.com/CN=grid user 1
• Vào tài khoản root, ánh xạ tên người dùng này với tên người dùng local, dùng lệnh:
grid-mapfile-add-entry
[root@hosta]# grid-mapfile-add-entry -dn \
"/O=Grid/OU=GlobusTest/OU=simpleCA-
ca.gridk47.com/OU=gridk47.com/CN=grid user 1" -ln auser1
Modifying /etc/grid-security/grid-mapfile
/etc/grid-security/grid-mapfile does not exist Attempting to create
/etc/grid-security/grid-mapfile
New entry:
"/O=Grid/OU=GlobusTest/OU=simpleCA-
ca.gridk47.com/OU=gridk47.com/CN=grid user 1" auser1
(1) entry added
11
• Để xem thông tin người dùng được ánh xạ, mở tệp /etc/grid-security/grid-mapfile
"/O=Grid/OU=GlobusTest/OU=simpleCA-
ca.gridk47.com/OU=gridk47.com/CN=grid user 1" auser1
• Để kiểm tra tệp ánh xạ, dùng lệnh: grid-mapfile-check-consistency
[root@hosta]# grid-mapfile-check-consistency
1.4.3. Cấu hình Java WS Core
Để kiểm tra Java WS Core đã được cài đặt thành công, thực hiện như sau:
• Vào tài khoản globus, thực hiện lệnh:
globus-start-container
hoặc
globus-start-container –nosec
nếu chạy ở chế độ không bảo mật.
• Sau khi tiến trình hoàn thành, xuất hiện thông điệp như sau:


Starting SOAP server at: http://192.168.1.103:8080/wsrf/services/With the
following services:
[1]: http://192.168.1.103:8080/wsrf/services/TriggerFactoryService
[2]: http://192.168.1.103:8080/wsrf/services/DelegationTestService
(Bỏ qua thông tin)
[51]: http://192.168.1.103:8080/wsrf/services/ManagedJobFactoryService

1.4.4. Cấu hình và kiểm tra GridFTP
Phần này mô tả việc cài đặt và thử nghiệm với GridFTP
a- Cài đặt GridFTP
• Để cài đặt GridFTP, gán dịch vụ GridFTP với tên gsiftp và cổng TCP là 2811 bằng
cách mở tệp /etc/services và thêm dòng:
gsiftp 2811/tcp # GridFTP
12
• Tạo tệp /etc/xinetd.d/gsiftp với nội dung sau:
service gsiftp
{
instances = 100
socket_type = stream
wait = no
user = root
env += GLOBUS_LOCATION=/usr/local/globus-4.0.0
env += LD_LIBRARY_PATH=/usr/local/globus-4.0.0/lib
server = /usr/local/globus-4.0.0/sbin/globus-gridftp-server
server_args = -i
log_on_success += DURATION
nice = 10
disable = no
}
• Khởi động lại xinetd daemon:

[root@hosta]# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
b- Thử nghiệm GridFTP
Tiến hành các bước thử nghiệp GridFTP
• Vào tài khoản người dùng đã được chứng thực quyền hạn bởi máy CA. Ví dụ:
auser1
• Dùng lệnh: grid-proxy-init để khởi tạo proxy
• Dùng lệnh globus-url-copy <URL nguồn> <URL đích> để kiểm tra hoạt động của
GridFTP
13
1.5. Gỡ bỏ Globus Toolkit 4.0
Phần này hướng dẫn gỡ bỏ bộ công cụ Globus Toolkit 4.0. Để thực hiện gỡ
bỏ, thực hiện các bước sau:
• Đóng WS Core nếu đang chạy
• Vào tài khoản root, xoá các thư mục chứa globus tookit, grid security và apache ant.
[root@hosta]# rm -rf /usr/local/globus-4.0.0/
[root@hosta]# rm -rf /etc/grid-security/
[root@hosta]# rm -rf /usr/apache-ant-1.6.3/
• Xóa các biến môi trường đã khởi tạo trong tệp /etc/profile
• Xóa dịch vụ GridFTP bằng cách xóa dòng: gsiftp 2811/tcp trong tệp: /etc/services
• Xóa GridFTP daemon bằng việc thực hiện lệnh:
[root@hosta]# rm /etc/xinetd.d/gsiftp
[root@hosta]# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
• Xóa tài khoản người dùng globus
• Xóa Java SDK
14
Chương 2.Các bước lập trình một chương trình Grid

Chương này, chúng tôi sẽ lấy một chương trình có sẵn, rất đơn giản, đó là
chương trình Math Service, để mô tả các bước lập trình một dịch vụ Grid trên Grid
Computing. Chương trình được viết trên nền ngôn ngữ Java.
2.1. Giới thiệu sơ lược về chương trình Math Service
Math Service là một dịch vụ Web đơn giản có trạng thái, sử dụng WSRF để
lưu trữ các trạng thái thông tin. Nó cho phép người dùng thực hiện các phép toán:
• Cộng
• Trừ
Do đó, Math Service sẽ có các thuộc tính tài nguyên (resource properties, viết
tắt là RPs):
• Giá trị (integer)
• Phép toán cuối (string)
Ta cũng thêm một phép toán "Get Value" để truy cập vào giá trị RP. Logic của
Math Service rất đơn giản. Khi một tài nguyên mới được tạo ra, mọi "giá trị" RP đều
được khởi tạo bằng 0, và "phép toán cuối" RP được khởi tạo là "NONE". Các phép
toán cộng và trừ chỉ cần một tham số nguyên. Tham số này được cộng/trừ với "giá trị"
RP, và theo đó "phép toán cuối" RP được thay đổi bằng "ADDITION" hoặc
"SUBTRACTION". Ngoài ra, các phép toán cộng/ trừ không trả lại giá trị.
2.2. Các bước lập trình chương trình Math Service
Đối với chương trình Math Service nói riêng và một chương trình dịch vụ
Grid nói chung, nhìn chung có 5 bước lập trình. Các bước gồm có:
• Định nghĩa giao diện dịch vụ. Sử dụng WSDL
• Thực thi dịch vụ. Sử dụng Java
• Định nghĩa các tham số của việc triển khai. Sử dụng WSDD và JNDI
• Biên dịch và tạo tệp GAR. Sử dụng Ant
• Triển khai dịch vụ. Sử dụng GT4
15
Trong phần này, chung tôi sẽ lần lượt mô tả các bước nêu trên
2.2.1. Bước 1: Định nghĩa giao diện dịch vụ
Bước đầu tiên để viết một dịch vụ Grid là định nghĩa giao diện dịch vụ. Một

dịch vụ Grid có nhiều người dùng tương tác. Mỗi người dùng tương tác với dịch vụ
bằng cách gửi yêu cầu. Dịch vụ tiếp nhận yêu cầu người dùng, xử lý yêu cầu và trả lại
đáp ứng yêu cầu của người dùng đó. Giao diện dịch vụ để xác định những chức năng
mà dịch vụ có thể cung cấp cho người dùng. Trong chương trình Math Service, giao
diện dịch vụ là những phép toán mà người dùng có thể yêu cầu đến dịch vụ. Theo mô
tả bài toán ở trên, giao diện dịch vụ của chương trình Math Service gồm 3 phép toán:
cộng, trừ và lấy giá trị. Giao diện dịch vụ còn gọi là port type (được viết là portType).
Một giao diện dịch vụ Web cũng như dịch vụ Grid được viết trong tệp dưới dạng
.wsdl. Đây là tệp mô tả giao diện dịch vụ Web/Grid. Có 2 cách để viết tệp mô tả này:
Cách 1: Định nghĩa giao diện bằng tệp Java, sau đó chuyển đổi tệp Java sang tệp wsdl.
Giao diện dịch vụ Math Service viết bằng Java như sau:
public interface Math
{
public void add(int a);
public void subtract(int a);
public int getValueRP();
}
Cách 2: Viết trực tiếp một tệp wsdl. Tệp mô tả giao diện wsdl có các thành phần sau:
• Phần HEADER: Đầy là phần định nghĩa tên, đường dẫn và namespace của dịch vụ
• Phần TYPES: Phần này định nghĩa các biến, kiểu biến và các thuộc tính tài nguyên.
• Phần MESSAGES: Là phần định nghĩa các thông điệp mà người dùng và dịch vụ
tương tác với nhau
• Phần PORTTYPE: Là phần định nghĩa các phép toán mà người dùng và dịch vụ
tương tác với nhau.
Tệp định nghĩa giao diện của chương trình Math Service đầy đủ như sau:
16
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="MathService"
targetNamespace=" />xmlns:tns=" />xmlns:wsdl=" />xmlns:wsrp=" />xmlns:wsrpw=" />xmlns:wsdlpp=" />xmlns:xsd=" /><wsdl:import namespace="
location=" / /wsrf/properties/WS-ResourceProperties.wsdl" />

<!—
T Y P E S
>
<types>
<xsd:schema
targetNamespace=" />xmlns:tns= />xmlns:xsd=" /><! REQUESTS AND RESPONSES >
<xsd:element name="add" type="xsd:int"/>
<xsd:element name="addResponse">
<xsd:complexType/>
</xsd:element>
<xsd:element name="subtract" type="xsd:int"/>
<xsd:element name="subtractResponse">
<xsd:complexType/>
</xsd:element>
<xsd:element name="getValueRP">
<xsd:complexType/>
</xsd:element>
<xsd:element name="getValueRPResponse" type="xsd:int"/>
<! RESOURCE PROPERTIES >
17
<xsd:element name="Value" type="xsd:int"/>
<xsd:element name="LastOp" type="xsd:string"/>
<xsd:element name="MathResourceProperties">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:Value" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="tns:LastOp" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

</xsd:schema>
</types>
<!—
M E S S A G E S
>
<message name="AddInputMessage">
<part name="parameters" element="tns:add"/>
</message>
<message name="AddOutputMessage">
<part name="parameters" element="tns:addResponse"/>
</message>
<message name="SubtractInputMessage">
<part name="parameters" element="tns:subtract"/>
</message>
<message name="SubtractOutputMessage">
<part name="parameters" element="tns:subtractResponse"/>
</message>
<message name="GetValueRPInputMessage">
<part name="parameters" element="tns:getValueRP"/>
</message>
<message name="GetValueRPOutputMessage">
<part name="parameters" element="tns:getValueRPResponse"/>
</message>
18
<!—
P O R T T Y P E
>
<portType name="MathPortType"
wsdlpp:extends="wsrpw:GetResourceProperty"
wsrp:ResourceProperties="tns:MathResourceProperties">

<operation name="add">
<input message="tns:AddInputMessage"/>
<output message="tns:AddOutputMessage"/>
</operation>
<operation name="subtract">
<input message="tns:SubtractInputMessage"/>
<output message="tns:SubtractOutputMessage"/>
</operation>
<operation name="getValueRP">
<input message="tns:GetValueRPInputMessage"/>
<output message="tns:GetValueRPOutputMessage"/>
</operation>
</portType>
</definitions>
2.2.2. Bước 2: Thực thi dịch vụ.
Trong khi bước định nghĩa giao diện cho biết dịch vụ làm những cài gì? thì ở
bước này – thực thi dịch vụ cho biết dịch vụ làm như thế nào? Sau đây là các thành
phần của bước thực thi dịch vụ
a- Thành phần Qnames
Trong dịch vụ Grid, QName là một tên bao gồm tên của namespace và tên
local. Ví dụ QName của Value RP là:
{ />ue
Sử dụng lớp MathQNames để định nghĩa rút gọn QName.
19
package org.globus.examples.services.core.first.impl;
import javax.xml.namespace.QName;
public interface MathQNames {
public static final String NS = "
examples/core/MathService_instance";
public static final QName RP_VALUE = new QName(NS, "Value");

public static final QName RP_LASTOP = new QName(NS, "LastOp");
public static final QName RESOURCE_PROPERTIES = new
QName(NS,"MathResourceProperties");
}
b- Thực thi dịch vụ
Lớp MathService để thực thi dịch vụ:
public class MathService implements Resource, ResourceProperties{
}
MathService thực thi 2 giao diện là Resource (mô tả tài nguyên dịch vụ Grid)
và ResourceProperties (mô tả các thuộc tính tài nguyên dịch vụ Grid).
Tài nguyên dịch vụ gồm 2 thành phần: Value: kiểu xsd:int và LastOp: kiểu
xsd:string.
/* Resource properties */
private int value;
private String lastOp;
Các phép toán: lấy giá trị và đặt giá trị được thực thi như sau:
/* Get/Setters for the RPs */
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getLastOp() {
return lastOp;
}
20
public void setLastOp(String lastOp) {
this.lastOp = lastOp;
}

Các giá trị thuộc tính của tài nguyên dược khởi tạo trong constructor của lớp
MathService:
/* Constructor. Initializes RPs */
public MathService() throws RemoteException {
this.propSet = new SimpleResourcePropertySet(
MathQNames.RESOURCE_PROPERTIES);
try { /* Initialize the RP's */
ResourceProperty valueRP = new ReflectionResourceProperty(
MathQNames.RP_VALUE, "Value", this);
this.propSet.add(valueRP);
setValue(0);
ResourceProperty lastOpRP = new ReflectionResourceProperty(
MathQNames.RP_LASTOP, "LastOp", this);
this.propSet.add(lastOpRP);
setLastOp("NONE");
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
Hàm add() và getValueRP() thực thi các phép toán cộng và lấy giá trị:
public AddResponse add(int a) throws RemoteException {
value += a;
lastOp = "ADDITION";
return new AddResponse();
}
21
public int getValueRP(GetValueRP params) throws RemoteException {
return value;
}
2.2.3. Bước 3: Định nghĩa việc triển khai dịch vụ.

Hai bước quan trọng để lập trình một dịch vụ Grid đã được tiến hành bao gồm
định nghĩa và thực thi dịch vụ. Vậy làm thế nào để các Client có thể kết nối với dịch
vụ này? Bước 3 sẽ thực hiện công việc đó. Định nghĩa việc triển khai dịch vụ nói cho
Grid container (là thành phần chứa các dịch vụ Grid, có trong bộ công cụ Globus
Toolkit 4.0) biết được làm thế nào để quảng bá dịch vụ Math Service này. Chẳng hạn
như nói cho Grid container biết được địa chỉ URI của dịch vụ. Tệp định nghĩa việc
triển khai như sau:
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultServerConfig"
xmlns="
xmlns:java="
xmlns:xsd=" /><service name="examples/core/first/MathService" provider="Handler" use="literal"
style="document">
<parameter name="className"
value="org.globus.examples.services.core.first.impl.MathService"/>
<wsdlFile>share/schema/examples/MathService_instance/Math_service.wsdl</wsdlFile>
<parameter name="allowedMethods" value="*"/>
<parameter name="handlerClass" value="org.globus.axis.providers.RPCProvider"/>
<parameter name="scope" value="Application"/>
<parameter name="providers" value="GetRPProvider"/>
<parameter name="loadOnStartup" value="true"/>
</service>
</deployment>
Các thành phần được định nghĩa bao gồm:
• service name: xác định địa chỉ URI của dịch vụ trong Grid container. Ở đây là:
http://localhost:8080/wsrf/services/examples/core/first/MathService
22
• className: xác định lớp thực thi giao diện dịch vụ
• tệp WSDL: xác định tệp định nghĩa giao diện dịch vụ wsdl
• Load on startup: cho phép dịch vụ được nạp khi khởi động Grid container

2.2.4. Bước 4: Biên dịch và tạo tệp GAR
Ở các bước trên, mỗi khi hoàn thành mỗi bước lại tạo ra mỗi loại thành phần
riêng rẽ. Vậy làm thế nào để triển khai được các thành phần đó vào trong Grid
container cũng như biên dịch các tệp thực thi Java. Bước này sẽ thực hiện việc tạo tệp
nén GAR chứa các thành phần trên. Chức năng của tệp GAR:
• Liên kết các tệp wsdl
• Khởi tạo và biên dịch các lớp từ các thành phần trong tệp wsdl
• Biên dịch các tệp thực thi Java
• Tổ chức các tệp lại với nhau trong một cấu trúc đường dẫn xác định.
Công cụ Ant (có trong phần mềm Apache Ant đã cài đặt) có chức năng biên dịch và
tạo tệp GAR từ các thành phần ở trên. Mô hình sau đây mô tả chức năng đó của Ant.
23
Hình 24: Chức năng tạo tệp GAR của công cụ Ant
Để tạo tệp GAR, ta dùng script globus-build-service có trong bộ Globus
Service Build Tools (GSBT) tại . Cấu trúc dòng lệnh để tạo
tệp GAR như sau:
./globus-build-service.sh -d <đường dẫn tới dịch vụ> -s <tệp WSDL của dịch vụ>
Đối với Math Service, dòng lệnh như sau:
./globus-build-service.sh \
-d org/globus/examples/services/core/first/ \
-s schema/examples/MathService_instance/Math.wsdl
2.2.5. Bước 5: Triển khai dịch vụ
Đây là bước để triển khai dịch vụ trong Grid container. Việc triển khai dịch vụ
vào trong Grid container tương đương với việc bung tệp nén GAR được tạo ra ở bước
4 và đưa các thành phần thích hợp vào Grid container. Thực hiện dòng lệnh sau:
globus-deploy-gar $EXAMPLES_DIR/org_globus_examples_services_core_first.gar
24
Để xóa bỏ dịch vụ trong Grid container, dùng lệnh globus-undeploy-gar:
globus-undeploy-gar org_globus_examples_services_core_first
2.3. Chạy thử chương trình Math Service

Sau khi đã triển khai dịch vụ Math Service vào Grid container, khởi động Grid
container bằng lệnh: globus-start-container, dịch vụ sẽ bắt đầu hoạt động. Nhận biết
dịch vụ đã hoạt động bằng địa chỉ URI của dịch vụ:
http://127.0.0.1:8080/wsrf/services/examples/core/first/MathService
Để kiểm tra hoạt động của dịch vụ, ta viết một Client đơn giản, gửi yêu cầu
đến dịch vụ Math Service thực hiện các phép toán: cộng, trừ và lấy giá trị. Lớp Client
được viết như sau:
public class Client {
public static void main(String[] args) {
MathServiceAddressingLocator locator = new MathServiceAddressingLocator();
try {
String serviceURI=args[0];
EndpointReferenceType endpoint = new EndpointReferenceType();
endpoint.setAddress(new Address(serviceURI));
MathPortType math = locator.getMathPortTypePort(endpoint);
math.add(10); // Perform an addition
math.add(5); // Perform another addition
// Access value
System.out.println("Current value:" + math.getValue(new GetValueRP()));
// Perform a subtraction
math.subtract(5);
// Access value
System.out.println("Current value:" + math.getValue(new GetValueRP()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Các đối tượng chính:
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×