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

Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

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 (506.28 KB, 61 trang )

Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

LỜI CẢM ƠN
“Cơm cha áo mẹ chữ thầy”, câu nói từ xưa đã thấm nhuần vào tâm tư tình cảm của
mỗi người Việt Nam, mà tôi đã được học ngay từ thuở bé. Hôm nay, được vinh dự hoàn
thành một đề tài tốt nghiệp, tôi vui sướng nhường nào!. Lúc này tôi lại càng trân trọng câu
nói ấy hơn bao giờ hết.
Đúng vậy, nếu không có cha mẹ, không có thầy cô chắc chắn tôi sẽ không có được
ngày hôm nay.
Trước tiên con xin thành kính cảm ơn cha mẹ, cha mẹ đã cho con tất cả để vững
bước trên đường đời.
Tôi xin chân thành cảm ơn các thầy cô đã giúp đỡ, truyền đạt cho tôi những kiến
thức quí báu trong suốt quá trình học tập tại trường.
Tôi xin chân thành cảm ơn thầy, đã tận tình chỉ bảo, cho tôi nhiều ý kiến quí giá để
tôi có thể hoàn thành tốt đồ án tốt nghiệp này.
Cuối cùng, tôi xin cảm ơn tất cả mọi người, đã ủng hộ, giúp đỡ tôi trong thời gian qua.
Đà Nẵng 20/5/2003.

Trang 1


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Lời Cam Đoan.
Tôi xin cam đoan những điều dưới đây là sự thật, và sẽ chịu mọi trách nhiệm nếu
không đúng sự thật :
1-

Đồ án được hoàn thành trên cơ sở kiến thức học được của bản thân, những
ý kiến định hướng của thầy hướng dẫn Nguyễn Tấn Khôi và sự nghiên cứu,
lao động của tôi. Không có sự sao chép, lắp ráp từ những dự án khác.



2-

Những vấn đề lý thuyết tham khảo, trong tất cả các tài liệu đã nêu ra trong
phần tài liệu tham khảo. Những lý thuyết này là đúng, đã được triển khai
ứng dụng và kiểm tra trong thực tế.

3-

Những vấn đề kỹ thuật giải quyết vấn đề trong đề tài đã được kiểm tra,
chạy được như đã trình bày trong đồ án.

4-

Đảm bảo chương trình chạy đúng, và chịu trách nhiệm về toàn bộ những gì
đã trình bày.

Đà Nẵng 20/5/2003.

Trang 2


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

MỤC LỤC
Chương 1 TỔNG QUAN VỀ ĐỀ TÀI...........................................................7
1. GIỚI THIỆU ĐỀ TÀI..................................................................................7
2. HƯỚNG NGHIÊN CỨU.............................................................................7
Chương 2 CƠ SỞ LÝ THUYẾT...................................................................9
1. LẬP TRÌNH MẠNG VỚI JAVA................................................................9

1.1. Liên lạc trên internet.............................................................................9
1.2. Dịch vụ từ phía máy chủ và khái niệm cổng.......................................9
1.3. Mô hình khách chủ và khái niệm Socket.............................................9
1.4. Các lớp cần thiết trong lập trình mạng với Java................................10
1.5. Giới thiệu webserver và giao thức http..............................................10
2. MÔ HÌNH PHÂN TÁN ĐỐI TƯỢNG RMI............................................10
2.1. Tìm hiểu cơ chế hoạt động của ứng dụng JavaRMI........................12
2.2. Các vấn đề cần chú ý trong JavaRMI................................................12
2.3. Tìm hiểu tầng _Stub và _Skel..........................................................13
.....................................................................13
2.4. Tìm hiểu bộ đăng ký Rmiregistry và các hàm đăng kí.....................14
3. KỸ THUẬT LẬP TRÌNH PHÂN TÁN JAVARMI...............................15
3.1. Tổng quan một ứng dụng JavaRMI...................................................15
3.2. Trình tự xây dựng ứng dụng JavaRMI...............................................15
3.3. Các cách đăng ký đối tượng với rmiregistry.....................................17
3.4. Truyền tham số khi gọi phương thức từ xa................................17
3.5. Các kỹ thuật gọi đối tượng ở xa trong JavaRMI....................20
3.6. Vấn đề bảo mật và kĩ thuật xuyên hầm trong JavaRMI................24
Chương 3 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG..............................26

Trang 3


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

1. PHÂN TÍCH HỆ THỐNG THÔNG TIN................................................26
.......................................................................................................................29
2. THIẾT KẾ VÀ TỔ CHỨC CƠ SỞ DỮ LIỆU..........................................30
Chương 4 XÂY DỰNG CHƯƠNG TRÌNH...............................................32
1. PHÂN TÍCH YÊU CẦU & KHÁI QUÁT MÔ HÌNH.............................32

2. THIẾT KẾ CHƯƠNG TRÌNH..................................................................34
2.1. Module RootServer...........................................................................34
2.2. Module ClientAgent.........................................................................39
2.3. Module Client.....................................................................................42
3. XÂY DỰNG DỊCH VỤ ĐỂ TRIỂN KHAI TRÊN HỆ THỐNG...........44
3.1. Các yêu cầu chung..........................................................................44
3.2. Kĩ thuật...............................................................................................44
4. KẾT QUẢ CHƯƠNG TRÌNH..................................................................49
4.1 Chương trình Server............................................................................49
4.2. Chương trình Agent............................................................................50
4.3 Chương trình Client.............................................................................51
4.4. Service................................................................................................52
Chương 5 ĐÁNH GIÁ KẾT QUẢ..............................................................53
1. KẾT QUẢ ĐẠT ĐƯỢC ...........................................................................53
2. NHẬN XÉT...............................................................................................53
3. HƯỚNG PHÁT TRIỂN...........................................................................53
4. KẾT LUẬN .........................................................................................54
Chương 6 Phụ Lục........................................................................................55

Trang 4


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

DANH MỤC CÁC HÌNH VẼ & BẢNG BIỂU.
H1. Sự độc lập giữa khai báo và thực thi hành vi.
H2. Các lớp sử dụng giao tiếp trong JavaRMI
H3. Kiến trúc JavaRMI.
H4. Hoạt động của ứng dụng JavaRMI
H5. Mô hình ủy nhiệm (proxy pattern).

H6. Vai trò _stub và _skel
H7. Cơ chế đăng kí & truy tìm dịch vụ JavaRMI.
H8. Hoạt động của hệ thống callback.
H9. Kỹ thuật trình nạp mồi từ xa.
H10. JavaRMI bị chặn
H11. Cơ chế xuyên hầm.
H12. Biểu đồ trường hợp sử dụng (UC) của hệ thồng
H13. Biểu đồ trình tự.
H14. Biểu đồ cộng tác của hệ thống.
H15. Biểu đồ lớp .
H16. Biểu đồ hoạt động (Sơ đồ khối của hệ thống).
H17. Sơ đồ hoạt động của hệ thống.
B1. Các lớp trong lập trình mạng
B2. So sánh đối tượng cục bộ & từ xa.
B3. Bảng dữ liệu Agent
B4. Bảng dữ liệu Service
B5. Bảng dữ liệu Client.

