Tải bản đầy đủ (.pdf) (114 trang)

Do an Mobile Framework.pdf

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 (453.77 KB, 114 trang )

Chöông 1:
GIÔÙI THIEÄU
1. Giới thiệu đề tài
1.1 Tên đề tài :
Xây dựng Mobility framework ứng dụng cho xử lý song song và hệ
phânbố trên môi trường Java.
1.2 Giới thiệu đề tài :
Từ lâu, trước cả khi có khái niệm về trí tuệ nhân tạo và hệ phân bố, người sử dụng
máy tính luôn mong muốn có thể tạo ra những chương trình máy tính có khả năng tự
thực hiện các công việc tính toán đôi khi nhàm chán và phức tạp cho họ. Hiện nay,
trước sự phát triển mạnh mẽ của mạng máy tính, hệ phân bố và xử lý song song,
mong muốn đó lại càng trở nên thiết thực hơn.
Những chương trình mà user có thể đònh nghóa các tác vụ mà họ mong muốn, sau đó
tự các chương trình này thực hiện các công việc gọi là các agent. Trong các hệ thống
trước đây, để thực hiện một công việc nào đó agent thường được tạo ra và chỉ hoạt
động trên một host cố đònh, các giao tiếp trên mạng thực ra chỉ mang tính chất trao đổi
dữ liệu. Loại agent này gọi là static agent. Nhưng từ khi xuất hiện những công việc
tính toán lớn hơn với khối lượng dữ liệu nhiều hơn, người ta bắt đầu suy nghó đến việc
di chuyển tác vụ chứ không phải chỉ di chuyển dữ liệu trên mạng.
Mobile agent là khái niệm mở rộng của static agent để chỉ một thực thể độc lập tự di
chuyển trong framework và có khả năng thực hiện các công việc khác nhau trên các
host khác nhau. Tại mỗi host trong framework , mobile agents có thể sử dụng các tài
nguyên có sẵn ( nếu được cho phép), thực hiện một số tác vụ và di chuyển đến các
host khác. Mobile agent di chuyển trên mạng nhưng vẫn bảo toàn trạng thái về biến
và code của nó. Ngoài ra mobile agent còn có khả năng giao tiếp với các mobile
agent khác để thực hiện đồng bộ và trao đổi dữ liệu với nhau.
Mobility framework là một framework trong đó cung cấp cho các mobile agent khả
năng tự di chuyển giữa các host trong mạng, cung cấp môi trường cho các agent này
thực thi các tác vụ mà user mong muốn. Có thể nói khả năng tự di chuyển và thực
hiện các tác vụ khác nhau ở các host khác nhau của mobile agent chính là đặc điểm
nổi bật nhất của mobility framework. Bên cạnh đó framework còn cung cấp cho các


agent các dòch vụ của nó để agent hoàn thành công việc của user giao phó, từ đó có
thể phát triển và quản lý các ứng dụng sử dụng lợi điểm của mobile agent để giải
quyết các bài toán xử lý song song và phân bố.
Với những ưu điểm nổi bật của mobility framework, ta nhận thấy nhu cầu xây dựng
mobility framework ứng dụng cho xử lý song song và phân bố là một hướng nghiên
cứu mới và cần thiết. Luận văn tốt nghiệp này hướng đến việc thiết kế và hiện thực
một Mobility Framework nhằm ứng dụng trong xử lý song song và phân bố trong môi
trường Java.
Mobility framework đề cập trong luận văn này được xây dựng trong môi trường Java
vì Java cung cấp nhiều kỹ thuật hỗ trợ việc di chuyển object như load class động, kỹ
thuật serialization …và Java là một ngôn ngữ không phụ thuộc platform, nên cho phép
các mobile agent có thể di chuyển trên nhiều platform khác nhau, đồng thời
framework cũng thừa hưởng cơ chế bảo mật của Java.
2 Giới thiệu về agent technology
2.1. Giới thiệu Agent
Trên quan điểm khoa học máy tính, chúng ta có thể hiểu agent như một thực thể
hoạt động tích cực một cách thường trực trong một máy tính nào đó, hoàn toàn khác
với các thực thể khác chỉ thụ động chờ thông điệp gởi tới nó rồi mới thực hiện các tác
vụ do thông điệp yêu cầu. Cụ thể hơn, chúng ta có thể nói agent có một “ trí thông
minh nhất đònh “, nó có thể thực hiện một số hành vi để thích ứng với môi trường
xung quanh nó. Mỗi agent có thể có hai đặc tính cơ bản là khả năng tự di chuyển và
“trí tuệ ”. Đặc tính di chuyển của agent có thể được phân làm nhiều cấp độ. Agent di
chuyển theo lộ trình cho trước hay ở cấp độ cao hơn agent có thể tự chọn lộ trình để
thích ứng với môi trường xung quanh. Để mô tả khả năng trí tuệ của agent, chúng tôi
sẽ đề cập trên một số khía cạnh :
♦ Có mục tiêu (goal-oriented) : agent được tạo ra nhằm mục đích để giải
quyết một số vấn đề nào đó, điều này cũng giống như các chương trình cổ
điển. Tuy nhiên điểm khác biệt và là thế mạnh của agent là “tự quản và tự
thích nghi để tiến đến mục tiêu”.
♦Tự quản (autonomy) : có nghóa là agent tích cực hoạt động, không thụ động

phản ứng trước những sự kiện xảy ra với nó, không cần sự can thiệp của user
và có thể kiểm soát được một số hành vi cơ bản . Agent luôn “xem xét” môi
trường xung quanh và có khả năng tự thích ứng với môi trường.
♦Tự thích nghi (self-adaptable & reactive) : agent có “trí thông minh”, biết tự
thích nghi để nâng cao khả năng của nó. Muốn thực hiện điều này, agent cần
có một “bộ não” được tổ chức theo hệ chuyên gia, có cơ sở dữ liệu về các sự
kiện và các quy luật diễn dòch. Thêm vào đó là một qui trình học và tự học
gồm những quy luật đánh giá hành động quá khứ bằng cách so sánh với mục
tiêu. Ngoài ra agent không chỉ đơn thuần thích nghi với môi trường xung
quanh, mà còn có thể thay đổi môi trường theo mục tiêu của nó.
♦Giao tiếp (Social ability) : các agent có thể hợp tác với nhau để giải quyết
vấn đề.
Agent được phân thành nhiều loại tùy thuộc vào sự nổi bật một hay nhiều đặc tính
chung của agent. Chẳng hạn như khi nhìn ở đặc tính di chuyển của agent, chúng ta có
hai loại mobile agent và stationary agent. Ngoài ra nếu đứng ở các khía cạnh khác thì
chúng ta có các loại agent như : intelligent agent, autonomous agent, profile agent,
simulator agent,. . .
Thông thường, agent phải cần đến agent framework là một platform cung cấp khả
năng tạo, thực thi, di chuyển, hủy agent, hỗ trợ sự giao tiếp giữa các agent, và tạo
điều kiện cho agent hoàn thành công việc.
Có thể nói Agent Technology là một kỹ thuật dựa trên sự phát triển của các mô hình
hướng đối tượng và tính toán phân bố, distributed mobile object, process migration, và
distributed artificial intelligent.
2.2 Giới thiệu Mobile Agent
Mobile agent là một agent nhưng nổi bật ở khả năng tự di chuyển. Nó có thể dừng
quá trình thực thi của nó tại một host trong mạng để di chuyển đến một host khác, rồi
lại tiếp tục quá trình thực thi. Cũng như một agent thông thường, mobile agent được
tạo ra và thực thi trên một mobility framework.
Khi một ứng dụng cần thực hiện các yêu cầu, hệ thống framework sẽ khởi tạo một
hay nhiều mobile agent và quá trình thực thi của mỗi mobile agent được xem như là

