trong rất nhiều trường hợp, các nguồn lực tính toán của một máy không đáp ứng đủ nhu cầu tính toán và các ứng dụng cần sử dụng các hàm hay đối tượng nằm ở trên các máy khác.. RMI – theo
Trang 1TíNH TOáN PHÂN TáN VớI RMI
TS ngô đăng quang
KS nguyễn minh ngọc
Viện Khoa học vμ công nghệ XDGT Trường Đại học Giao thông Vận tải
Tóm tắt: Tính toán phân tán lμ một trong những chủ đề thời sự hiện nay trong công nghệ
thông tin ý tưởng chính của lập trình phân tán lμ liên kết vμ tận dụng tối đa các nguồn tμi
nguyên vμ người dùng thông qua các liên kết mạng Ngμy nay, với tốc độ đường truyền mạng
ngμy cμng cao vμ khả năng xử lý của các hệ thống tính toán ngμy cμng lớn, tính toán trở nên
phổ biến vμ có hiệu quả Có khá nhiều công nghệ tính toán phân tán đã được giới thiệu như
DCOM, CORBA, RMI, Webservice, Internet Agent, v.v Mỗi công nghệ đều có điểm mạnh vμ
điểm yếu khác nhau vμ thích hợp cho những ứng dụng nhất định Bμi báo trình bμy tổng quan
về một công nghệ tính toán phân tán khá mạnh lμ RMI vμ minh hoạ cách ứng dụng nó thông
qua một ví dụ xây dựng một hệ thống phân tán phân tích phần tử hữu hạn
Summary: Distributed computing is now a topical issue in the information industry The
main goal of distributed computing is to connect users and take the full advantage of the others
resources over a network Increasing desktop CPU power and communications bandwidth has
also helped to make distributed computing a more practical idea There are different
mechanisms which can build a distributed computing system: DCOM, CORBA, RMI,
Webservice, Internet Agent, etc Each has its power and limits depending on what problem to
be solved This paper provides a broad overview of a powerful mechanism developed by Sun
Microsystem, the Remote Method Invocation (RMI) and an illustration of how to use it in an
example about truss solved by FEM (Finite Element Method) over RMI technology
CT 2
i Giới thiệu chung
Tính toán phân tán (TTPT) là một trong những vấn đề thời sự hiện nay của khoa học máy
tính và công nghệ thông tin ý tưởng chính của lập trình phân tán là liên kết và tận dụng tối đa
các nguồn tài nguyên và người dùng thông qua các liên kết mạng Ngày nay, khi tốc độ đường
truyền mạng ngày càng cao và khả năng xử lý của các hệ thống tính toán ngày càng lớn, TTPT
đang được ứng dụng ngày càng phổ biến
Có rất nhiều công nghệ khác khác nhau có thể được sử dụng để xây dựng nên một hệ
thống TTPT như DCOM, CORBA, RMI, Webservice, Internet Agent, v.v Mỗi công nghệ trong
số chúng đều có những điểm mạnh và điểm yếu khác nhau và được sử dụng tuỳ thuộc vào từng
bài toán cụ thể
ii RMI
1 Khái niệm
Thông thường các chương trình được viết dưới dạng thủ tục hay hàm gọi Mã lệnh của hàm
hay thủ tục được nạp thẳng vào bộ nhớ trong và thực thi ngay trên máy địa phương Tuy nhiên,
Trang 2trong rất nhiều trường hợp, các nguồn lực tính toán của một máy không đáp ứng đủ nhu cầu tính toán và các ứng dụng cần sử dụng các hàm hay đối tượng nằm ở trên các máy khác Vấn đề kỹ thuật ở đây là cách nạp nội dung của hàm hay đối tượng ở một máy nào đó và gọi chúng Đây chính là nội dung của lập trình phân tán mã lệnh RMI – theo nghĩa tiếng Anh là gọi phương thức
ở xa – là cách thức giao tiếp giữa các đối tượng Java có mã lệnh cài đặt (bao gồm phương thức
và thuộc tính) nằm trên các máy khác nhau có thể triệu gọi lẫn nhau
2 Cơ chế hoạt động
ứng dụng RMI bao gồm 2 nhóm chương trình chính: một nhóm chương trình cung cấp dịch
vụ đóng vai trò trình chủ và một hay nhiều chương trình sử dụng dịch vụ được gọi là trình khách
Trình chủ tạo ra các đối tượng ở xa (remote object) tức là các đối tượng có thể truy cập được từ
các trình khách nằm ở các máy tính khác, đăng ký địa chỉ và chờ trình khách gọi các phương
thức của đối tượng đó Trình khách lấy các địa chỉ của các đối tượng ở xa trên trình chủ và gọi
các phương thức của chúng Các phương thức này được thực hiện trên trình chủ RMI tạo ra các cơ chế cho phép trình chủ và trình khách liên kết và trao đổi thông tin qua lại Với nguyên tắc hoạt động này, ứng dụng RMI là một loại ứng dụng ứng dụng phân tán đối tượng Các vấn đề cần thực hiện khi phát triển hệ thống phân tán đối tượng RMI là:
- Quản lý tham chiếu của đối tượng ở xa, để có thể gọi các phương thức của các đối tượng
ở xa, các ứng dụng khách cần có tham chiếu đến các đối tượng này RMI cung cấp 3 phương pháp để các ứng dụng khách nhận được tham chiếu này: sử dụng tham chiếu được quản lý bởi dịch vụ quản lý tên (naming service) của RMI, chuyển tham chiếu dưới dạng thông số hay kết quả trả về (return value)
- Kết nối với đối tượng ở xa Quá trình này được RMI thực hiện tự động, lập trình viên chỉ cần sử dụng các phương thức đã được xây dựng sẵn
CT 2
- Truyền dữ liệu Dữ liệu được truyền theo phương thức serialization của Java, và do đó, không bị phá vỡ cấu trúc
Hình 1 mô tả một ứng dụng phân tán RMI sử dụng bộ registry để tạo ra tham chiếu đến đối tượng ở xa Trình chủ gọi bộ registry để đăng ký (hay bind) một tên cho đối tượng ở xa Trình khách tìm kiếm đối tượng ở xa theo tên và thực hiện phương thức trên nó Mô hình này cũng thể hiện việc hệ thống RMI sử dụng Web server để tải các lớp đã được biên dịch từ trình chủ đến trình khách, từ trình khách đến trình chủ cho các đối tượng khi cần thiết
URL Protocol
URL Protocol
RMI RMI
Client
Server
Registry
Webserver Webserver
RMI
URL Protocol
Hình 1 Hệ thống RMI
Trang 33 Ưu nhược điểm của RMI
Ưu điểm lớn của RMI là lập trình viên không cần bận tâm đến các phương thức truyền dữ
liệu và các phương thức ở xa, RMI tự động thực hiện những công việc này Dữ liệu truyền qua lại
sử dụng Java RMI được bảo toàn về kiểu Đây là một thế mạnh của công nghệ này Với công
nghệ liên kết mạng truyền thống, dữ liệu được truyền đi dưới dạng mã, khi đến máy nhận, chúng
cần được xử lý ở dạng không kiểu Quá trình này nhiều khi gây khó khăn cho việc định dạng dữ
liệu
Một trong những nét đặc trưng chỉ có ở RMI là khả năng tải các bytecodes (hay mã) của
một lớp đối tượng mặc dù lớp này chưa hề được định nghĩa ở trên máy khách Kiểu dữ liệu và
hoạt động của đối tượng này, lúc đầu chỉ tồn tại trên một máy, nay có thể chuyền tới một máy
khác ở xa RMI chuyển nguyên kiểu dữ liệu của các đối tượng, vì thế hoạt động của đối tượng là
không thay đổi khi chúng được chuyển sang một máy khác Điều này cho phép các kiểu dữ liệu
mới có thể được sử dụng trên máy mới này, vì thế hoạt động của chương trình trở nên năng
động hơn
Tuy nhiên, nhược điểm của RMI là các ứng dụng RMI chỉ chạy trên môi trường của Java vì
thế yêu cầu ở đây là cả máy chủ và máy khách đều phải được cài Java Một nhược điểm nữa
của RMI là khi kết nối với mạng diện rộng Internet các ứng dụng của RMI bị chặn lại bởi tường
lửa (Firewall) vì RMI không sử dụng cổng 80 là cổng của dịch vụ http (cổng mà hầu như mọi
tường lửa đều cho qua) Vì thế để sử dụng RMI trên mạng diện rộng các ứng dụng phải sử dụng
cơ chế trung gian thông qua cổng 80 của dịch vụ http server
4 Tạo các ứng dụng phân tán sử dụng RMI
4.1 Thiết kế vμ lập trình (thực thi) các thμnh phần của ứng dụng
Công việc đầu tiên trong việc xây dựng các hệ thống phần mềm là xác định cấu trúc của
ứng dụng Với RMI, công tác này còn bao gồm cả việc xác định những thành phần là đối tượng
địa phương và những thành phần là đối tượng ở xa Các bước chính ở đây là:
- Định nghĩa các giao diện ở xa: Một giao diện ở xa chứa các phương thức có thể được gọi
bởi trình khách Các trình khách được lập trình với các giao diện ở xa mà không phải với các lớp
thực thi của các giao diện đó Một phần của việc thiết kế những giao diện ở xa là xác định các
đối tượng địa phương sẽ được sử dụng làm tham số và trị trả về cho các phương thức đó
- Lập trình các đối tượng ở xa: Các đối tượng ở xa phải thực thi một hay nhiều giao diện ở
xa Lớp của các đối tượng ở xa có thể bao gồm nhiều phần thực thi của các giao diện khác (cả
cục bộ và ở xa) và các phương thức khác Nếu bất kỳ lớp địa phương nào được sử dụng làm
tham số và và trị trả về cho bất kỳ một phương thức nào thì chúng cũng phải được thực thi
- Lập trình trình khách: Các trình khách sử dụng các đối tượng ở xa có thể được lập trình tại
bất kỳ thời điểm nào sau khi giao diện ở xa được định nghĩa, và cả sau khi các đối tượng ở xa đã
được triển khai
4.2 Dịch mã vμ tạo stub
Quá trình này gồm 2 bước Bước đầu tiên, các tệp tin mã chứa các thực thi của các giao
Trang 4diện ở xa, các lớp trình chủ, các lớp trình khách sẽ được dịch bằng javac Bước thứ 2, các stub (bản sao) cho các đối tượng ở xa sẽ được tạo ra bằng trình biên dịch rmic RMI sử dụng một lớp
stub của đối tượng ở xa như một lớp ủy nhiệm trên trình khách Với lớp ủy nhiệm trình khách có thể liên lạc được với đối tượng ở xa
4.3 Lμm cho các lớp có thể truy cập được trên mạng
Các tệp tin lớp chứa các giao diện, stubs, và các lớp khác cần phải đưa lên Webserver để trình khách có thể tải chúng xuống được
4.4 Khởi động ứng dụng
Việc khởi động chương trình bao gồm chạy chương trình RMI registry, trình khách và trình chủ
5 Tùy biến của RMI
Ngoài khả năng triệu gọi một chiều theo kiểu trình chủ được trình khách triệu gọi từ xa, RMI còn cung cấp khả năng triệu gọi hai chiều, theo đó các trình khách cũng có thể được triệu gọi từ trình chủ Nói cách khác, trình khách không cần chuyển đối tượng cho trình chủ theo trị mà có thể chuyển theo tham chiếu
Trong ứng dụng RMI, các đối tượng cần được đăng ký với rmiregistry, và khi số lượng các
đối tượng này tăng lên, việc quản lý trở nên phức tạp Để hạn chế khó khăn này, RMI cung cấp
khả năng xây dựng một đối tượng duy nhất và đăng ký đối tượng này với rmiregistry Nhiệm vụ
của đối tượng trên chỉ dùng để tạo ra các đối tượng con khác Một đối tượng như vậy trong mô
hình tính toán phân tán gọi là factory object (đối tượng mẹ)
CT 2
Số lượng các đối tượng cần được đăng ký với rmiregistry ngày càng lớn thì bộ nhớ mà trình
chủ cần phải cấp phát cho chúng cũng ngày càng lớn RMI cung cấp cơ chế tự động kích hoạt
đối tượng từ xa cho phép người dùng chỉ cần đăng ký sự hiện diện của đối tượng trên máy chủ
mà không cần cấp phát bộ nhớ cho đối tượng trong trạng thái sẵn sàng
iii Xây dựng một hệ thống phân tích phần tử hữu hạn dựa trên công nghệ RMI của Java
1 Kiến trúc hệ thống
Việc phân tích phần tử hữu hạn của các ứng dụng lớn đòi hỏi phải sử dụng nguồn lực của nhiều máy tính đồng thời Như đã giới thiệu ở trên, RMI là công cụ cho phép thực hiện điều đó một cách tương đối đơn giản
Ví dụ này trình bày cách xây dựng một hệ thống phân tích phần tử hữu hạn đơn giản Hệ thống gồm hai phần chính là trình khách và trình chủ Toàn bộ quá trình tính toán chính đều thực hiện trên trình chủ Trình khách là ứng dụng sử dụng các dịch vụ mà trình chủ cung cấp Nhiệm
vụ của trình khách là cung cấp các thông số đầu vào cần thiết cho quá trình phân tích như các tham số kết cấu, tải trọng, vật liệu, v.v và thể hiện kết quả mà quá trình tính toán ở trình chủ cung cấp Các đối tượng của trình chủ cũng có thể nằm trên nhiều máy tính khác nhau Tuy nhiên, trong ví dụ này, các đối tượng thực hiện quá trình tính toán đều được thiết kế nằm ở một máy tính Hình 2 thể hiện kiến trúc hệ thống của ứng dụng
Trang 5FEMClient
(Trình khách)
FEMServer
Hình 2 Kiến trúc hệ thống
2 Chi tiết các thành phần của ứng dụng
a Matrix
Matrix là lớp thực hiện các tính toán ma trận cần thiết cho việc phân tích phần tử hữu hạn
như cộng, trừ, nhân, chia, nghịch đảo ma trận, cắt hàng, cắt cột, v.v
b TrussSolution
Lớp TrussSolution chứa các phương thức tính toán kết cấu giàn theo phương pháp phần tử
hữu hạn
c FEMInterface
Đây là lớp giao diện ở xa, chứa một phương thức duy nhất, Solution, có nhiệm vụ tiếp
nhận dữ liệu đầu vào và cung cấp kết quả là nội lực trong các thanh giàn Các tham số đầu vào
của phương thức này là các thông số của kết cấu:
Ma trận tọa độ nút
Véc tơ độ cứng
Ma trận liên kết
Ma trận ngoại lực
d FEMImpl
Lớp thực thi của giao diện FEMInterface Lớp này sử dụng lớp TrussSolution để thực thi các
tính toán trên máy chủ
e FEMServer
FEMServer là lớp tạo trình chủ để đăng ký lớp thực thi Lớp này thực hiện hai công việc:
+ Đăng ký RMISecurityManager
+ Tạo đối tượng thuộc lớp FEMImpl Đối tượng FEMImpl có trách nhiệm đăng ký với bộ RMI
registry
f FEMClient
Lớp này đăng ký với RMI Security Manager, sau đó sử dụng phương thức tĩnh
Naming.lookup() để tạo đường dẫn đến đối tượng ở xa Chú ý rằng trình khách sử dụng giao
diện để giữ đường dẫn và giúp phương thức có thể gọi được
3 Ví dụ ứng dụng
Ví dụ với một giàn như trên hình 3 đã được sử dụng để tính toán trên hệ thống phân tán
Trang 6ứng với sơ đồ kết cấu trên, dữ liệu đầu vào do
chương trình FEMClient cung cấp có dạng sau:
//Nodes coordinates double[][] dNodeCoordinates = { { -4, 3}, { 0, 3}, { 4, 3}, { 0, 0} };
//Element Connectivity
Hình 3 Ví dụ ứng dụng
int [][] iElemNodeLists = {{ 1,
//Materials Properties double [] dElemMaterial = { EA,
A=2cm2 //Freedom Tags
int [][] iFreedomTags = {{ 1, 1}, { 0, 0}, { 0, 0}, { 0, 1}}; //Freedom Values
double [][] dFreedomValues = {{ 0, 0}, { 0, 0}, { 0, 100}, { 0, 0}};
Hình 4 minh hoạ kết quả tính toán được thể trên FEMClient
CT 2
Hình 4 Kết quả tính toán được thể hiện trên FMClient
iv Kết luận
Sử dụng RMI trong phát triển hệ thống TTPT thể hiện nhiều ưu điểm cho phép kỹ sư có thể tập trung giải quyết bài toán mà không cần quan tâm nhiều đến các vấn đề về mạng Với RMI, các bài toán lớn có thể được giải quyết trên các máy tính có cấu hình thấp, các máy khách chỉ cần gửi các đối tượng kích thước lớn lên máy chủ có cấu hình mạnh nhờ tính toán giúp Và trong bối cảnh an ninh mạng ngày càng được quan tâm, các cơ chế bảo vệ của Java giúp cho các hệ thống TTPT trên RMI trở nên an toàn hơn và được nhiều người sử dụng hơn Tuy nhiên công nghệ RMI không phải là công nghệ tối ưu vì RMI chỉ hoạt động trên môi trường của Java
Tài liệu tham khảo
[1], http://en.wikipedia.org/wiki/Distributed_computing
[2] Leon Erlanger, Distributed Computing: An Introduction, http: //www.extremetech.com/article2/0,1697,1153023,00.asp [3] Petri Niska, Aapo Rautiainen, Java in Distributed Computing, http://www.niksula.cs.hut.fi/~pate/Tik-76.270/javasem3.html
[4] Nguyễn Phương Lan, Hoμng Đức Hải Java lập trình mạng, NXB Giáo dục, 2001
[5] The Java Tutorial
[6] Jbuilder SamplesĂ