Trang 5


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Lời Mở Đầu
Sự phát triển của khoa học kỹ thuật, Công nghệ thông tin ngày càng đặt ra nhiều vấn
đề cần giải quyết. Trong đó vấn đề thời gian và hiệu quả sử dụng các tài nguyên trong
mạng để đáp ứng các yêu cầu của con người là rất quan trọng. Chúng ta phải tìm cách khai
thác tối đa khả năng của tài nguyên trong mạng, sao cho đáp ứng tốt nhất về nhu cầu
thông tin của con người. Như chúng ta đã biết, nhu cầu thông tin là vô hạn, nó đa dạng về
lĩnh vực phong phú về lượng, tuy nhiên tài nguyên lại rất hạn chế và không thể đáp ứng tốt

mọi yêu cầu của con người. Một môi trường tài nguyên cụ thể chỉ có thể đáp ứng tốt trong
một vài lĩnh vực thông tin nhất định. Như vậy, vấn đề làm thế nào để trên cùng một nền tài
nguyên như thế ta có thể nâng cao khả năng phục vụ cho nhiều đối tượng.
Mặc khác, trong thực tế có không ít những bài toán yêu cầu một khối lượng tính toán
rất lớn, cũng có những ứng dụng bắt buộc triển khai trên mạng và dữ liệu xử lí của nó
không tập trung mà phân tán trên các tài nguyên trong mạng.
Ngày nay, lập trình và ứng dụng phân tán đã có những bước tiến đáng kể. Mục tiêu
của nó là tận dụng tài nguyên, chia sẻ tài nguyên nhằm đáp ứng tốt hơn nhu cầu thông tin
của con người trên cơ sở nguồn tài nguyên cố định.
Với những phân tích như trên ta thấy vấn đề cập nhật, tải các dịch vụ động trong
mạng là rất quan trọng. Ý tưởng của vấn đề là trong một mạng tất cả các dịch vụ được đặt
tập trung tại một máy chuyên trách nào đó, khi có nhu cầu người sử dụng sẽ tải các dịch vụ
này về máy cục bộ để sử dụng. Khi kết thúc dịch vụ thì tất cả các tài nguyên được giải
phóng, bỡi vì dịch vụ không được lưu cố định trên đĩa của máy cục bộ. Như vậy, việc tải
các dịch vụ động đem lại các lợi ích sau:
- Cho phép tiết kiệm, chia sẻ được tài nguyên trong mạng.
- Nâng cao tính đa dạng, phong phú và phân tán của dịch vụ.
- Quản lý dịch vụ sẽ tập trung hơn, khi có thay đổi về dịch vụ sẽ tiết kiệm công
sức, chi phí xử lý.
- Dịch vụ có tính cập nhật, tương thích cao.
Với những kiến thức đã học được và sự định hướng của thầy hướng dẫn, tôi đã chọn
đề tài “Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán” nhằm giải quyết
những vấn đề đã phân tích ở trên.
Qua thời gian thực hiện đề tài tôi đã thu được những kết quả nhất định, tuy nhiên
chắc còn nhiều thiếu sót. Rất mong những ý kiến đóng góp quí giá của thầy cô, của các bạn
để đề tài được hoàn thiện và có thể triển khai ứng dụng trong thực tế.

Trang 6



Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Chương 1

TỔNG QUAN VỀ ĐỀ TÀI

1. GIỚI THIỆU ĐỀ TÀI
“Tính toán phân tán” có nghĩa là việc tính toán không tập trung trên một máy
mà phải phân tán ở nhiều máy trên mạng, nhằm nâng cao tốc độ tính toán, tận dụng
tốt các tài nguyên trên mạng. Như vậy, nhiệm vụ của đề tài nhằm tìm hiểu các công
nghệ hỗ trợ lập trình mạng, hỗ trợ triển khai các ứng dụng phân tán và bước đầu
thiết kế một hệ thống có thể hỗ trợ các tính toán phân tán ở một mức độ nào đó.
Trên tinh thần đó và trong quá trình thực hiện đồ án tốt nghiệp, tôi tiến hành
tìm hiểu và thiết kế một hệ thống đơn giản, trên đó ta có thể triển khai các dịch vụ
tính toán, các tính toán đó được phân phối tới các máy trong mạng để thực hiện sao
cho đạt hiệu quả tốt trong tính toán cũng như việc sử dụng tài nguyên trong mạng.
Hệ thống được triển khai trên mạng và được triển khai những dịch vụ trên nó,
khi hệ thống tiếp nhận yêu cầu tính toán căn cứ vào dịch vụ, tình trạng của hệ thống
mạng hiện tại, hệ thống sẽ phân phối công việc cho các máy chức năng và đóng vai
trò trung gian nhận gởi các yêu cầu cũng như kết quả. Mọi tác động đến hệ thống
đều thực hiện tập trung tại một máy, các máy trong mạng tự động cập nhật lại
hệ thống.
Vấn đề nảy sinh ở đây là, làm thế nào để đặt toàn bộ một ứng dụng hoàn chỉnh
trên một máy. Sau đó phân phối các thành phần của ứng dụng đến các máy khác và
gọi thực thi các phần đó ngay tại các máy được phân phối rồi nhận kết quả trả về,
nghĩa là phải triệu gọi các module chương trình thực thi tại một máy ở xa trong
mạng.
2. HƯỚNG NGHIÊN CỨU
Từ khái quát của đề tài ta thấy, đây là một ứng dụng để triển khai trên mạng
máy tính. Đòi hỏi những kỹ thuật lập trình trên môi trường mạng, ứng dụng phải

gọn, tính toán nhanh, đặc biệt là yêu cầu tương thích với một mạng hỗn tạp nhiều
nền tảng phần cứng và hệ điều hành khác nhau.
Ngày nay có nhiều công cụ sử dụng trong lập trình mạng. Tuy nhiên căn cứ
chức năng và yêu cầu của hệ thống cần xây dựng, thì ngôn ngữ JAVA và các công
nghệ của nó là tốt hơn cả. Đặc biệt ngay từ phiên bản 1.1 của bộ JDK hãng Sun đã
đưa ra một công nghệ mới gọi là triệu gọi phương thức từ xa- Remote Method
Trang 7


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