một process trong framework. Framework sẽ truy xuất nhiều mobile agent và cung
cấp các dòch vụ khác nhau cho user.
Các chương trình mobile agent có thể được xây dựng từ các component của ngôn ngữ
thủ tục hoặc các classes của ngôn ngữ hướng đối tượng. Chương trình mobile agent có
thể được thực thi ở ngôn ngữ máy hoặc ngôn ngữ thông dòch. Để hỗ trợ cho tính bất
đồng nhất của hệ thống mạng, các mobile agent thường được thực thi ở ngôn ngữ
thông dòch. Ngôn ngữ thông dòch cho phép các mobile agent chứa những tham khảo
đến các hàm hoặc các object ở xa, ngoài ra nó còn bảo mật hơn ngôn ngữ máy.
Có thể nói mobile agents được xem là một thực thể có khả năng thực hiện một số
thao tác và đặc biệt là nó có thể di chuyển được trên hệ thống mạng để thực hiện các
tác vụ của nó. Nhưng làm thế nào để một thực thể có thể di chuyển được ? Thật ra
đònh nghóa trên chỉ đứng ở góc nhìn end user, còn ở góc độ hệ thống, mobile agent
được hiện thực bởi hai thành phần : phần di chuyển và phần cố đònh là môi trường
thực thi của phần di chuyển. Một câu hỏi nữa đặt ra là vì sao và khi nào chúng ta sử
dụng mobile agent ? Chúng tôi xin đơn cử một vài thế mạnh cơ bản của mobile agent :
♦Giảm network-load : các hệ thống phân bố thường dựa trên các
communication protocol, tần suất gởi nhận dữ liệu khá cao giữa các component của
hệ thống. Trong khi đó mobile agent cho phép di chuyển quá trình tính toán đến nơi
có dữ liệu vì thế tránh được trường hợp một khối lượng lớn dữ liệu di chuyển từ nơi
lưu trữ đến nơi xử lý.
♦Encapsulate protocol : khi dữ liệu được trao đổi trong hệ thống phân bố, mỗi
component nằm ở các host phải tuân thủ protocol trao đổi dữ liệu và như thế vấn đề
bảo mật được đặt ra trong quá trình tính toán. Nhưng khi sử dụng mobile agent, khó
khăn trên được giải quyết dễ dàng, vì mobile agent sẽ di chuyển đến component đích
thực hiện protocol tại component đó.
♦ Execute asynchronously and autonomously : khi có nhu cầu tính toán phân
bố, thường thì hệ thống phân bố đòi hỏi hệ thống mạng bên dưới bảo đảm sự nối kết
phải liên thông. Trái lại khi mobile agent mang quá trình tính toán đến component
chứa dữ liệu thì sự liên thông mạng giữa component tạo ra mobile agent và nơi chứa
dữ liệu là không còn là yêu cầu bắt buộc liên tục.

♦ Heterogenous : các hệ thống mạng thông thường được chia làm hai loại bất
đồng nhất và đồng nhất, mobile agent có thể di chuyển và thực thi trên hệ thống
mạng mà không cần quan tâm chúng thuộc loại nào.
♦ Robust & Fault-tolerant : đặc tính autonomy, reactive và mobile đã mang lại
cho mobile agent khả năng này. Mobile agent dễ dàng thích ứng với các môi trường
khác nhau trong quá trình di chuyển. Ngoài ra khi một host chứa mobile agent đang
thực thi bò chết thì có thể dễ dàng dispatch mobile agent đó vào host khác để tiếp tục
quá trình thực thi.
Tất cả các lợi điểm trên của mobile agent chưa thể hiện hết sức mạnh của nó nhưng
cũng nói lên được lý do vì sao chúng ta phải nghiên cứu và hiện thực mobile agent.
2.3 Tổng quát về mobile agent computing
Mobile agent computing có thể được xem là một phương pháp mới trong lónh vực tính
toán phân bố. Nó cung cấp khả năng di chuyển quá trình tính toán đến các cơ sở dữ
liệu phân bố, có thể tự thích nghi với sự biến đổi của môi trường tính toán dữ liệu mà
không cần sự can thiệp của user. Chính vì thế những ứng dụng có liên quan đến các
vấn đề tìm kiếm, truy vấn, mail clients, transaction front-end, . . . thường gắn liền với
môi trường thực thi của các mobile agent. Dưới sự hỗ trợ của một framework, các
trình ứng dụng sẽ gởi yêu cầu đến các mobile agent, các mobile agent này sẽ nhận
yêu cầu, xử lý rồi trả kết quả về cho chúng. Trong các trường hợp khác, không cần
các chương trình ứng dụng, các chương trình mobile agent sẽ tự thực hiện công việc
giao tiếp với user từ các thiết bò nhập xuất. Lúc đó, môi trường framework cung cấp
cơ chế thực thi cho các mobile agent sẽ phải gắn liền với các chức năng của hệ điều
hành như quản lý bộ nhớ, timer, file system, . . .Và thông thường framework phải
được trang bò một hệ thống truyền nhận thông điệp hỗ trợ cho việc giao tiếp của các
mobile agent.
Ngoài ra, một trong những nguyên nhân thể hiện tính khả dụng của mobile agent
computing là khả năng bảo mật của nó. Đối với mobile agent computing, chúng ta dễ
xây dựng hệ thống authentication theo các hình thức password-based, address-based
hay cryptography, cũng như hoàn thiện hệ thống authorization đi kèm.
Tóm lại, mobile agent computing là sự thực hiện công việc tính toán trên hệ phân bố

dựa trên việc sử dụng các mobile agent.
Ta có mô hình minh họa :
Hình 1.1 Mô hình framework
2.4 Ứng dụng của mobility framework
Trước đây, một ứng dụng phân bố muốn tính toán trên một tập dữ liệu lớn ở xa, nó
buộc phải tải các dữ liệu này về và thực hiện công việc tính toán. Nhưng trong trường
hợp dữ liệu này quá lớn thì việc tải về không hiệu quả, thậm chí không thực hiện
được. Để giải quyết bài toán trên, người ta cho rằng thay vì phải di chuyển dữ liệu về
nơi tính toán, thì nên di chuyển công việc tính toán về nơi có cơ sở dữ liệu, sau đó trả
kết quả tính toán về nơi yêu cầu. Hoặc trong vấn đề quản lý hệ thống phân bố như
việc load balancing, quản lý security nảy sinh nhu cầu cần phải sử dụng các mobile
agent có khả năng di chuyển đến từng host làm chức năng thu thập thông tin, hay giải
quyết các sự cố tại host đó.
Đó chỉ là một vài bài toán cho thấy nhu cầu cần xây dựng Mobility Framework ứng
dụng cho xử lý song song và hệ phân bố. Ngoài những nhu cầu trên Mobile Agent với
sự hỗ trợ của hệ thống framework sẽ khẳng đònh thêm tính khả dụng của nó trong
hiện tại và tương lai.
Ưu điểm của mobile agent & mobility framework :
♦ Cho phép xây dựng các ứng dụng có tính mobile và tính performance cao.
Các ứng dụng sử dụng mobile agent có khả năng tận dụng hệ thống mạng một cách
hiệu quả vì chúng sử dụng tài nguyên mạng trong suốt như sử dụng tài nguyên cục bộ,
do các mobile agent di chuyển đến nơi chứa tài nguyên và sử dụng tài nguyên này để
Client
Application
Environment
Agent
Execution
Environment
Message Passing System
Server

Application
Environment
Agent
Execution
Environment
Message Passing System
Communication Infrastructure
phục vụ cho yêu cầu của ứng dụng. Lợi điểm này rất có ý nghóa trong hệ thống low
bandwidth
♦ Các ứng dụng không những chỉ có tính performance cao mà còn thể hiện rõ
thế mạnh về đặc tính portable, compatible và reusable. Với sự hỗ trợ của hệ thống
framework, các ứng dụng được tích hợp bởi các mobile agent có thể dễ dàng được
ứng dụng trong nhiều hệ thống platform việc thêm hay bớt các chức năng của ứng
dụng chỉ đơn giản là việc thêm bớt các mobile agent chức năng.
♦ Đặc tính bảo mật của ứng dụng được tăng cường thông qua hệ thống
framework. Đây là một trong những ứng dụng quan trọng của mobility framework.
♦ Ngoài ra mobile agents với sự hỗ trợ của mobility framework, về bản chất là
sự di chuyển dòng điều khiển trong hệ thống mạng tốt hơn so với kiến trúc
request/response của mô hình client/server.
Những ưu điểm trên tuy chưa thể hiện hết vai trò của Mobile Agent và Framework,
nhưng cũng cho chúng ta cơ sở để đi đến nghiên cứu và phát triển Mobility
Framework.
3 Giới thiệu mobility framework và các framework liên quan.
3.1 Giới thiệu các framework đã được hiện thực
Mobile agent tuy được xem như là một thực thể độc lập và có khả năng tự di chuyển.
Tuy nhiên, các đặc tính đó chỉ có thể có khi mobile agent được “tích hợp” vào
framework. Một cách tổng quát, framework có thể hiểu như tập hợp các nhóm thành
phần hoạt động phối hợp với nhau theo một qui luật đã được xác đònh trước trên hệ
thống mạng. Các nhóm thành phần này có thể là tài nguyên, dòch vụ cung cấp cho
mobile agent và đặc biệt là môi trường thực thi cho các mobile agent khi chúng đến

một host trong framework. Cho đến nay, chúng ta vẫn chưa có một chuẩn framework
nào được công nhận là hoàn chỉnh. Do đó, để có thể hiểu rõ hơn về “thế giới “
framework, chúng tôi xin giới thiệu một số framework cũng như công cụ hỗ trợ
mobile agent đã được hiện thực.
3.1.1 Concordia Framework
Mitsubishi Electric ‘s Horizon System Labs đã xây dựng hệ thống framework
Concordia nhằm để phát triển và quản lý các ứng dụng mobile agent xử lý thông tin ở
mọi thời điểm và ở mọi nơi với sự hỗ trợ của Java. Nó phát triển hướng về các ứng
dụng công nghiệp và end user ; mobile agent trong hệ thống framework Concordia là
một mobile object. Có thể nói, Concordia là một framework cung cấp các khả năng
mobility và autonomy cho mobile agent. Hệ thống framework của Concordia bao gồm
một tập hợp các máy trong hệ thống mạng. Trên các máy này được cài đặt các
chương trình Concordia server chạy trên máy ảo Java và các mobile agent được hiện
thực bằng một object của ngôn ngữ Java. Concordia server tạo hủy cũng như cung cấp
môi trường cho các Concordia mobile agent hoạt động. Concordia cung cấp khả năng
di chuyển của các Concordia mobile agent theo protocol TCP/IP. Các Concordia
mobile agent di chuyển theo một lộ trình đã xác đònh trước. Ngoài ra Concordia
framework còn cung cấp khả năng hỗ trợ lẫn nhau giữa các mobile agent và hệ thống
bảo mật authentication và authorization.
3.1.2 Aglet framework
Aglet Framework do IBM Tokyo Labs hiện thực. Nó hiện thực các agent Aglet là
những Java object có thể di chuyển từ host này đến host khác trên Internet. Những
object này có thể thực thi trên một host, treo lại quá trình thực thi, di chuyển đến host
khác, rồi lại tiếp tục quá trình thực thi. Trong quá trình di chuyển, Aglet mobile agent
đem theo code chương trình và trạng thái của nó. Aglet framework sử dụng socket để
di chuyển các Aglet mobile agent và các Aglet agent cần một context cung cấp môi
trường thực thi. Nhưng Aglet không cho phép gởi message đến Aglet agent đang di
chuyển. Dó đó nó rất hạn chế trong vấn đề giao tiếp giữa các agent. Hệ thống bảo
mật vẫn theo các chiến lược authentication và authorization.
3.1.3 Odyssey framework

Genaral Magic đã hiện thực lại ngôn ngữ Telescript cho mobile agent, và xây dựng
framework Odyssey. Odyssey là tâp hợp thư viện được xây dựng bằng Java và RMI ,
nhằm mục đích hỗ trợ cho các ứng dụng mobile và phân bố. Cũng giống như Aglet,
Odussey cũng cung cấp các khả năng tạo mobile agent và lập trình dạy nó các tác vụ
mà nó cần làm trong quá trình di chuyển, nhưng vẫn hạn chế trong vấn đề giao tiếp
giữa các mobile agent.
3.1.4 Voyager tool
Voyager chưa phải là một framework, nó chỉ được xem là một công cụ hỗ trợ agent
và hỗ trợ chuẩn CORBA.
Voyager cung cấp các agent là các object tương đối độc lập với ứng dụng, các object
này có thể di chuyển giữa các ứng dụng khác nhau. Voyager còn cho phép xây dựng
các agent từ các process từ xa. Voyager hỗ trợ mobile agent theo cơ chế bảo mật và
persistences. Do đó nó còn hỗ trợ các place processes cung cấp cho các agent tính độc
lập với các host và khả năng di chuyển. Có thể nói, các agent processes cung cấp các
môi trường cho các Voyager agent thực thi khi chúng di chuyển trên mạng. Voyager
agent có thể được xây dựng từ nhiều host khác nhau thông qua cơ chế gọi từ xa. Các
instance của các agent được tạo và thực thi trong các agent processes. Các agent
processes sử dụng các proxy (tham khảo đến remote object) để có thể truy xuất các
remote agent (giống như RMI, CORBA) .
Một Agent được active trong một agent processes thì có thể sử dụng tài nguyên ở host
chứa agent processes đó.Trong voyager khi một object extends class
com.objectspace.voyager.agent.Agent thì nó trở thành agent.
♦Đặc điểm mobility của voyager :
+ Một object có thể được xây dựng thành agent.
+ Cung cấp khả năng moving object.
+ Cung cấp cơ chế transfer object từ host này đến host khác.
+ Các ứng dụng có thể thao tác với các agent thông qua cơ chế proxy
của agent còn gọi là NameSpace (gần giống như cơ chế naming của
RMI). Các agent tương tác với các object khác cũngthông qua cơ chế
proxy interfaces này.