invocation (JavaRMI). Đúng như tên gọi của nó, công nghệ này cho phép xây dựng
các ứng dụng có thể gọi các phương thức trên một máy khác. Và đây cũng chính là
chìa khóa để xây dựng hệ thống trong đề tài nêu ra. Do đó trong đề tài đã chọn
hướng nghiên cứu là kỹ thuật lập trình mạng với ngôn ngữ Java, công nghệ
JavaRMI. Công nghệ này được tìm hiểu và ứng dụng xuyên suốt trong đề tài và
cũng là “trái tim” của hệ thống.
Dựa trên kỹ thuật lập trình mạng với Java và công nghệ JavaRMI , ta xây
dựng một ứng dụng gồm ba thành phần chính để triển khai trên mạng, tương ứng
với các máy đóng vai trò là Client, Server và Agent. Trong đó, Client là máy khách
yêu cầu các dịch vụ; Server là máy chủ chịu trách nhiệm điều khiển cả hệ thống,
phân phối công việc và làm trung gian vận chuyển giữa máy khách và máy trạm
chức năng; Agent là các máy trạm chức năng, nó được phân phối công việc từ
Server và thực thi các công việc đó.
Tuy nhiên, để hệ thống có tính nhất quán thì hầu như toàn bộ hệ thống được
đặt trên Server, ở Client và Agent chỉ là một mẫu chương trình đơn giản có nhiệm
vụ kết nối Server để tải về các thành phần tương ứng trên Server.
Trong phần tiếp theo của đồ án trình bày về lý thuyết lập trình mạng với Java
và kỹ thuật lập trình phân tán với công nghệ JavaRMI.


Trang 8


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Chương 2

CƠ SỞ LÝ THUYẾT

1. LẬP TRÌNH MẠNG VỚI JAVA.
Ngôn ngữ lập trình Java được công ty Sun Microsystem đưa ra vào năm 1990.
Là ngôn ngữ lập trình mạnh mẽ, đặc biệt trong lĩnh vực phát triển các ứng dụng trên
mạng. Những đặc điểm của Java có thể mô tả ngắn gọn như sau: ”Java là ngôn ngữ
đơn giản, hướng đối tượng, phân tán, thông dịch, mạnh mẽ , bảo mật, cấu trúc
độc lập, khả chuyển, hiệu quả cao và linh động”.
1.1. Liên lạc trên internet.
Họ giao thức TCP/IP được xem là ngôn ngữ chung để các máy trên mạng có
thể “nói chuyện” với nhau. Đây là những quy ước chung và là giao thức cốt lõi của
giao tiếp trong mạng. Theo giao thức này, mỗi máy được đặt cho một tên riêng biệt
gọi là địa chỉ IP, địa chỉ IP là duy nhất. Các máy sẽ giao tiếp với nhau thông qua địa
chỉ IP này.
Có hai cách chuyển dữ liệu trên mạng theo giao thức TCP và UDP. Giao thức
TCP gởi từng gói dữ liệu đi, nơi nhận phải thông báo và kiểm tra xem dữ liệu đã
đến đủ hay chưa, lỗi hay không lỗi. Trước khi chuyển dữ liệu bao giờ cũng có sự
kết nối giữa máy gởi , máy nhận và duy trì một tuyến kết nối trong quá trình truyền.
Trái lại, giao thức UDP không có sự kết nối trước khi truyền, thông tin được đóng
gói gởi đi, mặc định bên nhận đang sẵn sàng và không có thông tin phản hồi từ
bên nhận.
1.2. Dịch vụ từ phía máy chủ và khái niệm cổng.
Khi kết nối vào máy chủ, ta có thể yêu cầu nhiều dịch vụ khác nhau; mỗi dịch

vụ đều có cách gởi nhận riêng. TCP và UDP chỉ truyền dữ liệu giữa các máy còn dữ
liệu truyền tới dịch vụ nào thì thông qua khái niệm cổng (port). Mỗi dịch vụ sử
dụng một cổng qui ước để trao đổi dữ liệu.
1.3. Mô hình khách chủ và khái niệm Socket.
Có nhiều dịch vụ được kiến trúc theo mô hình khách chủ-Client/Server.
Theo mô hình này chương trình ở máy khách gởi yêu cầu tới Server và chương trình
phía Server tiếp nhận, xử lý yêu cầu, sau đó gởi kết quả về Client. Quá trình kết nối
và gởi dữ liệu thực hiện thông qua một cơ chế trừu tượng gọi là Socket. Để tạo một
kết nối qua Socket cần biết hai yếu tố là địa chỉ IP và cổng dịch vụ port.

Trang 9


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

1.4. Các lớp cần thiết trong lập trình mạng với Java.
Lớp
InetAddress
Socket
ServerSocket
DatagramSocket
DatagramPacket
URL

Chức năng
dùng cho việc quản lý địa chỉ của máy theo tên và theo
số IP. Cung cấp các phương thức để chuyển đổi và truy xuất địa chỉ IP
dùng tạo cổng để kết nối từ phía máy khách với máy chủ.
dùng tạo cổng kết nối từ phía máy chủ với máy khách
dùng chuyển đi một gói dữ liệu theo giao thức UDP

dùng cho một gói chứa dữ liệu đi trên mạng theo UDP.
là địa chỉ định vị tài nguyên trên mạng

1.5. Giới thiệu webserver và giao thức http.
Trình chủ Webserver là chương trình chạy trên máy chủ, có chức năng tương
tác với trình khách, xử lí dữ liệu, tìm kiếm thông tin và gởi kết quả về trình khách
theo giao thức http.
Giao thức http cung cấp cách thức giao tiếp giữa trình khách (thường là
trình duyệt) và trình chủ Webserver. Qua đó trình khách có thể gởi yêu cầu và nhận
về kết quả từ Webserver.
2. MÔ HÌNH PHÂN TÁN ĐỐI TƯỢNG RMI.
Công nghệ JavaRMI(Remote Method invocation)-triệu gọi phương thức từ xa,
lần đầu tiên được đề cập trong phiên bản 1.1 của bộ JDK đã đưa lập trình mạng lên
một mức cao hơn. JavaRMI dễ sử dụng và là một công nghệ mạnh để phát triển các
ứng dụng phân tán. Muc tiêu của JavaRMI là cho phép xây dựng các chương trình
Java có tích chất phân tán có mã lệnh hoàn toàn tương tự với các chương trình
bình thường.
Ý tưởng tạo ra các đối tượng phân tán ở xa của JavaRMI được tích hợp vào
ngôn ngữ Java và mô hình đối tượng cục bộ tạo ra một hệ thống thừa kế tính
an toàn, mạnh mẽ của Java trong vấn đề xử lí phân tán.
So sánh đối tượng cục bộ và đối tượng ở xa.
Vấn đề
Định nghĩa
Thực thi
Khởi tao
Truy cập
Tham
chiếu

Đối tượng cục bộ

Bằng một lớp Java.

Đối tượng từ xa
Bằng giao tiếp interface được mở rộng từ
giao tiếp Remote.
Bằng lớp Java của nó.
Bằng những lớp trong giao tiếp.
Toán tử new
Không thể trực tiếp với new.
Trực tiếp qua biến đối Thông qua tầng trung gian là: stub và
tượng.
skelet.
Trực tiếp tại một đối Thông qua tầng trung gian là: stub và
tượng trong vùng heap. skelet

Trang 10


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Giao tiếp interafce.
Kiến trúc JavaRMI dựa trên nguyên lý cơ bản là: Việc định nghĩa các hành vi
và thực thi các hành vi đó là độc lập với nhau.
JavaRMI cho phép phần mã lệnh định nghĩa các hành vi và phần mã lệnh gọi
thực hiện các hành vi đó có thể đặt trên những máy khác nhau, tạo nên những hệ
thống phân tán trên mạng. Trong các hệ thống đó ở phía máy khách chỉ quan tâm
đến các khai báo hành vi của dịch vụ và máy chủ chịu trách nhiệm thực thi các hành
vi đó.
Giao tiếp interface là phần định nghĩa các hành vi trong JavaRMI còn phần
thực hiện các hành vi này được khai báo trong các lớp thực thi implementation .


H1.Sự độc lập giữa khai báo và thực thi hành vi.
Giao tiếp interface được sử dụng ở hai lớp phía client và server.

H2.Các lớp sử dụng giao tiếp trong JavaRMI.
Các tầng trong kiến trúc JavaRMI.
Kiến trúc JavaRMI được chia ra làm 3 tầng:
-

Tầng Stub và Skel: Là tầng thấp nhất trong kiến trúc JavaRMI, làm trung gian
cho sự giao tiếp giữa client và server.
Tầng tham chiếu từ xa- Remote Reference: Chịu trách nhiệm diễn dịch và quản
lý các tham chiếu từ xa, tầng này kết nối client với một đối tượng từ xa trên
server bằng đối tượng Remoteref.

Trang 11


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

-

Tầng giao vận Transport: Tạo ra kết nối vật lý giữa các máy trên mạng, chuyển
thông tin dựa trên giao thức TCP/IP.

H3.Kiến trúc JavaRMI.
2.1. Tìm hiểu cơ chế hoạt động của ứng dụng JavaRMI.
Một ứng dụng JavaRMI, được thiết kế thành hai phần: trên client và server.
Cho phép đặt nội dung của hàm hay đối tượng ở một máy và gọi thực hiện từ một
máy khác. Máy chứa mã lệnh và thực thi mã lệnh đó gọi là server còn máy thực

hiện gọi là client. Ở client chỉ cài đặt các khai báo của phương thức thông qua giao
tiếp interface mà không cài đặt chi tiết phần thân phương thức.
Sau khi xây dựng hoàn chỉnh một ứng dụng JavaRMI, ta tiến hành các thao tác
sau để kích hoạt ứng dụng đó:
-

Biên dịch các file java nguồn ra các file class.
Tạo các file trung gian sub và skel bằng trình rmic .
Đăng kí đối tượng trên server với bộ đăng ký rmiregistry.
Chạy chương trình trên client.

Chương trình client tham chiếu đến đối tượng đã đăng ký trên server thông
qua giao tiếp trên client và giao thức JavaRMI để gởi triệu gọi đến server, server
nhận lời triệu gọi đó và thực thi các phương thức rồi gởi kết quả về client. Tất cả
các công việc tiếp nhận, gởi yêu cầu hoặc kết quả giữa hai bên được thực hiện thông
qua các lớp trung gian là stub ở client và skel ở server.
Computer A
Computer A
interface
interface

request

RMI
result

Computer B
Computer B
implement
implement


H4.Hoạt động của ứng dụng JavaRMI.

2.2. Các vấn đề cần chú ý trong JavaRMI.
Các đối tượng trên các máy khác nhau hoạt động trên các tiến trình khác nhau
nên việc tham chiếu biến, địa chỉ đối tượng là hoàn toàn khác nhau.

Trang 12


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Tham số, kết quả phải truyền qua mạng nên phải có cơ chế quản lý chặt chẽ
dữ liệu giữa các tiến trình.
2.3. Tìm hiểu tầng _Stub và _Skel.
Đây là tầng thấp nhất trong kiến trúc JavaRMI, trong tầng này Java sử dụng
mô hình thiết kế ủy nhiệm. Trong mô hình này một đối tượng trong một
môi trường có thể được đại diện bỡi một đối tượng khác trong môi trường khác, gọi
là đối tượng ủy nhiệm. Đối tượng này biết cách lắng nghe các triệu gọi phương
thức giữa các đối tượng riêng biệt.

H5.Mô hình ủy nhiệm (proxy pattern).
Trong mô hình này lớp _stub đóng vai trò là proxy, còn lớp implement của
dịch vụ là RealSubject.
Lớp _skel là lớp đóng vai trò trợ giúp, nó được tạo ra để JavaRMI sử dụng.
Lớp _skel biết cách giao tiếp với lớp proxy _stub qua kết nối JavaRMI.
Hai lớp _stub và _skel đóng vai trò trung gian trong giao thức JavaRMI. Hai
lớp này luôn giữ một cuộc thoại với nhau, _stub tiếp nhận lời gọi đối tượng từ xa
sau đó đóng gói các tham số chuyển tới lớp _skel, lớp _skel nhận dữ liệu tháo gói
và thực hiện lời gọi tới đối tượng implement của dịch vụ, tiếp theo đóng gói kết quả

gởi về cho _stub, _stub nhận kết quả trả về cho đối tượng gọi.
Computer A
Computer A
_stub class
_stub class
Object A
Object A

_skel class
_skel class
RMI

Object B
Object B
Computer B
Computer B

6.Vai trò _stub và _skel

Trang 13


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

2.4. Tìm hiểu bộ đăng ký Rmiregistry và các hàm đăng kí.
Một câu hỏi đặt ra khi mới bắt đầu tìm hiểu JavaRMI là làm sao chương trình
ở client có thể tham chiếu đến đối tượng trên server và đăng kí đối tượng trên server
bằng cách nào?. Tất cả nhờ vào bộ đăng ký rmiregistry của Java. Đây là chương
trình rmiregistry.exe trong bộ jdk, nó có trách nhiệm quản lý các đối tượng có khả
năng triệu gọi từ xa ở máy server và lắng nghe các triệu gọi từ client, tại một cổng