3.2 Giới thiệu Mobility Framework
Mobility framework được thiết kế và hiện thực dựa trên sự tham khảo các hệ thống
framework trên. Mục tiêu chính trong quá trình thiết kế và hiện thực là xây dựng hệ
thống framework mặc dù vẫn thừa kế một số ưu điểm của các framework khác nhưng
phải mang những nét đặc trưng riêng của nó chẳng hạn như framework phải hướng
đến sự hỗ trợ cho các ứng dụng tính toán phân bố và xử lý song song. Dó nhiên trong
phạm vi một luận văn tốt nghiệp và do hạn chế về kiến thức, chúng tôi hoàn toàn
không thể hiện thực một framework tập trung được tất cả các ưu điểm của các hệ
thống framework và như thế mobility framework chỉ thể hiện một phần ưu điểm của
các framework khác.
Mobility framework được xây dựng dựa trên đònh nghóa mobile agent hoàn toàn khác
so với các framework trên. Chúng tôi dựa trên đònh nghóa mobile agent là một thực
thể độc lập để xây dựng framework.
Ngoài ra, mobility framework được thiết kế dựa trên nền tảng của Concordia, điều đó
không có nghóa là sao chép hoàn toàn, mà chỉ là lấy những ưu điểm của nó, đồng thời
kết hợp với các đặc điểm của các framework như Aglet, Odessey và Voyager để xây
dựng nên mobility framework mang những đặc trưng riêng .
Theo đó framework là tập hợp các contracts được hoàn thành bởi sự phối hợp của
nhiều nhóm thực thể có liên quan. Mobility framework chú trọng vào 3 nhóm thành
phần quan trọng : mobile agents, các nguồn tài nguyên, và các dòch vụ của nó. Việc
đònh nghóa mobile agent sẽ dẫn đến hình thành một framework mới. Đây là điểm
khác biệt giữa mobility framework với các framework khác. Trong khi những mobile
agent của Concordia, Aglet và Voyager là các java object thì mobile agent của
mobility framework lại là một thực thể độc lập; những mobile agent của Concordia và
Aglet có phần độc lập tương đối với framework, thì những mobile agent của mobility
framework góp phần xây dựng nên framework, tạo nên sự gắn bó không thể tách rời
giữa các mobile agent và mobility framework.
Ở gốc độ hiện thực, mobility framework đã lấy ý tưởng hiện thực của Odyssey sử
dụng RMI để truyền nhận các mobile agent, nhưng được hiện thực theo một cách
khác. Và đặc biệt, với sự hỗ trợ của JINI, tính open của mobility framework có thể

mạnh hơn khi so với Odyssey. Hơn thế nữa, khả năng collaboration giữa các mobile
agent trong mobility framework hoàn thiện hơn khi so với Aglet và Odyssey. Cụ thể,
mobility framework cung cấp khả năng share data cũng như cơ chế synchronous
message passing giữa các mobile agent; đây là một trong những thế mạnh quan trọng
của mobility framework. Đồng thời khả năng bảo mật tuy chưa hoàn chỉnh nhưng
mobility framework vẫn bảo mật tốt các mobile agent ở mức độ chấp nhận được.
Chính yếu tố này kết hợp với những ưu điểm của mobility framework có thể bảo đảm
sự phát triển của nó trong tương lai.
4. Java và các kỹ thuật rmi & jini
4.1 Vì sao xây dựng mobility framework trên môi trường Java?
Java có nhiều ưu điểm thích hợp với Mobile Agent Technology. Một trong những ưu
điểm đó là tính portability. Nó sử dụng bytecode và môi trường thực thi thông dòch là
máy ảo java (java virtual machine). Chính đặc tính này đã cho java khả năng độc lập
nền (non-platform), đây là một trong những đặc tính quan trọng để xây dựng mobile
agent. Một đặc điểm thứ hai khá quan trọng là java được xây dựng hướng về Internet
thích hợp với khả năng di chuyển của Mobile Agent và đặc biệt là với kỹ thuật Object
Serialization cho phép ghi một object thành bytecode stream có thể dễ dàng truyền
nhận trên mạng. Ngoài ra Class Loading là quá trình mà trong đó class của java
object có thể được load trong lúc thực thi từ nơi chứa mã nguồn của nó. Java class có
thể được load từ files, Web server, database, hoặc một số nơi chứa source khác. Do
đó người lập trình có thể xây dựng một class loader cho riêng họ, để có thể load
classes ở bất cứ nơi nào mà họ muốn. Một đặc điểm nữa góp phần cho Java thích hợp
với Internet là khả năng bảo mật của nó. Cơ chế sandbox của java đã góp phần đáng
kể trong việc bảo mật dữ liệu trên mạng.
Hơn thế nữa, java còn cung cấp cơ chế RMI (Remote Method Invocation) và công
nghệ JINI. RMI thực chất là một cơ chế gọi hàm từ xa, do đó nó cũng có nhiều điểm
tương đồng với RPC, tuy nhiên RMI có nhiều ưu điểm hơn với phương pháp lập trình
hướng đối tượng, ngoài ra nó còn cho phép một Client có thể gửi một Object đến cho
Server xử lý và Object này có thể là tham số cho lời gọi hàm từ xa. Bên cạnh đo,ù JINI
là một hệ thống phân bố dựa trên nền tảng độc lập platform của Java để quản lý tài

nguyên trong hệ thống. Cụ thể hơn, JINI là tập hợp các specifications cho phép các
dòch vụ tìm thấy nhau trong hệ thống mạng và cung cấp framework cho phép các dòch
vụ đó giao tiếp với nhau để thực thi công việc.
Từ những lợi điểm trên, Mobility Framework đã được xây dựng trên môi trường Java
sử dụng RMI và JINI.
4.2 Moving object
Sự phát triển của hệ thống lập trình hướng đối tượng đã cho phép sự giao tiếp giữa
các ứng dụng khác nhau nằm trên các host khác nhau trong hệ thống mạng. Do đó các
object trong các ứng dụng đó phải có khả năng giao tiếp với nhau, có thể giao tiếp
theo cơ chế remote method (object ở ứng dụng này gọi thực hiện một method của
object nằm trong ứng dụng khác), hoặc object ở ứng dụng này có thể “move” đến một
ứng dụng khác nằm ở một host bất kỳ trên mạng.
Mobile object là một object có thể “di chuyển” từ một ứng dụng ở host này đến ứng
dụng ở một host bất kỳ trên hệ thống mạng.
Để một object có thể di chuyển được, cần phải giải quyết các vấn đề có liên quan đến
các protocol của hệ thống mạng, việc phục hồi dữ liệu cũng như trạng thái của object
sau khi moving, đồng thời phải quan tâm dến các vấn đề khác như : tính bảo mật, các
interfaces giao tiếp với người sử dụng, input...
Có thể đưa ra đònh nghóa một cách khái quát về mobile object :
"Mobile object là một object có khả năng “di chuyển” giữa hai hay nhiều ứng dụng
khác nhau trên hệ thống mạng. Sự di chuyển này bao gồm cả trạng thái, phần hiện
thực (implementation), user interface và input của object."
Các vấn đề phát sinh khi xây dựng Mobile object:
♦Làm thế nào để di chuyển một object trong hệ thống mạng ?
Như chúng ta đã biết, object chỉ là khái niệm trừu tượng trong lập trình hướng
đối tượng, do đó không có chuyện một object di chuyển từ host này đến host
khác giống như chúng ta đi học từ nhà đến trường trong thực tế. Thực chất của
việc di chuyển một object là sự di chuyển dòng dữ liệu từ host này đến host
khác thông qua một giao thức truyền/nhận giữa hai host đó. Có thể diễn tả như
sau :