dịch vụ nhất định, măc định rmiregistry hoạt động trên cổng 1099.
Để một đối tượng có thể được triệu gọi từ xa, trước tiên nó phải đăng kí với
rmiregistry. Trước khi máy khách muốn sử dụng đối tượng ở máy chủ, nó phải liên
lạc với bộ đăng kí rmiregistry để lấy về tham chiếu đến đối tượng trên máy chủ.
Quá trình đăng ký, truy tìm tên đối tượng được thực hiện bỡi các hàm giao tiếp
API JNDI (Java naming directory interface).
• Phương thức đăng ký ở server. Đối tượng trên server dùng hàm
Naming.bind();
Naming.bind(“rmi://IP address/registryName/”,objectName);

-

registryName: tên khi đăng kí, client sẽ tham chiếu đến tên này.

-

ObjectName: tên đối tượng cần đăng ký.

-

IP address địa chỉ máy chạy rmiregistry.

• Phương thức truy tìm ở client. Đối tượng trên client dùng hàm
Naming.lookup ();
Naming.lookup(“rmi://IP address/registryName”);

-

registryName: tên đối tượng đã đăng ký trên server.
Jvm server

rmiregistry.exe
2.Naming.lookup()
3
1 Naming.bind()
Jvm client
client

4

Jvm server
server

H7.Cơ chế đăng kí & truy tìm dịch vụ JavaRMI.

Trang 14


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

1. Đăng ký đối tượng với rmiregistry.
2. Client truy tìm tham chiếu trên rmiregistry.
3. Tham chiếu đối tượng trả về phía client
4. Thực hiện triệu gọi phương thức.
3. KỸ THUẬT LẬP TRÌNH PHÂN TÁN JAVARMI
3.1. Tổng quan một ứng dụng JavaRMI
Một ứng dụng JavaRMI hoàn chỉnh gồm hai thành phần ở client và server:
• Phía client gồm có:
-

Lớp giao tiếp interface. Lớp cài đặt khai báo của các phương thức.


-

Lớp thực hiện triệu gọi đối tượng từ xa.

-

Lớp _stub là lớp trung gian phía client, nó được tạo tự động bỡi rmic.

• Phía server:
-

Lớp implement cài đặt cụ thể phần thân của các phương thức.

-

Lớp cài đặt để thực hiện đăng ký đối tượng với rmiregistr.

-

Lớp giao tiếp interface. Lớp cài đặt khai báo của các phương thức.

-

Lớp _skel là lớp trung gian phía server, dược tạo tự động bỡi rmic.

Đây chỉ là mô hình mẫu, trong khi cài đặt các ứng dụng cụ thể chúng ta có thể
thay đổi các thành phần của ứng dụng. Sao cho phù hợp với yêu cầu của ứng dụng
đặt ra nhưng dù sao thì các thành phần này không thể thiếu được, nó chỉ có thể đổi
dạng, đổi vị trí, còn chức năng của nó vẫn tồn tại trong hệ thống.

3.2. Trình tự xây dựng ứng dụng JavaRMI
Bước 1. Xây dựng đối tượng đặc tả giao tiếp interface.
Muốn đối tượng có khả năng giao tiếp được với các đối tượng ở xa ta phải
khai báo khả năng Remote, bằng cách cho lớp thừa kế lớp Remote và tất cả các
phương thức phải có khả năng ném ra ngoại lệ với RemoteException.
Ví dụ khai báo:
public interface interfaceName extends Remote {
public type methodName(parameters)throws RemoteException;
}

Trang 15


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Lớp giao tiếp Remote là một interface rỗng dùng đánh dấu cho máy ảo Java
biết được khả năng giao tiếp từ xa.
Bước 2. Xây dựng lớp thực thi implement.
Trong lớp này phần thân của các phương thức được cài đặt đầy đủ, và đây chính là
mã nguồn sẽ thi hành khi gọi các phương thức từ xa. Lớp này phải sử dụng giao tiếp
ta đã xây dựng trước.
Ví dụ:
public class implementName implements interfaceName{
public type methodName(parameter)throws RemotException{
// method body;
}
}

Bước 3. Xây dựng lớp đăng ký đối tượng trên server.
Trong lớp này sẽ tạo ra một đối tượng implementName, sau đó dùng các hàm để

đăng ký đối tượng đó với rmiregistry.
Các phần lệnh chính trong lớp này là:
+ Tạo đối tượng Object=new implementName();
+ Thông báo sự hiện diện của đối tượng có khả năng truy xuất từ xa.
UnicastRemoteObject.exportObject(Object);

+ Đăng ký đối tượng với rmiregistry bằng lệnh Naming.bind();
Naming.bind(“rmi://IPaddress/registryName”,Object);

Phương thức bind() nhận hai tham số là chuỗi định vị URL và đối tượng cần
đăng kí, chuỗi định dạng URL có định dạng như sau:
rmi://hostname:port/ObjectName
Bước 4. Xây dựng chương trình triệu gọi đối tượng từ xa trên máy khách.
Để truy tìm đối tượng từ xa, chương trình máy khách gọi phương thức tĩnh
Naming.lookup(), phương thức này cần hai đối số là chuỗi định dạng địa chỉ máy
chủ và tên đối tượng đã đăng kí.
interfaceName object=(interfaceName)Naming.lookup(url);

Chuỗi url có dạng rmi://hostname/registryName.
Tóm lại: Các bước thiết kế ứng dụng JavaRMI như sau:
-

Đặc tả lớp giao tiếp của đối tượng.
Dự vào đặc tả cài đặt đối tượng chi tiết.
Tạo các lớp trung gian nhờ trình rmic
Cài đặt đối tượng trên máy server.
xây dựng lớp triệu gọi.
Trang 16



Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

3.3. Các cách đăng ký đối tượng với rmiregistry.
Để đối tượng sẵn sàng cho triệu gọi từ xa thì đối tượng phải đăng kí với
rmiregistry. Bộ đăng kí này mở socket và lắng nghe kết nối ở một cổng nào đó.
Ta có thể thay đổi cổng của rmiregistry bằng lệnh như sau: >_ rmiregistry.exe port.
Nhưng phải khởi động trình đăng ký ở bên ngoài ứng dụng.
Tuy nhiên, Java cũng cho phép ứng dụng tự tạo bộ đăng ký riêng bằng mã
lệnh ngay trong chương trình, bằng cách gọi phương thức tĩnh createRegistry() của
lớp LocateRegistry.
Ví dụ: LocateRegistry.createRegistry (số cổng); tuy nhiên hạn chế là khi đối
tượng tự tạo bộ đăng ký trên cổng nào thì nó sẽ độc chiếm trên cổng đó và không
cho phép các đối tượng khác đăng kí cùng cổng với nó.
Một bộ đăng kí có thể quản lý nhiều đối tượng. Người sử dụng có thể liên hệ
với bộ rmiregistry để lấy về danh sách các dịch vụ đang đăng ký, điều này rất tiện
dụng cho việc kiểm tra, lựa chọn các dịch vụ đang hoạt động.
3.4. Truyền tham số khi gọi phương thức từ xa.
Truyền tham số là một trong những vấn đề quan trọng nhất khi gọi phương
thức vì tham số là yếu tố chủ yếu để ta có thể tác động vào bên trong phương thức.
Tham số mang thông tin truyền vào phương thức và tải thông tin ra bên ngoài. Khi
triệu gọi phương thức từ xa tham số phải được đóng gói chuyển qua mạng, nên dữ
liệu đến có lỗi hay không quyết định sự thất bại hay thành công của việc gọi
phương thức. Mặc khác truyền dữ liệu giữa hai tiến trình trên hai máy độc lập là
vấn đề không đơn giản, cần có sự trợ giúp của các kỹ thuật tiện ích. Hai nguyên tắc
truyền tham số qua mạng như sau:
+ Tất cả các kiểu dữ liệu cơ bản chuyển theo tham trị.
+ Những đối tượng truyền qua mạng cần phải cài đặt một trong hai
giao thức sau: Remote truyền theo tham chiếu và Serializable truyền theo tham trị.
3.4.1. Các giao tiếp Remote, Serializable và tham số.
Lớp giao tiếp Serializable chỉ là một lớp rỗng, dùng cho mục đích báo hiệu.

Tất cả các đối tượng cài đặt giao tiếp Serializable đều được Java xem như có khả
năng tuần tự hóa. Nghĩa là có thể yêu cầu Java lưu toàn bộ đối tượng xuống một tập
tin, sau đó truyền tập tin đi trên mạng đến nơi cần sau đó có thể khôi phục đối tượng
về trạng thái ban đầu (lúc chuyển đi) để sử dụng mà không cần phải khởi tạo lại .
Với cơ chế truyền tham số theo tham trị, khi lời gọi hàm ở xa có tham số là
Trang 17


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

đối tượng thì đối tượng được đóng gói chuyển đến máy chủ. Tại máy chủ đối tượng
được tháo gói để sử dụng như ban đầu. Quá trình đóng gói đối tượng chuyển đi
được thực hiện nhờ lớp trung gian _stub; ngược lại, quá trình phục hồi đối tượng
trên máy chủ được thực hiện nhờ lớp _skel. Trong lập trình phân tán gọi qui trình
chuyển tham số là mashaling data.
Tương tự lớp serializable, lớp giao tiếp Remote cũng dùng để đánh dấu khả
năng đối tượng được dùng làm tham số truyền trên mạng nhưng theo tham chiếu.
Khi chuyển theo tham chiếu đối tượng không được đóng gói chuyển trực tiếp trên
mạng mà chỉ truyền tham chiếu của nó cho trình chủ. Như thế, tăng tốc độ thực thi
của chương trình, nâng cao xác suất thành công của việc gọi phương thức vì đối
tượng được xử lý trực tiếp tại máy khách.
3.4.2. Chuyển đối tượng theo tham chiếu và kỹ thuật callback.
Khi một đối tượng truyền theo tham chiếu thì thực sự bản thân đối tượng
không chuyển đi mà chỉ truyền tham chiếu của nó tới trình chủ. Việc xử lí đối tượng
này thực hiện ngay trên máy khách. Do đó, phải có sự triệu gọi qua lại giữa trình
khách và trình chủ. Từ vấn đề này nảy sinh kỹ thuật “gọi ngược” là callback rất hữu
dụng trong một số trường hợp khắc phục nhược điểm của vấn đề tryuền tham số qua
mạng. Với kỹ thuật Callback trình chủ cũng có thể gọi ngược từ xa đến trình khách.
Đây là một kỹ thuật tương đối khó mô tả nên để trình bày có hiệu quả ta tiến
hành xây dựng mô phỏng một ứng dụng đơn giản dựa trên kỹ thuật này.

Chúng ta sẽ tạo ra hai đối tượng trên máy khách và máy chủ có thể triệu gọi
lẫn nhau. Đầu tiên trình khách liên hệ bộ đăng ký rmiregistry để tham chiếu đến đối
tượng trên máy chủ, tiếp đó trình khách tạo ra một đối tượng của máy khách đồng
thời gọi phương thức của đối tượng chủ để đăng ký đối tượng khách đó với đối
tượng chủ. Bằng cách này, trình chủ không cần dùng hàm Naming.lookup() để truy
tìm đối tượng khách trên rmiregistry nữa mà có thể triệu gọi phương thức của đối
tượng khách. Ứng dụng được mô tả như sau:
1. Giao tiếp interface cho đối tượng trên máy khách AtClient
public interface AtClient extends Remote {
//phương thức thực thi trên máy khách
public type clientMethod(args)throws RemoteException;
}

2. Giao tiếp interface cho dối tượng trên máy chủ AtServer
public interface AtServer extends Remote {
// hàm này để đăng ký đối tượng khách với trình chủ
public void registerClient(AtClient c)throws RemoteException;

Trang 18


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

//phương thức thực thi trên máy chủ
public type callServerMethod(args)throws RemoteException;
}

3. Lớp cài đặt trên máy khách.
public class AtClientimpl implements AtClient {
public type callClientMethod(args)throws RemoteException{

}
}

4. Lớp cài đặt trên máy chủ.
public class AtServerimpl implements AtServer {
AtClient client;// để đăng ký với trình chủ
public void registerClient(AtClient c)throws RemoteException{
client=c;
}
public type callServerMethod(args)throws RemoteException{
client.callClientMethod(args);
}
}

5. Chương trình triệu gọi trên máy khách
public class Client {
public static void main(String args[]) throws Exception{
AtClient client=new AtClientimpl();
UnicastRemoteObject.exportObject(client);
AtServer server=(AtServer)Naming.lookup(
"rmi://localhost/serverobject");
//Đăng ký đối tượng client với trình chủ
server.registerClient(client);
server.callServerMethod();
}
}

6. Chương trình đăng ký đối tượng chủ với rmiregistry
public class Setup {
public static void main(String args[]) throws Exception{

AtServer server=new AtServerimpl();
UnicastRemoteObject.exportObject(server);
Naming.bind("rmi://localhost/serverobject",server);
}
4
Server
}
serverObject

Client

RMI

clientObject

2

1

3

rmiregistry

H8 Hoạt động của hệ thống callback.
1. Đối tượng chủ đăng lý với rmiregistry
2. Đối tượng khách truy tìm đối tượng chủ.
3. rmiregistry trả về tham chiếu đến đối tượng chủ.
4. Đối tượng khách đăng ký với đối tượng chủ
Trang 19



Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

3.5. Các kỹ thuật gọi đối tượng ở xa trong JavaRMI.
Trong các phần trước đã trình bày cách thức xây dựng, thực hiện một ứng
dụng JavaRMI. Tuy nhiên đó chỉ là những kỹ thuật hết sức cơ bản, còn không ít
những hạn chế trong việc triển khai các ứng dụng. Nhất là yêu cầu về tính đồng
nhất của dịch vụ, tính độc lập giữa bên cung cấp và bên sử dụng dịch vụ…Sau đây
sẽ trình bày một số kỹ thuật rất tiện ích của JavaRMI trong việc xây dựng các dịch
vụ phân tán.
3.5.1. Gọi bằng phương thức động, với kĩ thuật phản chiếu.
Trong nguyên lý cơ bản của JavaRMI để trình khách gọi được các phương
thức của đối tượng chủ thì ít nhất phải được cung cấp lớp giao tiếp interface của đối
tượng. Trình khách sẽ giựa vào giao tiếp này để chuyển kiểu khi lấy về được tham
chiếu đối tượng chủ bằng hàm Naming.lookup(); Tuy nhiên nếu phía khách không
có lớp giao tiếp này thì sao? Nghĩa là, bằng cách nào đó lấy về tham chiếu và không
cần lớp giao tiếp để chuyển kiểu. Trong trường hợp này có thể sử dụng kỹ thuật
phản chiếu (reflect) của Java để thực hiện triệu gọi.
Trước tiên lấy tham chiếu về ở dạng đối tượng tổng quát. Sau đó dùng hàm
getMethod() để lấy về các phương thức của đối tượng đang có. Cuối cùng dùng
hàm invoke() để thực thi các phương thức bên trong đối tượng.
Các phương thức cơ bản trong kỹ thuật này như sau:
+Tham chiếu đến đối tượng chủ ở dạng tổng quát.
Object object=Naming.lookup(“rmi://hostname:port/registryName”);

+Truy tìm xuất xứ của đối tương.
Class class=object.getClass(); hàm này trả về lớp của đối tượng

+Lấy về các phương thức của lớp.
Method method=class.getMethod(“methodName”,parameterType);


Phương thức này trả về một đối tượng của lớp Method, là một phương thức có
tên là methodName và các kiểu tham số được chỉ ra trong parameterType.
+Gọi phương thức từ xa.
Thông qua đối tượng phương thức mà ta đã truy tìm ra trước đó.
method.invoke(object, arguments); phương thức này thực thi phương thức
được miêu tả trong đối tượng method, với đối tượng object và danh sách các tham
số truyền vào phương thức là arguments.

Trang 20


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

3.5.2. Cơ chế tự kích hoạt với rmid.exe.
Qui trình mà ta thực hiện để cài đặt một đối tượng JavaRMI là: Khởi động bộ
đăng ký rmiregistry, tạo đối tượng, đăng ký đối tượng và lắng nghe triệu gọi từ
máy khách. Nghĩa là các đối tượng đã cài đặt thì luôn ở trạng thái sẵn sàng. Giả sử
có rất nhiều đối tượng cần phục vụ thì sẽ cấp phát bộ nhớ cho tất cả các đối tượng
này, điều này gây hao tốn tài nguyên, giảm tốc độ tính toán. Vì không phải tất cả
các đối tượng đều được triệu gọi một lúc. Tuy nhiên Java cung cấp cơ chế tự động
kích hoạt(activation) đối tượng trên máy chủ chỉ khi nào có yêu cầu từ máy khách
thì mới được kích hoạt để sử dụng. Java cung cấp chương trình rmid.exe chịu trách
nhiệm tiếp nhận sự hiện diện của đối tượng và tự động khởi tao đối tượng khi có
yêu cầu. Quá trình xây dựng ứng dụng theo cơ chế này khá phức tap và khác biệt so
với các cơ chế khác. Cơ chế này có một số vấn đề trong cài đặt :
Trong cài đặt đối tượng chủ, đối tượng phải là lớp thừa kế lớp Activatable vì
tất cả các lớp hỗ trợ cho kĩ thuật tự kích hoạt đều nằm trong gói thư viện
Java.rmi.activation.*;
public class objectimplement extends Activable implements interfaceName .


Phương thức khởi dựng của đối tượng chủ dùng kích hoạt đối tượng. Khi dịch
vụ rmid kích hoạt đối tượng nó sẽ gọi phương thức Activationinstance.newinstance
và gián tiếp gọi đến phương thức khởi dựng.
public objectimplement(ActivationiD id,arshalledObject data)
throws RemoteException{
Super(id,0);
}

Phương thức này nhận hai đối số, định danh kích hoạt(ActivationiD) do dịch
vụ rmid truyền vào, và data có kiểu đối tượng là MarshalledObject là đối tượng
tổng quát có thể truyền qua mạng.
Ta phải chuyển những thông tin này cho lớp cha bằng cách gọi hàm
super(id,0); Lớp cha sẽ thông báo và đăng ký sự hiện diện của đối tượng với dịch vụ
rmid và máy ảo Java. Các bước chính đăng kí đối tượng :
Đầu tiên tạo bảng thuộc tính chứa các giá trị cần thiết lập cho chính sách bảo
mật:
Properties prop=new Properties();
chỉ định tập tin bảo mật: prop.put(“Java.security.policy”,path);

Tạo môi trường chứa các đối tượng kích hoạt:
ActivationGroupDesc.CommandEnvironment ace=null;

Tạo thông tin về nhóm đối tượng kích hoạt:

Trang 21


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán


ActivationGroupDesc exampleGroup= new ActivationGroupDesc(prop,ace);

Dựa vào thông tin của nhóm, ta yêu cầu hệ thống cung cấp một định danh kích
hoạt cho nhóm.
ActivationGroupiD agi= ActivationGroupiD.getSystem().registerGroup(
ExampleGroup);

Sau khi có định danh, chương trình yêu cầu hệ thống tạo nhóm để chứa các
đối tượng kích hoạt.
ActivationGroup.createGroup(agi,exampleGroup,0);

Tiếp theo tạo tham số cần truyền vào cho đối tượng khi kích hoạt, đây là một
đối tượng MarshalledObject.
MarshalledObject data;

Tạo mô tả về đối tượng cần kích hoạt:location là chuỗi xác định vị trí của đối
tượng có tên là implementName;
ActivationDesc desc=new ActivationDesc(“implementName”,location,data);

Cuối cùng đăng ký đối tượng với dịch vụ kích hoạt rmid:
interfaceName object=(interfaceName)Activatable.register(desc);

Đăng ký đối tượng với rmiregistry:
Naming.rebind(url,object);

Ở đây đối tượng không tạo ra từ lệnh new mà lấy từ dịch vụ rmid, khi đăng ký
lệnh Naming.rebind() không dừng lại để chờ yêu cầu mà chỉ thông báo đến rmid là
đối tượng sẵn sàng, sau đó thi hành lệnh kế tiếp và chấm dứt chương trình. Khi rmid
cần nó tự động tạo đối tượng bằng lệnh new và đưa vào sử dụng.
3.5.3. Trình


mồi nạp ứng dụng từ xa với bộ nạp lớp

JavaRMI.
Trong hệ thống mạng cho phép kết nối và điều khiển từ xa. Java cung cấp một
kỹ thuật rất tiện ích, cho phép viết một ứng dụng hoàn chỉnh đặt toàn bộ ứng dụng
trên server sau đó có thể triệu gọi thực thi ứng dụng từ một máy client khác. Trên
máy client hoàn toàn không cài đặt gì hết về ứng dụng đó.
Thực hiện được kỹ thuật này chính là nhờ cơ chế JavaRMI của Java. Trong
Java bộ nạp lớp RMIClassLoader cho phép máy khách nạp các lớp về từ máy chủ
thông qua giao thức http. RMIClassLoader chịu trách nhiệm tải về tất cả các lớp
con, các thư viện mà lớp nạp về cần đến. Nên ta chỉ quan tâm tới mỗi một lớp cần
tải về, không cần để ý tới các lớp liên quan khác.
• Một số vấn đề kỹ thuật cần chú ý:
1. Để một lớp có thể được tải về và chạy trên một máy khác lớp đó phải
được cài đặt giao tiếp Runnable.
Trang 22


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

2. Chính giao tiếp Runnable cho phép thực thi chương trình khi gọi
phương thức run() của giao tiếp này. JavaRMI chỉ có trách nhiệm tải
về các lớp còn việc gọi thực hiện các lớp là do giao tiếp Runnable
quyết định.
Cài đặt lớp tải về như sau:
public lass ClassName implements Runnable{

public void run(){
cài đặt tất cả các công việc tại đây;

}
}

Phương thức run() là bắt buộc phải có, ta có thể đặt tất cả mã lệnh cần thực thi
trong phương thức này, để khởi động lớp ta gọi phương thức run của nó.
Như vậy, toàn bộ ứng dụng được đặt trên một máy và không nhằm mục đích
là thi hành ứng dụng ngay trên máy đó, cho nên cần phải có một chương trình nào
đó chịu trách nhiệm tải ứng dụng về từ máy ở xa và kích hoạt ứng dụng đó, và đây
cũng chính là một phần chính của kỹ thuật này. Xây dựng chương trình này để chạy
trên máy khách. Chương trình này gọi là trình mồi nạp ứng dụng từ xa.
Trong chương trình ở phía máy khách ta không cần bất cứ lớp nào của ứng
dụng cần gọi, tất cả ở trên webserver. Do đó điều cần nhất là địa chỉ URL trỏ tới lớp
dịch vụ trên máy chủ, và tên lớp cần tải về thì ta phải cung cấp. Các câu lệnh quan
trọng phải có như sau:
Lệnh nạp lớp ứng dụng về từ webserver qua giao thức http bằng bộ nạp lớp
RMIClassLoader.
Class ClassName=RMIClassLoader.loadClass(URL,ClassName);

URL là chuỗi chỉ định đường dẫn tới webserver, ClassName là tên lớp cần tải
về. Khi đã tải được lớp về ta phải tạo một thể hiện cuả lớp đó thông qua giao tiếp
Runnable.
Runnable RunClass=(Runnable) ClassName.newinstance();

Cuối cùng là chạy lớp ứng dụng ngay trên máy khách.
RunCalss.run();

Khi dùng kỹ thuật này để xây dựng ứng dụng cần chú ý:
-

Phải có trình webserver chạy trên máy chủ.

Khi xây dựng xong ứng dụng phải biên dịch tất cả các tập tin liên quan ra file
class sau đó đặt hết lên webserver.
Xây dựng chương trình riêng cho máy khách.

Trang 23


Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Client
Service’s
classes

BootstrapApp
ClientService

Webserver

http

H9:Kỹ thuật trình nạp mồi từ xa.
3.6. Vấn đề bảo mật và kĩ thuật xuyên hầm trong JavaRMI.
Trong cơ chế kết nối theo giao thức TCP/IP bằng socket, có dùng đến khái
niệm cổng. Mỗi trình chủ phải hoạt động trên một cổng để lắng nghe yêu cầu từ
máy khách.
Khi dịch vụ hoạt động trên mạng cục bộ, điều này không có vấn đề gì vì có thể
tự do chỉ định số cổng cho socket(tất nhiên là không trùng các cổng nổi tiếng đã
có). Tuy nhiên ở mạng diện rộng internet luôn bị kiểm soát chặt chẽ các dịch vụ bỡi
tường lửa(firewal). Firewal là chương trình kiểm soát cách thức truyền dữ liệu và
kết nối mạng cục bộ với mạng internet, nhằm hạn chế sự truy cập từ mạng cục bộ ra

internet.
Vấn đề phát sinh là việc sử dụng cổng kết nối, khi các ứng dụng triển khai ra
mạng internet. Hầu hết các firewal rất hạn chế số cổng cho phép kết nối. Cổng 80
kết nối theo giao thức http cho phép kết nối webserver được hầu hết các firewal cho
phép sử dụng. Như vậy nếu các ứng dụng theo mô hình khách chủ triển khai trên
mạng sử dụng cổng kết nối khác cổng 80 thì bị ngăn chặn bỡi tường lửa. Trong
JavaRMI sử dụng cổng mặc định 1099 để kết nối thì khi ứng dụng được triển khai
ra mạng internet sẽ dễ bị ngăn cấm bỡi tường lửa và không hoạt động được trên
internet.
Client
RMIclient

1099
Firewal

Server
RMIserver

80
Intranet

Internet

H10.JavaRMI bị chặn
Tuy nhiên,có thể khắc phục vấn đề trên bằng một kỹ thuật gọi là kỹ thuật
xuyên hầm (tunnel). Theo kỹ thuật này ta có thể thực hiện triệu gọi phương thức từ
xa của ứng dụng JavaRMI qua mạng internet bằng cổng 80 của dịch vụ http.

Trang 24



Đồ án tốt nghiệp –Xây dựng hệ thống tải dịch vụ động hỗ trợ tính toán phân tán

Như vậy ta phải làm việc với webserver, ý tưởng của kỹ thuật này là lợi dụng tính
ưu tiên của cổng 80 để thưc hiện các kết nối và truyền dữ liệu qua mạng.
Trước hết ta làm quen với khái niệm về một dạng chương trình làm việc với
webserver rất tiện ích gọi là servlet. Servlet là một chương trình Java phía máy chủ,
được trình chủ triệu gọi để xử lý các thông tin trên máy chủ trước khi trả kết quả về
cho máy khách. Chính serverlet giúp khắc phục vấn đề firewal trong JavaRMI.
Nguyên lý của tunnel là từ trình JavaRMI ở phía client có thể gởi yêu cầu đến
máy chủ thông qua giao thức http qua cổng 80. Ở máy chủ thiết kế một servlet có
khả năng triệu gọi phương thức của đối tượng JavaRMI ở phía server. Khi trình chủ
webserver nhận yêu cầu từ máy khách, trình chủ sẽ gọi servlet để xử lý yêu cầu.
Sau đó trình chủ nhận kết quả thực thi JavaRMI phía server từ servlet và trả về cho
máy khách thông qua http.
Server
Webserver
Client
RMIclient

80
http

http

Firewal

servlet

RMIserver

internet

intranet

H11.Cơ chế xuyên hầm.
Kết luận: Phần trên đã trình bày các lý thuyết cơ bản về công nghệ JavaRMI.
Các kỹ thuật chính để xây dựng ứng dụng phân tán với JavaRMI, ứng với mỗi ứng
dụng cụ thể mà chọn một kỹ thuật tốt nhất để áp dụng. Tuy nhiên mỗi kỹ thuật đều
có những ưu khuyết điểm riêng của nó, do đó để xây dựng tốt các ứng dụng và phát
huy tối đa tính ưu việt của công nghệ thì kỹ thuật tốt nhất là “kỹ thuật tổng hợp”trong một đề án phải biết kết hợp hợp lý các kỹ thuật vào trong các module của
đề án. Mỗi module cần so sánh ưu nhược khi dùng các kỹ thuật khác nhau, để chọn
kỹ thuật tốt nhất.
Trong phần tiếp theo của đồ án, tiến hành phân tích, xây dựng chương trình
theo yêu cầu của đề tài đặt ra, dựa trên “kỹ thuật tổng hợp” của công nghệ
JavaRMI.

Trang 25


×