+ Trước tiên, object được serialize thành dòng dữ liệu
(stream).
+ Kế đến, dòng dữ liệu này sẽ được truyền đi thông qua một giao thức
nào đó ví dụ như TCP/IP, UDP,...
+ Khi dòng dữ liệu đã đến ứng dụng ở host đích, thì ở đây diễn ra quá
trình deserialize để tạo ra một instance của mobile object
Lúc này, tồn tại 2 mobile object cùng class, do vậy để hiện thực sự
trong suốt về sự di chuyển của object, nên local object sẽ bò giết đi.
Hình 1.2
♦Local object có quyền truy xuất tài nguyên cục bộ của hệ thống như: user
interfaces, truy xuất file, nhờ CPU thực hiện tính toán,... Do đó vấn đề đặt ra
là phải xây dựng môi trường cho phép tất cả các object có thể truy xuất được
tài nguyên của hệ thống phân bố. Ví dụ như một object muốn truy xuất tài
nguyên trên một host nào đó trong hệ thống phân bố, thì nó có thể di chuyển
đến host đó để truy xuất tài nguyên.
Serialized Deserialized
Object Bytes
Network
Bytes Object
♦Vấn đề security : trong một hệ thống mobile object thì một object có thể “di
chuyển” từ host này đến host khác, và như thế là nếu không hạn chế thì object
đó có toàn quyền truy xuất, thao tác trên hệ thống tài nguyên của host đích,
ngay cả việc format lại ổ đóa của host đó. Chính vì thế mà các host phải có một
số phương thức bảo vệ, đề phòng các malicious object này. Và cũng tương tự,
các mobile object cũng phải đề phòng các host mà nó đến hay đi qua.
♦Làm thế nào duy trì được trạng thái cũng như các tham khảo gián tiếp của
mobile object ?
Trạng thái của object có thể hiểu là tất cả các giá trò hiện hành của các biến,
hằng trong phần dữ liệu của object tính tại một thời điểm đang xét. Khi object
di chuyển, thì trạng thái của nó cũng phải được copy từ vùng đòa chỉ nguồn đến

vùng đòa chỉ đích.
♦Làm thế nào di chuyển được phần hiện thực của object ?
Song song với việc di chuyển trạng thái của một object, thì phần đặc tả (class)
của object đó phải được di chuyển theo, có như thế mới tạo được instance của
object ở đích đến. Để thực hiện điều này,java cung cấp ClassDescriptor mô tả
class của mobile object và ClassLoader cho phép download class từ xa.
4.3 Một số kỹ thuật trong java và RMI:
Đề tài này xây dựng Mobility framework trong môi trường Java vì Java cung cấp
nhiều kỹ thuật hỗ trợ việc di chuyển object và Java là một ngôn ngữ không phụ thuộc
platform cho nên cho phép các agent có thể di chuyển trên nhiều hệ điều hành khác
nhau.
Phần giới thiệu kỹ thuật trong Java và RMI này không chú trọng việc trình bày chi
tiết kiến trúc cũng như cách sử dụng kỹ thuật RMI mà đi sâu vào nghiên cứu những
khía cạnh cho phép hỗ trợ hệ thống mobile agent.
Java và RMI cung cấp một số kỹ thuật hỗ trợ việc moving object :
Cơ chế serialize đối tượng.
Cơ chế persistence
Dynamic Class Loading.
Cơ chế RMI truyền thông số.
Mô hình java security.
Sau cùng là phần trình bày khả năng dùng RMI để phát triển Mobile object.
4.3.1 Cơ chế serialize đối tượng :
Ngôn ngữ java cho phép một đối tượng được viết xuống kênh truyền một cách dễ
dàng như các đối tượng dữ liệu khác, đây là một đặc tính rất mạnh của Java. Trong
việc xây dựng ứng dụng phân bố sử dụng RMI, vấn đề Serialization rất quan trọng vì
có sự moving các objects.
Sau đây, ta xét các cơ chế cho phép một object được viết xuống stream và cách phục
hồi chúng.
4.3.1.1 Marshaling:
Marshaling là quá trình chia dữ liệu thành những bytes mà có thể truyền dễ dàng trên

kênh truyền. DataOutputStream có thể xử lý việc marshaling trên những kiểu dữ liệu
cơ bản. Nếu dữ liệu là một đối tượng thì đối tượng này phải được chia ra sao cho có
thể phục hồi lại được tại nơi nhận. Object Serialization được dùng để chỉ quá trình
marshaling một đối tượng thực sự sao cho chúng có thể được truyền đi trên kênh
truyền và phục hồi lại tại nơi nhận. Trong quá trình Serialization dữ liệu thành những
byte stream, thì nó đồng thời cũng lưu lại những thông tin cần thiết để phục hồi lại dữ
liệu. Cách truyền một đối tượng là lưu một graph mô tả cấu trúc của các tham khảo
của object đó.
4.3.1.2 Unmarshaling:
Unmarshaling là quá trình phục hồi lại dữ liệu nhận được với những thông tin như
trên.
4.3.1.3 Marshaling Object:
Để có thể truyền được object thì Java hỗ trợ class ObjectOutputStream cho phép ghi
một đối tượng xuống stream. Class này sẽ thực hiện việc marshaling object thành byte
stream và ghi xuống DataOutputstream. Như đã trình bày, quá trình marshaling này
bao gồm cả một graph mô tả các tham khảo của object.
4.3.1.4 Unmarshaling object:
Tại nơi nhận, byte stream này sẽ được ObjectInputStream xử lý và phục hồi nó thành
object lúc ban đầu.
♦Trong quá trình serialization, một graph của đối tượng và các tham khảo của
nó được tạo ra. Nhiều tham khảo đến cùng một object được đếm sao cho các
bảng copy của object đó không được tạo ra trong quá trình deserialiation. Khi
một object được đọc tại ObjectInputStream thì một bản copy được tạo ra, đối
tượng nằm trên dòng vẫn không bò ảnh hưởng bởi sự thay đổi trong quá trình
deserialization.
Khi một graph được tạo ra, nó bao gồm tất cả các field ngoại trừ những field
được đánh dấu là private hay transient.
♦Vấn đề Serialization được RMI quan tâm, java cung cấp 2 interface
java.io.Serializable và java.io. Externalizable nhằm mục đích Serialization. Do
đó nếu khai báo một object hiện thực một trong 2 giao diện này thì object đó

có thể serialized, gọi là Serializable object.
♦Một object có thể tham khảo đến nhiều object khác do đó object này phải
được stored và retrieved cùng một thời điểm với các object mà nó tham khảo
đến để duy trì được những quan hệ chính xác giữa các đối tượng.
4.3.2 Object persistence :
Persistence chỉ khả năng lưu trữ một đối tượng đang tích cực và kích khởi chúng trở
lại tại trạng thái khi lưu trữ trước đó. Object Serialization cho phép đối tượng được
đưa vào stream và lưu xuống file sau đó từ file phục hồi lại. Object persistence rất
quan trọng trong việc thiết kế những ứng dụng hướng đối tượng. Trong mô hình
Mobility framework, việc lưu lại các object có ý nghóa rất quan trọng trong việc phục
hồi lại agent khi truyền thất bại. Đặc tính này có thể được sử dụng để đảm bảo tính
fault tolerance của hệ thống. Ngoài ra khi một sự kiện collaboration được phát đi thì
các agent đang hoạt động phải tạm dừng để ưu tiên cho sự kiện này, persistennce
object sẽ làm nhiệm vụ tạm thời lưu lại các object này và phục hồi lại sau đó.
4.3.3 Java Security :
Trong môi trường Java vấn đề security là một vấn đề rất quan trọng, đặc biệt với
những ứng dụng mạng.
Java cung cấp hai mức security :
♦Security mức thấp.
♦security mức resource.
Security mức thấp giải quyết vấn đề toàn vẹn bytecode khi truyền trên mạng, nó bao
gồm:
♦Bytecode Verifier.
♦ClassLoader.
Security mức resource có liên quan đến việc phát triển ứng dụng bởi vì nó tác động
trực tiếp đến tài nguyên của hệ thống.
Java sử dụng mô hình sandbox, là một vùng được xem là an toàn cho những code
không tin cậy. Đặc tính của nó là những code cục bộ đáng tin cậy mới có thể có
quyền truy cập những tài nguyên hệ thống quan trọng, trong khi những code được
download thì chỉ được truy cập một số tài nguyên giới hạn nào đó trong sandbox.

4.3.4 Dynamic Class Loading:
Java cho phép các giá trò trả về hay tham số truyền đi là một object thực sự với những
hành vi và dữ liệu được khai báo trong class. RMI sử dụng Serialization để truyền
nhận các object và việc này có liên quan đến class loading.
Dynamic class loading là một cơ chế được java thực hiện nếu như trong lúc thực thi
chương trình mà phải tham khảo đến một object thuộc một lớp không được đònh nghóa
trên JVM hiện tại. Dynamic class loading sẽ tự đi load bytecode của class này và tạo
ra một instance của class này để thực hiện công việc. Việc tìm kiếm bytecode của
class mới phải được người lập trình chỉ ra một các chính xác thông qua Classpath và
codebase.
Như vậy các đối tượng được truyền đi trong dòng dữ liệu đều có những thông tin đặc
tả class của nó, điều này giúp cho java thực hiện việc load bytecode.
Trong RMI, khi một đối tượng được viết xuống stream, một ClassDescriptor cũng
được viết xuống để xác đònh class của đối tượng này. Nơi nhận object stream sẽ đọc
ClassDescriptor và quyết đònh những class nào có sẵn cục bộ và nhựng class nào cần
được load bởi class loader.
♦ Như vậy khi giá trò trả về hay tham số của một hàm là một đối tượng thì đối
tượng của class này có thể được thay bằng đối tượng của một class khác tương
đương. Đây chính là ưu điểm của việc load class động trong Java.
♦Class Loading của object serialization:
Trạng thái của một object được xem là tập các giá trò của các biến thành phần
của object đó, không có code đi kèm theo .
Class loading là quá trình mà trong đó class của java object có thể được load trong lúc
thực thi từ nơi chứa source code của nó .
Java classes có thể được load từ files, Web server, database, hoặc một số nơi chứa
source khác. Do đó người lập trình có thể xây dựng một class loader cho riêng họ, để
có thể load classes ở bất cứ nơi nào mà họ muốn .
Do vậy trong quá trình xây dựng mobile agent (phần moving). Khi trạng thái của
mobile agent được di chuyển đi, thì class của nó cũng có thể di chuyển theo bằng
class loader. Khi agent đến host đích, thì class của agent được chứa vào bộ nhớ của

host đó và đồng thời instance của nó được tạo cùng với thông tin trạng thái đi kèm.
Đến đây, vai trò của Object Serialization lại được thể hiện, nó sẽ tự động load class
của agent khi có yêu cầu. Trong trường hợp này, Object Serialization gọi
ClassDescriptor. ClassDescriptor là một đối tượng dùng để mô tả class cho một java
object. Trong quá trình ghi serializable object, thì ClassDescriptor được ghi xuống
stream đầu tiên . Đây là thông tin mà Object Serialization sử dụng để tạo instance cho
class của object .
4.3.5 Cơ chế RMI truyền thông số
4.3.5.1 Dữ liệu cơ bản:
Khi một dữ liệu cơ bản được chuyển như một thông số cho lời gọi hàm từ xa thì nó
được RMI truyền theo cơ chế passed by value.
4.3.5.2 Thông số là đối tượng:
Khi thông số là một đối tượng thì cơ chế truyền khác với JVM đơn. RMI gởi chính
object chứ không phải là tham khảo đến các JVMs. Truyền object vẫn là truyền theo
giá trò. Vì các JVMs không chia xẻ vùng nhớ heap, nên đối tượng là thông số được gởi
đi và tất cả các đối tượng mà nó được tham khảo đến cũng được gởi kèm. Như vậy đối
với một cấu trúc nhiều object thì đòi hỏi băng thông rộng và tốn nhiều thời gian CPU.
CPU sử dụng kỹ thuật gọi là Serializable để chuyển object sang dạng linear format và
chuyển đi trên mạng. Serialized object có thể được deserialized tại bộ nhớ của máy
đích và sẵn sàng cho việc sử dụng.
4.3.5.3 Thông số là đối tượng từ xa:
Chương trình client có thể tham khảo đến một đối tượng từ xa thông qua RMI registry.
Một cách mà client có thể tham khảo đối tượng từ xa là object được trả về cho client
từ lời gọi hàm.
Khi hàm trả về một tham khảo cục bộ đến đối tượng từ xa, RMI không trả về đối
tượng đó mà thay vì vậy nó cung cấp một đối tượng khác là remote proxy của dòch vụ
đó trên dòng trả về.
Quá trình sau đây minh họa làm sao RMI thực hiện một lời gọi hàm:
♦Trả về một tham khảo từ xa từ Server về clientA.
♦Gởi tham khảo từ xa từ client A đến client B.

♦Gởi tham khảo từ xa từ clientB trở về Server.
Suốt quá trình này, tham khảo vẫn luôn chỉ đến một thực thể của đối tượng từ xa. Khi
tham khảo được trả về cho Server nó không chuyển thành một tham khảo cục bộ. Nếu
làm như vậy có thể tốt hơn nhưng cách hiện thực trên đảm bảo ngữ nghóa của việc
tham khảo từ xa.
4.4. Phát triển mobile object
Phần này chúng ta xem xét làm sao để tạo một Mobile Object bằng RMI. Việc này sẽ
giúp ích cho thiết kế framework bởi vì tạo Mobile Agent trong Mobility Framework là
sự mở rộng của Mobile Object khi gán cho chúng thêm những đặc tính Mobility khác.
Thông số đối tượng trong RMI chia làm 2 loại :
♦ Distributed object : luôn hiện thực giao diện java.rmi.Remote.
♦Serializable object : luôn hiện thực giao diện java.io.Serializable hay
java.io.Externalizable.
Khi client gọi một hàm có thông số là một Distributed object thì thông số này được
biểu diễn là một tham khảo từ xa đến đối tượng, tham khảo này được truyền đến
server. Như vậy, trạng thái và code của đối tượng đó luôn nằm trên client tại mọi thời
điểm.
Ngược lại, khi client gọi một hàm có thông số là Serializable object thì trạng thái của
đối tượng này được Serialized và truyền đến server. Server tạo ra một bản copy của
đối tượng này. Trong quá trình Serialization, một class descriptor cũng được viết
xuống để đặc tả class của Serialized object này. Byte-code của class này có thể được
truyền từ client đến server theo yêu cầu. Kết quả là client và server có sự trao đổi
object, bao gồm cả biến thành viên và byte-code.
Như vậy, để tạo ra một Mobile object sử dụng RMI thì phải đònh nghóa một
Serializable class và sử dụng đối tượng của class này như thông số trong lời gọi hàm
từ xa. Khi lời gọi hàm được thực hiện thì đối tượng sẽ được copy từ client sang server.
Bảo toàn trạng thái : Khi một đối tượng hiện thực giao diện java.io.Serializable hay
java.io.Externalizable đóng vai trò thông số cho lời gọi hàm từ xa, RMI sẽ serialized
nó xuống object stream nối giữa các ứng dụng phân bố. Đối tượng này sẽ được nơi
nhận deserialized và sử dụng, quá trình này đảm bảo sự bảo toàn trạng thái của

object.
4.5. Giới thiệu kỹ thuật JINI
4.5.1 Giới thiệu :
Jini là kỹ thuật dựa trên Java với mục đích tạo ra các mạng linh hoạt và trong suốt
bằng cách thực hiện các dòch vụ và mở rộng chức năng của chúng ra toàn mạng.
Hệ thống Jini là một hệ thống phân bố dựa trên nền tảng độc lập platform của Java
để quản lý tài nguyên.
Trong hệ thống Jini, các dòch vụ liên kết với nhau để hoạt động hỗ trợ lẫn nhau và
một tập hợp các dòch vụ này được gọi là một community. Tất cả các dòch vụ trong một
community đều có khả năng nhận biết nhau và sử dụng lẫn nhau.
Hình 1.3
4.5.2 Lợi điểm của kỹ thuật Jini :
♦ Đơn giản, tin cậy, và mềm dẻo.
♦ Cung cấp chức năng mạng “plug and play”.
♦ Hoạt động trên một hệ thống kiến trúc dòch vụ.
♦ Tạo ra mạng tự nhiên, trong suốt và đồng nhất.
♦ Độc lập về kiến trúc.
♦ Tạo ra môi trường động.
♦ Xóa bỏ ranh giới giữa phần cứng và phần mềm.
♦ Cung cấp một kiến trúc hạ tầng cho việc tính toán phân bố.
4.5.3.Đặc điểm của kỹ thuật Jini :
♦ Chạy trên máy ảo Java (JVM).
♦ Cung cấp các dòch vụ hỗ trợ cho việc coding các moving objects.
♦ Cung cấp các dòch vụ hỗ trợ cho việc hiện thực downloadable code.
NetWork
Transaction Manager Service Persistence Service
User Defined Service
Lookup ServiceJini Application
♦ Dựa vào ngôn ngữ lập trình Java.
♦ Việc thêm bớt các dòch vụ không cần sự quản lý.

♦ Các dòch vụ độc lập tương đối, nhưng đều có thể hợp tác với nhau mà không cần sự
quản lý tập trung.
4.5.4 Cấu trúc tổng quát của kỹ thuật Jini :
Các dòch vụ Jini •• JavaSpaces
•• Transaction managers
•• Storage, database,…
Kiến trúc nền của Jini
•• Discovery
•• Lookup Service
•• Leasing
•• Remote events
•• Transactions
Mô hình lập trình Jini
•• Leasing
•• Distributed Events
•• Transactions
4.5.5 Cấu trúc chi tiết của kỹ thuật Jini :
4.5.5.1 Discovery :
Jini Discovery protocol được các dòch vụ và các ứng dụng sử dụng để tìm ra các
community.
Bao gồm :
+ Multicast Request Protocol.
+ Multicast Announcement Protocol.
+ Unicast Discovery Protocol.
4.5.5.1.1 Multicast Request Protocol :
Một dòch vụ mới hay một ứng dụng được kích hoạt lần đầu tiên, chúng sẽ sử dụng
Multicast Request Protocol để tìm lookup service gần nhất đang kích hoạt.
Lookup Service
Multicast Request Protocol
Service Item

A new Service|Client App
Hình 1.4
4.5.5.1.2. Multicast Announcement Protocol :
Lookup service sử dụng protocol này để thông báo sự hiện diện của nó.
4.5.5.1.3> Unicast Discovery Protocol :
Được sử dụng khi cần tạo sự nối kết giữa các dòch vụ và lookup service
Hình 1.5
4.5.5.1.4 Join :
Khi một dòch vụ tìm ra được một community, nó có thể gia nhập community đó bằng
protocol Join thông qua việc gởi proxy object và các thuộc tính của nó đến các look up
services của community đó.
4.5.5.2 Look up :
Mỗi look up service có thể phục vụ một hay nhiều community và một community có
thể có một hay nhiều look up services .
Là một process chạy nền, quản lý các dòch vụ đã gia nhập vào hệ thống Jini. Không
giống như Name Server, không những nó cung cấp cơ chế mapping giữa hệ thống tên
với hệ thống objects, mà còn có một số chức năng như : tìm kiếm và resolve theo kiểu
của các objects, hoặc tìm kiếm lớp cha và các interfaces của objects.
Sau quá trình Discovery thành công, nó sẽ trả về một tham khảo đến một object
implements interface của dòch vụ look up này.
Look up được xem như là danh sách các service items và danh sách các thuộc tính mô
tả dòch vụ đó.
+ Mỗi service item chứa một object đóng vai trò proxy cho dòch vụ đó (gọi là
proxy service hay service proxy). Các client không cần quan tâm đến về vấn
Lookup Service
Static Connection
Service Item
A new Service
đề hiện thực của các dòch vụ, mà chỉ cần download proxy object và sử dụng nó
như một front-end để giao tiếp với dòch vụ.

+ Một số thuộc tính cơ bản : tên của dòch vụ, vò trí của dòch vụ, mô tả dòch vụ,

Hình 1.6
4.5.5.2.1 Downloadable Proxies :
4.5.5.2.1.1 Dòch vụ hoạt động thông qua Proxy object :
Proxy object được gởi đến clients của dòch vụ để thực hiện những công việc của dòch
vụ. Chiến lược này đưọc áp dụng trong trường hợp dòch vụ được hiện thực hoàn toàn
bằng phần mềm và không được hỗ trợ thêm resource từ bên ngoài.
4.5.5.2.1.2 Proxy object là một RMI stub kết nối với các dòch vụ từ xa :
4.5.5.2.1.3 Proxy object là một Proxy thông minh :
Nó giao tiếp với client thông qua một protocol chuyên biệt để kết nối với dòch vụ.
4.5.5.3 Finding a Service : quá trình một ứng dụng tìm kiếm và sử
dụng các services :
Khi đã có tham khảo đến một look up service, một ứng dụng (cũng có thể là một
service đã join vào community) có thể duyệt tất cả các sercive items để tìm ra
service mà nó mong muốn.
Một số phương pháp tìm kiếm :
+ Dựa vào type của proxy object.
+ Dựa vào id của service.
Lookup Service
Service Item
Service Proxy
Attribute
+ Dựa vào các thuộc tính của service.
Kết quả của quá trình look up là một proxy object được trả về cho ứng dụng. Và các
ứng dụng sử dụng proxy object như là front-end để giao tiếp với dòch vụ được xem là
back-end.
Hình 1.7
4.5.5.4 Leasing :
Vấn đề :

+ Không thể đảm bảo các communities luôn ổn đònh, không bò lỗi , và khó có
thể phát hiện và khắc phục vấn đề hệ thống bò lỗi ở một vùng nào đó cũng như các
services nắm giữ tài nguyên trong thời gian dài mà ít được sử dụng tới.
+ Các dòch vụ có thể bò chết trước khi chúng đăng ký lại với hệ thống.
Do đó để giải quyết vấn đề sử dụng hiệu quả tài nguyên, Jini đưa ra kỹ thuật Leasing
và đồng thời chỉ cho phép các services sử dụng tài nguyên trong một khoảng thời gian
xác đònh .
uuTime – Base Resource Reservation :
Các client phải “đăng ký” thời gian sử dụng tài nguyên hoặc dòch vụ, và nó được
phép đăng ký lại khi thời gian đã hết. Các client có quyền trả lại tài nguyên trước thời
gian đăng ký.
Leases cung cấp cơ chế giải phóng tài nguyên không còn được sử dụng hay không cần
thiết.
Khi thời gian đăng ký đã hết, client phải trả lại tài nguyên hay dòch vụ cho hệ thống,
và chúng sẽ không được sử dụng tiếp nếu như chúng không được đăng ký sử dụng lại.
Service Item
Client
Lookup
Service
Service
1> Client downloads
proxy object for service
2>Client communicates
with service via proxy
4.5.5.5 Remote Event :
Một sự kiện là một object chứa thông tin về sự thay đổi trạng thái của một thành phần
nào đó trong hệ thống.
Đặc điểm của remote event :
+ Trong hệ thống phân bố, thiếu sự quản lý các sự kiện một cách tậo trung, và
vấn đề truyền sự kiện trên mạng không bảo đảm tính thứ tự của các sự kiện.

+ Không bảo đảm sự kiện đến đúng nơi, không bò sai trong các trường hợp lỗi
trong hệ thống mạng như : một bộ phận của hệ thống bò lỗi, hay mạng bò đứt, nơi
nhận bò treo hay chết …
Jini cung cấp tập các remote events cho các client sử dụng, mà không cần quan tâm
chúng được hiện thực như thế nào và nó cũng sử dụng các sự kiện này để đồng bộ các
hoạt động của các dòch vụ và các ứng dụng trong community.
4. 5.5.6 Transaction :
Transaction bảo đảm tính toàn vẹn dữ liệu. Nó nhóm các tác vụ có lên quan thành
từng nhóm.
Transaction cung cấp cơ chế thao tác dữ liệu có các đặc điểm sau :
+ Atomicity : tất cả các tác vụ trong nhóm hoặc đều thành công hoặc đều thất
bại.
+ Consistency : sau khi transaction hoàn thành, hệ thống vẫn ở trạng thái ổn
đònh .
+ Isolation : transaction trong quá trình thực hiện không giao tiếp với các quá
trình khác.
+ Durability : tất cả những thay đổi của transaction đều được lưu lại phòng
trường hợp các tác vụ sau bi lỗi.
Transaction hoạt động thông qua một thực thể quản lý gọi là transaction manager.
uuTwo – Phase Commit :
Là protocol mà tất cả các thành phần đều phải thực hiện trước khi transaction thành
công hay thất bại.
Trước tiên, tất cả các kết quả của nhóm tác vụ được tính toán và được giữ lại trong bộ
nhớ tạm. Sau đó mới chuyển chúng từ bộ nhớ tạm đến bộ nhớ chính. Chiến lược này
bảo đảm tất cả dữ liệu đều phải được xử lý xong trước khi thật sự lưu chúng vào bộ
nhớ.
Hiện thực bên trong của protocol :
Có hai giai đoạn : precommit và commit.
♦Precommit :
+ Trước tiên, transaction manager tập hợp các tác vụ bao gồm trong

transaction lại với nhau. Các tác vụ này được gọi là participants trong transaction.
+ Sau đó, tín hiệu điều khiển được gởi đến từng participants để cho phép
chúng vào giai đoạn precommit. Trong giai đoạn này, các participants tính toán tất cả
các kết quả, rồi lưu chúng vào bộ nhớ tạm. Sau khi làm xong, mỗi participant sẽ trả
về một indicator cho transaction manager để thông báo chúng đã vào giai đoạn
precommit thành công.
Hình 1.8
♦Commit :
Sau khi kết thúc giai đoạn precommit, transaction manager sẽ thu thập các kết quả
của từng participant. Nếu như có một participant thất bại, thì manager sẽ bảo mỗi
participant abort để làm lại. Nếu như tất cả đều thành công, thì manager sẽ cho phép
các participant vào giai đoạn commit. Lưu giữ lại tất cả các sự thay đổi của chúng.
Hình 1.9
Transaction
mamanger
Op1
Op2
Ready !
Ready to commit ?
Ready to commit ?
Ready !
Transaction
mamanger
Op1
Op2
Commit
Commit
4.5.5.7 JavaSpace:
Javaspace có thể được xem như một object storage service của Jini. Cụ thể nó chứa
Java Object; không những thế, cơ chế lưu trữ và phục hồi các object trong Javaspace

rất tự nhiên và dễ dàng đã cho phép Javaspace có khả năng share object giữa các ứng
dụng. Không giống như các hệ thống lưu trữ object khác, Javaspace không sử dụng
cơ chế naming là phương tiện duy nhất để xác đònh các object đã được lưu trữ, mà chỉ
xem tên là một trong những thuộc tính của object mà nó sử dụng để phân biệt các
object. Nếu như JavaSpace không sử dụng tên làm phương tiện duy nhất thì làm thế
nào để một ứng dụng có thể tìm thấy và phục hồi object đã lưu trữ ? Câu trả lời là nó
sử dụng cơ chế attributes-based search giống như lookup service. Một object lưu trữ
trong Javaspace phải là những Entry ( object đó implements net.jini.core.entry.Entry)
của Javaspace. Mỗi entry được tìm kiếm thông qua một template đóng vai trò như một
“khuôn mẫu” của Entry cần tìm. Template thật ra cũng là một Entry object nhưng có
một số thuộc tính có giá trò cụ thể của Entry object cần tìm kiếm. Tuy nhiên để có
Java object lưu trữ trong Javaspace, chúng ta cần phải có thao tác ghi object vào. Và
Javasapce đã cung cấp tác vụ write, cho phép write một Entry object vào nó. Hơn thế
nữa, Javaspace còn cung cấp hai tác vụ tìm kiếm Entry là read và take. Tác vụ read
yêu cầu Javaspace trả về cho nó entry tương ứng với template mà nó đưa vào; tác vụ
take cũng có chức năng trên nhưng đồng thời entry bò lấy ra khỏi Javaspace. Ngoài ra
Javaspace còn cung cấp cơ chế notify một dòch vụ hay ứng dụng khi một entry
matches với template của nó. Với khả năng này, Javasapce đã cung cấp một cơ chế
đồng bộ dữ liệu cho các ứng dụng phân bố. Một vấn đề đặt ra là khả năng lưu trữ
object của Javaspace là bao nhiêu ? Dó nhiên khả năng chứa của Javaspace là hữu
hạn và như thế nó chỉ chứa các entry object trong khoảng thời gian được đăng ký
trước trong tác vụ write; khi hết khoảng thời gian này, Javaspace sẽ loại bỏ entry
object đó.
Javaspace có hai loại transient và persistent. Transient Javaspace chỉ lưu trữ các
object khi nó đang thực thi. Và tất cả các object sẽ không còn được lưu giữ khi
transient Javaspace ngưng thực thi. Trong khi đó, Persistent Javaspace log các object
đã được lưu trữ xuống đóa; vì thế, các object đã lưu trữ sẽ được phục hồi khi persistent
Javaspace thực thi lại sau khi nó chết.
Đến đây, một câu hỏi nữa được đặt ra với một vài tác vụ, làm thế nào Javaspace lại
trở thành công cụ hữu dụng hỗ trợ các ứng dụng tính toán phân bố ? Javaspace sẽ trả

lời bằng các đặc điểm của nó.
_ Spaces are shared :
Có thể cho phép nhiều ứng dụng đồng thời chia xẻ dữ liệu.
_ Spaces are persistent :
Các entry object lưu trữ trong Javaspace tồn tại cho đến khi chúng bò ứng
dụng lấy ra ngoài hoặc hết thời gian lease là thời gian tối đa mà Javaspace lưu
giữ entry đó.
_ Spaces are associative :
Sử dụng associative lookup để tìm kiếm các entry object thông qua các
template
_ Spaces are transactionally secure :
Javaspace cung cấp mô hình transaction bảo đảm một tác vụ trong Javaspace
là atomic
_ Exchange executable content :
Khi một enrty object còn được lưu trữ trong Javaspace, nó ở trạng thái thụ
động. Tức là ta không thể sửa code hay gọi các methods của nó. Nhưng khi
chúng ta read hoặc take chúng từ Javaspace thì một bản copy của object đó
được tạo và lúc này object đã trở về trạng thái tích cực. Chính đặc điểm này đã
cung cấp khả năng mở rộng hoạt động của các ứng dụng thông qua Javaspace.

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

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