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

CHƯƠNG TRÌNH ĐẢM BẢO CHỐNG TRÙNG VÉ TÀU HỎA KHI PHÂN TÁN CSDL TRÊN TẤT CẢ CÁC GA TRONG HỆ THỐNG ĐƯỜNG SẮT ( Tiểu luận LẬP TRÌNH MẠNG NÂNG CAO)

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 (608.69 KB, 39 trang )


ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN

Đề tài:
CHƯƠNG TRÌNH ĐẢM BẢO CHỐNG TRÙNG VÉ
TÀU HỎA KHI PHÂN TÁN CSDL TRÊN TẤT CẢ
CÁC GA TRONG HỆ THỐNG ĐƯỜNG SẮT
GVHD : PGS.TS. Lê Văn Sơn
HVTH : Hồ Hoài Tâm
Nguyễn Văn Thẩm
LỚP : Khoa học máy tính
KHÓA : 11 (2009 – 2011)
Đà Nẵng, tháng 03/2010
Giới thiệu Lập trình mạng nâng cao
GIỚI THIỆU
Ngày nay, ngành công nghệ thông tin trên thế giới đang được phát triển mạnh
mẽ và ngày càng được ứng dụng rộng rải vào nhiều lĩnh vực như: kinh tế, khoa học kỹ
thuật, quân sự, y tế, giao dục và nó đã đáp ứng được nhiều yêu cầu trong những lĩnh
vực này để phục vụ đời sống của con người.
Ở nước ta, hòa nhập chung cùng với sự phát triển của ngành công nghệ thông
tin và ứng dụng của nó vào các lĩnh vực của cuộc sống nhằm phục vụ các nhu cầu
như: nghiên cứu, học tập và lao động của con người. Nhà nước ta đã có những chính
sách cần thiết để đưa ngành công nghệ thông tin vào vị trí then chốt trong chiến lược
phát triển kinh tế của Đất nước.
Đặc biệt ngành công nghệ phần mềm, một lĩnh vực thuộc ngành công nghệ
thông tin, được chú trọng phát triển mạng mẽ để sản sinh ra những phần mềm có giá
trị đáp ứng nhu cầu của người dùng trong nước cũng như nhu cầu sử dụng của các
nước trên thế giới.
Việc áp dụng công nghệ thông tin để quản lý trong ngành đường sắt hiện nay đã


và đang được thực hiện có hiệu quả. Song bên cạnh đó thực trạng bán vé tàu trực
tuyến hiện nay còn có nhiều vấn đề bất cập đó là việc xử lý thông tin chưa tốt dẫn đến
tình trạng xử lý quá tải không đáp ứng được nhu cầu của khách hàng.
Vậy giải pháp nào để giải quyết bài toán này:
 Như chúng ta đã biết về lợi ích to lớn của cách làm việc theo nhóm và sức
mạnh của tập thể mang lại. Lợi ích của việc xử lý đa Server cũng vậy, nó cho phép
khai thác tối đa khả năng tính toán của từng Server trong nhóm. Ví dụ như một công
việc mà một Server giải quyết thì không hiệu quả và nhanh bằng nhiều Server cùng
giải quyết.
 Lợi ích thứ hai là nó cho phép khai thác tối đa nguồn dữ liệu của mỗi
Server đang có. Thông qua các giao thức triệu gọi từ xa, mỗi Server ở bất kỳ nơi đâu
cũng đều có thể xử lý được luồng thông tin do Server khác cung cấp khi có nhu cầu.
 Giao thức triệu gọi từ xa và các tác tử (Agent) tạo ra trên mạng là giải
pháp chính cho vấn đề xử lý đa Server. Tôi thiết nghĩ giải pháp xử lý đa Server này sẽ
rất hữu ích và hiệu quả cho bài toán đăng ký đặt vé tàu trực tuyến.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 2
Giới thiệu Lập trình mạng nâng cao
 Giải pháp xử lý đa Server mà cụ thể là các giao thức triệu gọi từ xa và các
tác tử tạo ra trên mạng là giải pháp để khai thác hiệu quả nguồn dữ liệu quý giá này.
Có nhiều giải pháp thực hiện đa Server và có nhiều ngôn ngữ bậc cao hỗ trợ cho việc
lập trình đa Server như Java, C# và một số ngôn ngữ khác. Ở đây tôi xin dùng ngôn
ngữ Java và giao thức RMI (Remote Method Invocation)
Với những ưu điểm trên tôi chọn đề tài “Ứng dụng lập trình phân tán để xây
dựng hệ thống đặt vé tàu trực tuyến”.
Xây dựng ứng dụng phân tán cho việc quản lý hệ thống đăng ký đặt vé tàu trực
tuyến. Thông tin đăng ký đặt vé được lưu trữ vào các cơ sở dữ liệu phân tán trên mạng
theo nhu cầu của người quản trị và hệ thống cho phép cấu hình ứng dụng từ xa.
Do đó, đê tài phải giải quyết được các vấn đề sau:
 Nghiên cứu tìm hiểu về mô hình xử lý phân tán
 Tìm hiểu kỷ thuật RMI của ngôn ngữ lập trình Java

 Xây dựng được mô hình phân tán cho hệ thống đặt vé tàu
 Sữ dụng cơ sở dữ liệu Access để thiết kế cơ sở dữ liệu
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 3
Cơ sở lý thuyết Lập trình mạng nâng cao
Chương 1 : CƠ SỞ LÝ THUYẾT
I. LẬP TRÌNH PHÂN TÁN
I.1. Định nghĩa
Có nhiều cách định nghĩa việc tính toán phân tán theo nhiều kiểu khác nhau.
Những nhà cung cấp đã tạo ra và quảng bá những hệ thống tính toán phân tán trong
nhiều năm, và phát triển những kiến trúc để cho phép xử lý dữ liệu và đối tượng phân
tán trên hệ thống mạng.
Một đặc trưng của tính toán phân tán đã nhận được nhiều sự đồng tình trong
thời gian gần đây và đó là trọng tâm của phần này. Một môi trường mà ta có thể tận
dụng chu trình và không gian rỗi của CPU trong hàng chục, hàng trăm hoặc hàng ngàn
hệ thống mạng để làm việc và phân chia việc xử lý các vấn đề một cách hiệu quả. Sự
phát triển những mô hình xử lý trước đây đã bị giới hạn bởi những băng thông rộng,
kết hợp với việc bảo mật, quản lý và những chuẩn hóa quan trọng. Khi công nghệ
peer-to-peer xuất hiện, một số nhà cung cấp bao gồm những hãng lớn như Intel,
Microsoft và Sun đã tận dụng những công nghệ mới này. Đồng thời, một dự án tính
toán phân tán worldwide mang tính thông minh đã được phát triển trong việc xử lý
thông tin.
Việc gia tăng khản năng làm việc và truyền thông của CPU giúp ích cho sự tính
toán phân tán hiệu quả hơn. Một số ứng dụng trong thực tế vẫn còn bị hạn chế về
những tiêu chuẩn đặc biệt. Vì vậy việc đáp ứng tốt những yêu cầu của khách hàng về
thời gian xử lý phù hợp và việc xử lý phân tán đã đáp ứng được yêu cầu này.
I.2. Tính toán phân tán và lưới tính toán
Khái niệm tính toán phân tán và lưới phân tán. Theo cách nghĩ khác nhau, tính
toán phân tán là lưới tính toán có thể thay thế cho nhau hoặc là tính toán phân tán là
một phần nhỏ của lưới tính toán. Lưới tính toán có thể định nghĩa như là chu trình xử
lý của hàng triệu hệ thống truy cập trong môi trường mạng.

Sun định nghĩa một lưới tính toán "là một cấu trúc phần cứng và phần mềm
đáp ứng khả năng tính toán tin cậy, nhanh chóng". Lưới tính toán có thể là hệ thống
máy tính để bàn. Nhưng trọng tâm của lưới tính toán là sức mạnh của các trạm làm
việc, khả năng giải quết những vấn đề liên quan đến những dữ liệu lớn. Và lưới tính
toán được hiểu rộng hơn là những hệ thống chuyên dụng dùng trong việc xử lý những
yêu cầu, nhiệm vụ khác nhau.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 4
Cơ sở lý thuyết Lập trình mạng nâng cao
Những hệ thống tính toán phân tán theo quy mô lớn được định nghĩa tương tự,
nhưng để tập hợp những tài nguyên của hàng trăm hay hàng nghìn hệ thống mạng
khác nhau thì điều này bị han chế bởi khả năng của bộ nhớ và tốc độ xử lý khi công
việc chính chưa được phân tán. Ở phần trên, có những mức kiến trúc phân tán khác
nhau là lưới phân tán và tính toán phân tán không được thực hiện trên một quy mô
mảng.
I.3. Cách thức làm việc trong lập trình phân tán
Hầu hết kiến trúc tính toán phân tán gồm có những tác nhân xử lý (agent) được
thiết đặt trên một số hệ thống máy trạm, và một hoặc nhiều máy chủ dành cho việc
quản lý tính toán phân tán. Có thể đòi hỏi trình duyệt cùng thiết lập những phần mềm
cho phép gửi những yêu cầu đến sử dụng tài nguyên của hệ thống.
Một Agent chạy trên một trạm, thông báo cho máy chủ quản lý rằng hệ thống
sẵn sàng cho việc xử lý, và yêu cầu các gói ứng dụng. Máy trạm tiếp nhận các gói ứng
dụng từ máy chủ và chạy phần mềm để xử lý các gói ứng dụng này, và gửi những kết
quả trở lại cho máy chủ. Ứng dụng có thể được thực hiện giống như trình bảo vệ màn
hình, hay đơn giản như trong hình nền, không ảnh hưởng đến việc sử dụng máy tính.
Nếu trình duyệt chạy những ứng dụng của riêng nó vào bất kỳ thời gian nào thì trình
điều khiển ngay lập tức được trả lại cho ứng dụng riêng, và quá trình xử lý ứng dụng
phân tán kết thúc. Điều này phải thực hiện ngay lập tức, sự chậm trễ trong việc trả lại
trình điều khiển sẻ khó có thể được chấp nhận đối với người sử dụng.
I.4. Vai trò của máy chủ trong ứng dụng phân tán
Máy chủ tiếp nhận yêu cầu của ứng dụng phân tán và phân chia những tác vụ

có khối lượng xử lý lớn thành các tác vụ nhỏ hơn để có thể thực hiện ở các máy trạm
(agent). Máy chủ chuyển các gói ứng dụng và gói phần mềm đặc biệt đến các agent và
theo dõi tiến trình xử lý của các agent này. Sau đó các máy trạm chạy thực hiện các
gói ứng dụng. Nhiệm vụ của máy chủ lúc này là tập hợp các kết quả được trả về từ các
máy trạm và tổ chức lại cấu trúc các kết quả trình bày. Điều này thường được hổ trợ từ
cơ sở dữ liệu.
Nếu máy chủ chủ không tiếp nhận việc xử lý từ các máy trạm trong một thời
gian nhất định, có thể máy chủ đã hủy kết nối hệ thống hoặc tạm ngừng cho việc bảo
trì. Các máy chủ này gởi các gói ứng dụng cho hệ thống khác hoặc cho các hệ thống
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 5
Cơ sở lý thuyết Lập trình mạng nâng cao
dự phòng nhằm đảm bảo cho kết quả được trả lại cho trình duyệt một cách nhanh
chóng. Máy chủ cũng thực hiện các chức năng quản lý cần thiết như là việc bảo mật hệ
thống, quản lý các kết nối và địa chỉ IP của máy trạm để tránh sự xung đột.
Sự phức tạp của kiến trúc phân tán phụ thuộc vào các môi trường khác nhau.
Một hệ thống lớn bao gồm nhiều thành phần tham gia hoặc một hệ thống chứa nhiều
tài nguyên phức tạp, các chính sách quản lý, mã hóa dữ liệu nhằm đảm bảo cho sự an
toàn của hệ thống. Nguồn tài nguyên là một điều cần thiết để định nghĩa các mức chức
năng xử lý, bộ nhớ và việc lưu trử của mỗi hệ thống
Các chính sách quản lý được sử dụng nhằm thay đổi độ phức tạp trong các
trường hợp tính toán trong môi trường xử lý phân tán. Người quản trị có thể định
nghĩa công việc nào và người sử dụng có thể truy cập vào hệ thống nào và quyền ưu
tiên đối với người dùng, và thấy rõ tầm quan trọng của mỗi dự án. Rõ ràng vấn đề về
quyền truy cập, bảo mật, mã hóa dữ liệu là cần thiết để ngăn ngừa những truy cập
không hợp pháp nhằm phá hoại hệ thống và dữ liệu trong hệ thống phân tán phải được
bảo đảm an toàn.
Khi ứng dụng lập trình phân tán được tích hợp vào môi trường internet thì nó
phải đáp ứng các tiêu chuẩn và giao thức cho việc truy cập tự động và những tác động
của nguồn tài nguyên trên mạng internet và giữa những kiến trúc phân tán khác nhau.
Hầu hết các giải pháp của tính toán phân tán bao gồm các công cụ, thư viện, các ứng

dụng API để làm nền tảng cho việc tạo ra các ứng dụng phân tán ban đầu.
Tuy việc tính toán phân tán thực sự là mô hình peer-to-peer, cấu trúc được mô
tả ở trên không thật sự là mô hình peer-to-peer. Chẳng hạn như trình duyệt này không
thể giao tiếp với trình duyệt khác. Những giải pháp của các nhà cung cấp bao gồm
Entropia, Data Synapse, Sun, Parabon, Avaki, and United Devices. Nền tảng mã
nguồn mở của Sun được quan tâm nhiều hơn đối với những hệ thống lớn.
Khi máy trạm trả kết quả trở về cho máy chủ. Trong trường hợp của
DataSynapse's LiveCluster, một máy trạm có thể làm việc độc lập hoặc chi sẻ tài
nguyên đối với các máy trạm khác. Kiến trúc cấp cáo của LiveCluster là việc chia nhỏ
ứng dụng thành các công việc nhỏ phụ thuộc vào việc tích hợp trong truyền thông.

Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 6
Cơ sở lý thuyết Lập trình mạng nâng cao
Chia nhỏ các công việc thực hiên
Sự cải tiến cho những ứng dụng thích hợp đã đem lại lợi ích lớn cho một số
công ty. Đối với hãng Intel đã áp dụng việc tổ chức ngân hàng sử dụng nền tảng dữ
liệu Synapse's LiveCluster, thời gian tính toán cho một dãy công việc được giảm từ 15
giờ xuống còn 30 phút với 100 máy tính xử lý. Để xử lý 200 tác vụ thì hệ thống đơn
cần 44 phút nhưng nó chỉ mất 33giây đối với hệ thống phân tán gồm 100 máy. Những
công ty sử dụng công nghệ lập trình phân tán nhằm gia tăng khả năng đáp ứng nhu cầu
của khách hàng về thời gian xử lý các công việc.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 7
Cơ sở lý thuyết Lập trình mạng nâng cao
I.5. Những đặc trưng của ứng dụng phân tán
Tất nhiên không phải tất cả các ứng dụng đều phù hợp cho việc tính toán phân
tán. Một ứng dụng khép kín chạy trong thời gian thực, ít phù hợp trong ứng dụng phân
tán. Ngay cả việc xử lý các tác vụ thông thường có thể lấy đi 1 giờ thì cần cân nhắc
giữa việc áp dụng tính toán phân tán và việc đảm bảo cho tính sắn sàng của ứng dụng.
Thay vào đó, ta cần áp dụng cho những tác vụ đòi hỏi việc tiêu tốn thời gian nhiều giờ,
nhiều ngày, tuần, tháng. Nói chung, những ứng dụng phù hợp nhất, bao gồm: những

tác vụ xử lý không tuần tự với khối lượng tính toán dữ liệu lớn. Việc tính toán khối
lượng lớn dữ liệu thường đi đôi với việc tính toán trong quá trình truyền thông nhưng
việc bạn không thể gởi một số lượng lớn dữ liệu đến mỗi trình duyệt trong môi trường
mạng mặc dù bạn có thể làm điều này trong nhiều giờ. Những chương trình với cơ sở
dữ liệu lớn có thể dễ dàng phân tích thì rất thích hợp cho mô hình này.
Rỏ ràng , bất kỳ ứng dụng nào với những tác vụ truy cập đến tập hợp dữ liệu
khổng lồ thì những hệ thống lớn sẽ phù hợp hơn những hệ thống đơn lẻ. Nếu dữ liệu
có liên qua thì một siêu máy tính sẽ phù hợp hơn. Một ứng dụng phân tán sẽ phù hợp
hơn trong tác vụ yêu cầu thời gian xử lý nhanh đối với một hệ thống dữ liệu lớn.
II. VẤN ĐỀ ĐỒNG BỘ HÓA TRONG LẬP TRÌNH PHÂN TÁN
II.1. Đặt vấn đề
Trong tất cả các hệ thống tin học, ta cần phải nghiên cứu các công cụ đủ mạnh
và hiệu quả để có thể đồng bộ hóa các tiến trình. Tính cấp thiết về mặt nguyên lý và
kỷ thuật của vấn đề này thể hiện ở hai nguyên nhân cơ bản sau đây:
1. Nhìn chung, các tiến trình kể cả các tiến trình xuất phát từ các ứng dụng độc
lập muốn truy cập vào các tài nguyên với số lượng vốn rất hạn chế hay truy cập vào
thông tin dùng chung cùng một lúc. Trường hợp này gọi là truy cập tương tranh.
Vì vậy, tương tranh là nguyên nhân chính của sự xung đột giữa các tiến trình
muốn truy cập vào tài nguyên dùng chung.
2. Các tiến trình của cùng một hệ ứng dụng hoạt động theo kiểu hợp lực để giải
quyết các bài toán đặt ra và cho kết quả nhanh chóng nhất. Điều này cho phép tăng
hiệu năng sử dụng thiết bị và hiệu quả hoạt động của chương trình.
Vì vậy, hợp lực là nguyên nhân chính của sự tác động tương hỗ được lập trình
giữa các tiến trình nhằm cho phép chúng tham gia vào các hoạt động chung.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 8
Cơ sở lý thuyết Lập trình mạng nâng cao
Sự tương tranh và hợp lực giữa các tiến trình đòi hỏi phải có trao đổi thông tin
qua lại với nhau. Trong các hệ thống tập trung, điều đó được thực hiện nhờ thuật toán
loại bỏ tương hổ thông qua các biến cùng tác động trong một vùng nhớ chung. Trong
hệ tin học phân tán, các thông tin cần trao đổi thông qua các kênh thuộc hệ thống viễn

thông.
II.1.1. Trật tự từng phần
Cần chú ý rằng, trong các hệ thống tin học tập trung, vấn đề đồng bộ hóa được
giải quyết thông qua cơ chế loại trừ tương hỗ. Cơ chế này cho phép sắp đặt (xác lập
trật tự) hoàn toàn các sự kiện. Trong thực tiễn, nói một cách chính xác, có một số hệ
thống vấn đề đồng bộ hóa chỉ đòi hỏi trật tự từng phần. Chình vì vậy trật tự hóa từng
phần giữa các sự kiện mà các tiến trình của nó cần phải đồng bộ là vấn đề cần phải
quan tâm giải quyết.
Trong các hệ thông phân tán, việc đồng bộ hóa chỉ đặt ra duy nhất vấn đề thiết
lập một trật tự giữa các sự kiện. Giữa các trạm khác nhau, trật tự đó chỉ có thể thực
hiện được thông qua việc trao đổi các thông điệp với nhau.
Giả sử rằng ta có thể xác định một trật tự giữa các sự kiện của hệ phân tán nhờ
vào quan hệ được ký hiệu là → và gọi là “có trước” hay “ở ngay trước”.
Quan hệ này tối thiểu phải thỏa mãn được các ràng buộc thể hiện trong bảng
sau đây:
C1: Nếu A và B là hai sự kiện của cùng một trạm và nếu A được thực hiện trước B thì
theo trật tự cục bộ của trạm ta có: A→B
C2: Nếu A là phát thông điệp bởi một trạm nào đó và nếu B là thu của thông điệp này
thì ta có: A→B
Hình vẽ sau đây cho ta một ví dụ về trật tự hóa từng phần của các sự kiện trong
hệ thống.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 9
Cơ sở lý thuyết Lập trình mạng nâng cao
Mô tả trật tự từng phần
Theo hình vẽ trên, ta có thể biểu diễn trật tự như sau:
Trật tự từng phần của các sự kiện
A1→A2→A3→A4→A5
B1→B2→B3→B4
Trao đổi thông điệp
A1→B2 và B3→A4

Chuyển qua
A1→A2→B2→B3→B4
B1→B2→B3→A4→A5
A1→A2→B2→B3→A4→A5
Ví dụ về các sự kiện không so sánh
B1 và A1, A2, A3
A3 và B2, B3, B4
Ràng buộc C1 thể hiện rằng trật tự có được bởi quan hệ có trước là tương thích
với các trật tự cục bộ được định nghĩa trong từng trạm.
Ràng buộc C2 nói lên nguyên tắc nhân quả.
Quan hệ có trước xác định một trật tự từng phần trên tập hợp các sự kiện của hệ
và trật tự này được thể hiện trong hình vẽ trên.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 10
Cơ sở lý thuyết Lập trình mạng nâng cao
II.1.2. Giả định chung các điều kiện
Các phương pháp mà ta giới thiệu trong chương này sẻ xuất phát từ các giả định
với các điều kiện chung như sau:
Các hệ phân tán được xây dựng trên cơ sở các trạm làm việc được mắc nối với
nhau (nối mạng). Mỗi một trạm có bộ nhớ riêng của mình và tuyệt đối không có bộ
nhớ chung.
Ta áp dụng các ký hiệu trong bảng sau:
STT Ký hiệu Giải thích
1 H1
Một trạm trong các trạm đều có thể liên lạc với các
trạm còn lại trong hệ.
2 H2
Không có lỗi truyền thông tin và không mất thông
điệp
3 H3
Trật tự nhận trên trạm j của dãy các thông điệp

cũng giống như chính tại trạm i là giống với trật tự
của nơi phát.
4 H4
Sự cố hay gián đoạn vật lý tai một trạm nào đó được
phát hiện sẽ lập tức thông báo đến tất cả các trạm có
ý định liên lạc với nó.
Như đã trình bày sự hoạt động của các mạng vận chuyển thường là tương thích
với các giả sử nêu trên và luôn luôn đòi hỏi một độ ổn định nhất định.
Trước hết, chúng ta nghiên cứu sự hoạt động của hệ thống không có sự cố, rồi
sau đó chúng ta sẽ chỉ ra hiệu ứng của sự cố hay việc phục hồi lại một trạm. Đó là
trường hợp mà ta nêu lên trong H4 ở trên.
Ngoài ra chúng ta còn giả sử rằng hiện tượng gây sự cố trên một trạm chỉ làm
cho trạm đó không liên lạc được với mạng mà hoàn toàn không ảnh hưởng đến sự hoạt
động của các trạm còn lại hoặc ít nhất là một nhóm các trạm khác.
Đồng bộ hóa theo trật tự tổng quát chặt chẽ
Như đã đặt vấn đề trong phần đầu, các hệ thống giải quyết vấn đề đồng bộ
thông qua trật tự tổng quát.
Trong một số trường hợp cần phải sắp xếp toàn bộ theo kiểu chặt chẻ các sự
kiện của hệ. Nguyên lý của vấn đề được khái quát như sau: Một tiến trình nào đó gửi
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 11
Cơ sở lý thuyết Lập trình mạng nâng cao
thông điệp để yêu cầu sử dụng tài nguyên, một tiến trình sử dụng xong tài nguyên nào
đó truyền một thông tin giải phóng khi nó ngừng chiếm dụng.
II.2.1. Cung cấp tập trung
Hiện tại, trong các hệ thống tập trung, mỗi một loại tài nguyên của hệ được
quản lý bởi một chương trình cung cấp duy nhất, ta gọi tắt là bộ cung cấp tài nguyên.
Chương trình này tiếp nhận tất cả các yêu cầu, khuyến nghị giải phóng và sắp xếp
chúng trong một hàng đợi xử lý theo kiểu loại trừ tương hỗ và xử lý chúng theo một
trật tự nhất định của hàng đợi này.
Trong các hệ phân tán, chương trình cung cấp nằm trên một trạm và các tiến

trình đề nghị lại ở trên các trạm khác, các yêu cầu và khuyến nghị giải phóng được
truyền cho chương trình cung cấp thông qua hình thức thông điệp chuyển theo các
kênh của hệ thống viễn thông. Chính vì vậy, nhu cầu sắp xếp các yêu cầu này theo một
trật tự nhất định nào đó luôn luôn được đặt ra.
Nếu chỉ có một thông điệp đến chương trình cung cấp thì trật tự đến thể hiện
một trất tự chặt chẽ. Ngược lại, nếu có nhiều thông điệp đến cùng một lúc thì việc sắp
xếp chúng phải theo kiểu loại trừ tương hỗ trong hàng đợi cục bộ của trạm có chứa
chương trình cung cấp. Điều đó cũng cho phép ta có được một trật tự chặt chẽ.
Trật tự có được tại trạm cung cấp có thể không giống như trật tự phát, nếu thời
gian truyền thông được cố định. Đây lại là trường hợp khá phổ biến của mạng máy
tính. Nhưng nếu ta muốn xử lý các thông điệp theo trình tự không tính tới thời gian
truyền, thì cần phải tính đến một trật tự tổng quát của các lần truyền thông điệp từ các
trạm khác nhau.
II.2.2. Cung cấp phân tán
Vì lý do ổn định và hiệu quả mà ta phải phân tán chức năng cung cấp trên nhiều
trạm khác nhau. Sự hoạt động gắn bó với nhau giữa các chương trình cung cấp là rất
cần thiết để đảm bảo cho hoạt động cung cấp được hoàn toàn chính xác
 Thuật toán cung cấp cho hệ phân tán
Một sự hoạt động gắn bó của các chương trình cung cấp phân tán quản lý trên
cùng một tập hợp các tài nguyên chỉ đạt được nếu tuân thủ các quy tắc sau, ở đây các
thông điệp được hiểu là các yêu cầu hay khuyến nghị giải phóng tài nguyên.
STT Quy tắc
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 12
Cơ sở lý thuyết Lập trình mạng nâng cao
1 Các bộ cung cấp bắt buộc phải thực hiện cùng một giải thuật.
2 Các bộ cung cấp đều nhận tất cả các thông điệp phát đi từ các tiến trình.
3
Các thông điệp phải được xử lý cùng một trật tự như nhau trong các
chương trình cung cấp.
Quy tắc sau cùng nhấn mạnh đến sự thiết yếu phải có một trật tự duy nhất trên

tập hợp các thông điệp của hệ. Trật tự này có thể được thực hiện thông qua việc hợp
lực giữa các tiến trình cung cấp giữa các tiến trình phát thông điệp
II.3. Sắp xếp kiểu đóng dấu
Đóng dấu là hành vi gán giá trị nguyên cho một thông điệp nhằm ghi nhận thời
điểm truyền trên cơ sở tham chiếu đồng hồ logic.
Nội dung cơ bản của phương pháp này là tram phát được gắn một giá trị gọi là
dấu. Giá trị này có tính chất thời điểm cho trạm phát thông tin và dựa vào đồng hồ
logic cục bộ của chính trạm.
Các đồng hồ này được lấy lại thông qua hội thoại giữa các trạm.
II.3.1. Cấu tạo trình tự tổng quát chặt chẽ
Giải thuật được trình bày ở đây là giải thuật Lamport nhằm cho phép ghi lại
các sự kiện của hệ tin học phân tán.
Mỗi trạm s đều có trang bị công tơ với các giá trị nguyên gọi là Hs. Đó chính là
đồng hồ logic tăng lên giữa hai sự kiện kế tiếp. Trạm e phát thông điệp ghi dấu E của
mình dựa trên giá trị hiện hành của He. Khi nhận được thông điệp, trạm nhận r cập
nhật đồng hồ Hr riêng của mình bằng giải thuật sau đây:
Sự kiện “Nhận thông điệp” lúc này được ghi nhận bằng giá trị của Hr. Thuật
toán này đảm bảo rằng thời gian nhận thông điệp là sau thời gian phát nó đi.
Với thời gian này cho phép xác định một quan hệ trật tự toàn bộ mà ta đã ký
hiệu → và cho phép kiểm tra được các điều kiện trong C1 và C2 của phần trước.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 13
Nếu Hr, thì
Hr:= E + 1
Chấm dứt
Cơ sở lý thuyết Lập trình mạng nâng cao
Một sự kiện a sinh ra trong trạm i và được đánh dấu bởi đồng hồ cục bộ gọi là
Hi(a). Nếu a và b đều là hai sự kiện trên hai trạm i và j, ta luôn luôn có qua hệ xác
định như sau:
Đó là trật tự không chặt chẽ do vì hai sự kiện trên hai trạm khác nhau có thể
đến cùng một thời điểm giống nhau.

Ta có thể mở rộng quan hệ → thành quan hệ trật tự chặt chẽ => bằng cách kết
hợp một số khác cố định cho mỗi trạm và bằng cách đánh dấu thời gian cho mỗi sự
kiện a của trạm i bằng cặp (Hi(a),i).
Theo định nghĩa ta có:
II.3.2. Thuyết minh sử dụng
a. Giới thiệu giải thuật loại trừ tương hỗ
Loai trừ tương hỗ có thể được điều khiển trên một trạm trung tâm có nhiệm vụ
nhận tất cả các thông điệp và khuyến nghị giải phóng. Trạm này duy trì một hàng đợi,
sắp xếp các yêu cầu theo trật tự đến và phục vụ cho từng thông điệp một trong trật tự
này.
Phân tán giải thuật này kéo theo việc phân tán các chức năng cung cấp mà cần
phải điều khiển hàng đợi trên trạm. Do vây, một trạm chuyên cho việc tiếp nhận các
yêu cầu và khuyến nghị giải phóng từ tất cả các trạm còn lại. Một trật tự giống nhau
trên các trạm chỉ đạt được, nếu ta áp dụng dấu trong các thông điệp bởi các đồng hồ
logic truyền và đánh số các trạm. Thêm vào đó, để cho một trạm có thể ra quyết định
bằng việc tham chiếu duy nhất vào hàng đợi của mình, nó cần phải được nhận một
thông điệp của từng trạm khẳng định rằng không có thông điệp nào trước các thông
điệp khác mà còn đang quá cảnh trên đường.
Thuật toán loại trừ tương hỗ có thể mô tả theo sơ đồ sau đây.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 14
a→b <=> Hi(a) < Hi(b)
a => b <=> (Hi(a) < Hi(b))
hay
(Hi(a) = Hi(b) và i < j)
Cơ sở lý thuyết Lập trình mạng nâng cao
 Trạm i của mạng có thể gửi cho các trạm khác thông điệp có dạng
(T,Hi,i), trong đó Hi là dấu của thông điệp có nghĩa là đồng hồ logic của nó và T có thể
nhận một trong ba giá trị REQ, REL và ACQ.
Ba giá trị này xác định bản chất của ba loại thông điệp khác nhau:
STT Thông điệp Giải thích

1 REQ
Thông điệp REQ được phát đi cho tất cả các trạm, khi
trạm i muốn vào trong đoạn găng.
2 REL
Thông điệp REL được phát đi cho tất cả các trạm, khi
trạm i đã rời khỏi đoạn găng.
3 ACQ
Thông điệp ACQ được gửi bởi trạm j cho trạm i, khi
trạm j đã nhận được từ trạm i thông điệp REQ
 Mỗi trạm quản lý một hàng đợi các thông điệp được sắp xếp hoàn toàn
bởi mối quan hệ => theo cặp <thời gian, số> của từng thông điệp. Theo cấu trúc, hàng
đợi luôn luôn chứa một thông điệp và chỉ một thường trực trong mỗi trạm, bao gồm
trạm cục bộ. Khi có một thông điệp được gửi đi bởi trạm i, đồng thời nó cũng được ghi
trong hàng đợi của máy trạm này.
Giả sử rằng mỗi hàng đợi ban đầu chứa các thông điệp:
Trong đó, i, Hinit là thời điểm khởi sự giống nhau cho tất cả các trạm.
 Trên mỗi trạm, khi nhận được một thông điệp dạng (REQ, Hi, i) hay
(REL, Hi,i), thông điệp này thay thế thông điệp Mi bất chấp nó là gì. Khi nhập thông
điệp loại (ACQ, Hi , i), thông điệp này thay thế Mi ngoại trừ nếu Mi là một yêu cầu mà
trong trường hợp đó ACQ bị bỏ qua. Do vậy, ta có thể tiết kiệm việc gửi đi thông điệp
ACQ cho trạm i khi trạm này đã gửi một thông điệp REQ và không còn thông điệp
REL.
 Trạm i được quyền vào đoạn găng khi thông điệp REQ của nó đến trước
theo định nghĩa của hệ => tất cả các thông điệp khác trong hàng đợi của nó. Cần nhắc
lại rằng hàng đợi chứa một thông điệp loại này trên một trạm.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 15
Mi = (REQ, Hinit,i)
Cơ sở lý thuyết Lập trình mạng nâng cao
b. Kiểm nghiệm giải thuật
Các yêu cầu vào đoạn găng được xử lý theo trật tự FIFO và theo quan hệ =>.

Để chứng minh điều đó, ta lưu ý rằng khi trạm i quyết định vào đoạn găng, nó không
thể đưa vào trong mạng yêu cầu REQ nào trước bối cảnh sau. Thực tế, khi trạm i vào
đoạn găng có nghĩa là nó đã nhận thông điệp từ tất cả các trạm khác và tất cả các
thông điệp đều sau thông điệp REQ của riêng nó.
Ta kiểm tra các đặc tính sau:
 Trạm i đang ở trong đoạn găng là trạm duy nhất nằm trong đoạn găng
ấy. Thực tế cho thấy thông điệp REQ được phát bởi trạm i vẫn tiếp tục tồn tại trong tất
cả các hàng đợi cho đến khi nó được thay thế bởi thông điệp REL.
 Trạm đã yêu cầu vào đoạn găng phải đảm bảo thời hạn và phải ra khỏi
đoạn găng sau một khoảng thời gian xác định. Thuật toán thể hiện tính đồng đều và
tránh được tổn thất.
c. Ví dụ
Hãy xét một mạng bao gồm ba trạm trong số đó có hai trạm 1 và 2 yêu cầu vào
đoạn găng tại thời điểm 2 của đồng hồ logic của chúng. Tập hợp các thông điệp truyền
giữa chúng với nhau có thể mô tả trong hình vẽ. Trong hình vẽ này, ta cũng có thể tìm
thấy một số trạng thái của các hàng đợi thông điệp.
d. Phản ứng với sự cố
Sư cố xẩy ra với trạm chưa vào được trong đoạn găng không làm rối loạn hoạt
động của giải thuật với điều kiện là nó gây ra việc truyền thông điệp đặc biệt
vang_mat (vắng) cho việc chuyển tải ở mạng giao vận. Do có trang bị như thế, việc
vào đoạn găng trở nên không được nhanh chóng và dễ dàng cho các trạm khác. Nếu
trạm có sự cố đã gửi yêu cầu, thì nó kết thúc với lý do trở thành trước đối với tất cả các
trạm khác.
Khi một trạm lại được đưa vào trong mạng sau khi đã có sự cố và đã được khắc
phục, nó cần phải kiến tạo lại trạng thái hiện hành của các yêu cầu. Để đảm bảo điều
đó, nó phát đi thông điệp vao_lai (xin vào lại) và để trả lời, các trạm gửi hoặc thời gian
của yêu cầu cuối cùng của nó REQ không được thỏa mãn hoặc một thông điệp REL.
Mạng cần phải bổ khuyết cho các trạm bị sự cố bằng cách gửi thông điệp vang_mat.
Khi nó đã nhận tất cả các trả lời cho thông điệp vao_lai, trạm vừa đưa vào đó có thể
bắt đầu lại bằng các yêu cầu.

e. Thuyết minh
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 16
Cơ sở lý thuyết Lập trình mạng nâng cao
Để cho giải thuật này, điều kiện đủ là một trạm cần biết gần đúng trạng thái của
các trạm trên mạng. Sự xấp xỉ này không đặt ra rạng thái của các trạm mặc định cho
loại trừ tương hỗ. Nó có thể làm chậm một tí việc vào đoạn găng của một trạm.
Loại trừ tương hỗ nhờ dấu
H1 H2 H3
REQ,2,1 2 REQ,2,1 3 REQ,2,1 5
REQ,2,2 3 REQ,2,2 2 REQ,2,2 3
ACQ,6,3 7 ACQ,4,3 5 REL,0,3 0
REL,10,1 11
REQ,2,2 2
ACQ,4,3 5
Ta nhận thấy rằng:
Trạm 1 vào đoạn găng tại H1 = 7
Trạm 2 vào đoạn găng tại H2 = 11
2.4. Kết luận
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 17
Cơ sở lý thuyết Lập trình mạng nâng cao
Các dấu được cung cấp bởi đồng hồ logic cho phép đánh dấu các sự kiện và
không xác định một trật tự tổng quan chặt chẽ. Nhưng tại đây ta không có quan hệ nào
giữa các sự kiện và các giá trị của dấu.
Trên một trạm cho trước, việc nhận thông điệp có đóng dấu không thể cho nó
biết được sự kiện nào đến trước hay đang ở trên đường. Như vậy, ta còn phải nhận
thông điệp từ các trạm khác còn lại.
III. KỶ THUẬT RMI CỦA CÔNG NGHỆ LẬP TRÌNH JAVA
III.1. Tổng quan về RMI
Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục hay
gọi hàm. Mã lệnh của các hàm hay thủ tục được nạp thẳng vào ký ức và thực thi ngay

trên máy cục bộ. Đối với các hàm thư viện như System.out.println()chẳng
hạn thường không cần phải quan tâm đến cách thức mà hàm thư viện này được cài đặt.
Điều mà hầu hết các lập trình viện quan tâm là đối số truyền cho hàm và kết quả trả
về. Vậy có cách nào nạp nội dung của hàm hay đối tượng ở một máy nào đó và gọi
chúng từ một máy khác hay không? Đây chính là nội dung của lập trình phân tán mã
lệnh. RMI (Remote Method Invoke) mang ý nghĩa triệu gọi phương thức từ xa là cách
thức giao tiếp giữa các đối tượng Java có mã lệnh cài đặt nằm trên các máy khác nhau
có thể triệu gọi lẫn nhau. RMI được xem là một kỷ thuật trong lập trình Java nó gồm
có hai chương trình riêng biệt, một chủ (server) và một khách (client). Một chương
trình trên máy chủ có thể tạo ra những đối tượng từ xa. Một chương trình trên máy
khách có thể thu được những sự tham chiếu từ xa tới một hoặc nhiều đối tượng ở xa
trên một chủ và sau đó kéo theo những phương thức trên chúng. RMI cung cấp cơ chế
bởi bất cứ máy chủ và máy khách truyên thông và chuyển thông tin sau và trước.
Những ứng dụng mà ta có thể thấy rỏ được của đối tượng phân tán đó là:
 Xác định một đối tượng từ xa: Những ứng dụng có thể thu được khi
giải quyết vấn đề xử lý các đối tượng ở xa. Vi du như một ứng dụng có thể đăng ký
một đối tượng từ xa với tên gọi đơn giản dể sữ dụng với RMI, thì trước hết ta phải
đăng ký RMI. Sự lựa chọn, một ứng dụng có thể giải quyết công việc đi qua và trả lại
cho một đối tượng ở xa cũng như có thể gọi các bộ phận nhỏ từ xa khác.
 Cách giao tiếp giữa các đối tượng ở xa: Chi tiết của cách giao tiếp với
các đối tượng ở xa đều được điều khiển bởi RMI. Khi đó người lập trình chỉ nhìn vào
sự giao tiếp từ xa giống như gọi một phương thức trong Java.
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 18
Cơ sở lý thuyết Lập trình mạng nâng cao
 Định nghĩa lớp cho các đối tượng: Bởi vì RMI cho phép những đối
tượng sẻ được chuyển sau và về phía trước, nó cung cấp cở chế để tải những định
nghĩa của lớp đối tượng cũng như để truyền dữ liệu của đối tượng.
Sự minh họa trong hình vẽ sau miêu tả một RMI phân phối ứng dụng mà sử
dụng nới đăng ký RMI để thu được những tham chiếu của các đối tượng ở xa. Máy
chủ gọi đăng ký tới một tên gợi nhớ với đối tượng ở xa. Khách hàng xem đối tượng ở

xa bởi tên của nó trong nới đăng ký của máy chủ và sau đó gọi một phương thức trên
nó. Sự minh họa cũng chỉ ra rằng hệ thống RMI sử dụng một mạng máy chủ hiện hữu
để tải những lớp định nghĩa, từ máy chủ tới khách hàng và từ khách hàng tới máy chủ,
cho những đối tượng khi cần thiết.
Mô hình triệu gọi các đối tượng từ xa
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 19
Cơ sở lý thuyết Lập trình mạng nâng cao
III.1.1. Những đối tượng, giao diện và những phương thức từ xa
Như mọi ứng dụng khác của Java, thì một ứng dụng phân tán được xây dựng
bởi việc sử dụng thư viện Java RMI để tạo ra những giao diện và những lớp. Những
giao diện này khai báo những phương thức. Những lớp thực hiện những phương thức
khai báo bên trong những giao diện và có thể khai báo những phương thức bổ sung tốt.
Một đối tượng được xem là ở xa khi nó được thực hiện bởi một giao diện ở xa,
mà có những đặc trưng sau:
 Một giao diện ở xa để mở rộng giao diên java.rmi.Remote
 Mỗi phương thức của một giao diên được biểu thị bằng
java.rmi.RemoteException trong một câu lệnh throws (xử lý các ngoại lệ) của
nó, trong những ứng dụng bất kỳ nào.
RMI xử lý một đối tượng ở xa khác nhau từ một đối tượng không ở xa khi đối
tượng được chuyển từ máy ảo Java này tới máy ảo Java khác. Nói đúng hơn đó là một
quá trình sao chép sự thực hiện trong máy ảo Java, RMI cung cấp một stub ở xa thay
thế cho một đối tượng ở xa. Stub hoạt động như 1 vùng miêu tả hoặc sự uỷ
quyền cho đối tượng từ xa và điều cơ bản là nó tham chiếu biệt lập đến client.
Client cải tiến một phương thức trên Stub cục bộ, nó có thể đáp ứng lại viêc
mang theo sự cải tiến về phương thức trên đối tượng từ xa. Một Stub cho đối
tượng từ xa thực thi giống như một tập các giao diện từ xa mà các đối tượng từ xa thể
hiện. Các thuộc tính này có thể là một Stub để xử lý bất kì lỗi nào của giao diện mà
các đối tượng từ xa thể hiện. Tuy nhiên, chỉ duy nhất các phương thức đó định nghĩa
trong giao diện từ xa đã sẵn có mới được gọi từ máy ảo Java tiếp nhận.
III.1.2. Tạo các ứng dụng phân tán nhờ sử dụng RMI

Sử dụng RMI để phát triển một ứng dụng phân tán bao gồm các bước sau:
 Thiết kế và biểu diễn các thành phần ứng dụng phân tán.
 Biên dịch các file nguồn.
 Tạo các lớp có thể truy cập mạng.
 Bắt đầu trình ứng dụng.
a. Thiết kế và biểu diễn các thành phần ứng dụng phân tán
Đầu tiên, xác định rõ cấu trúc ứng dụng bao gồm: các thành phần của các đối
tượng cục bộ và các thành phần có khả năng truy cập từ xa. Bước này bao gồm:
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 20
Cơ sở lý thuyết Lập trình mạng nâng cao
 Định nghĩa các đối tượng từ xa: Một giao diện từ xa chỉ rõ các
phương thức có thể được cải tiến một cách biệt lập với một client. Lập trình client
trong giao diện từ xa chứ không lập trình trong các lớp thể hiện của các giao diện này.
Thiết kế các giao diện bao gồm việc xác định rõ các kiểu của đối tượng sẽ sử dụng như
là các tham số và các giá trị trả về cho các phương thức này. Nếu bất kỳ điều gì của
các lớp hoặc của các giao diện vẫn chưa tồn tại thì bạn cần định nghĩa lại chúng.
 Thực hiện các đối tượng từ xa: các đối tượng phải thực hiện 1 hoặc
nhiều các giao diện từ xa. Lớp đối tượng từ xa có thể bao gồm sự thực hiện của các
phương thức và giao diện khác đã có sẵn. Nếu bất kỳ các lớp cục bộ nào được dùng
như một tham số hoặc các giá trị trả về bất kỳ một thao tác nào trong các phương thức
này thì chúng phải đươc thể hiện tốt nhất.
 Thực hiện các client: các Client sử dụng các giao diện từ xa có thể
được thực hiện tại bất kỳ thời điểm nào sau khi các giao diện từ xa này được định
nghĩa và bao gồm các đối tượng từ xa vừa được triển khai ngay sau đó.
b. Biên dịch các file nguồn
Với bất kỳ chương trình Java nào, bạn đều sử dụng trình biên dịch Javac để
dịch các file nguồn. Các file nguồn này chứa các khai báo của các giao diện từ xa, sự
thể hiện của chúng tới bất cứ các lớp server và lớp client nào khác.
c. Tạo các lớp có thể truy cập mạng
Trong bước này, chắc chắn rằng chúng ta phải lập thành mạng định danh các

lớp có thể truy cập được. Như những định nghĩa cho những giao diện từ xa và những
kiểu có liên hệ của nó và những định nghĩa cho những lớp mà cần tải xuống từ client
hoặc server.Những lớp tiêu biểu được định nghĩa có thể tiếp cận mạng xuyên qua một
web server.
d. Bắt đầu trình ứng dụng
Việc khởi động ứng dụng bao gồm chạy đối tượng đăng ký từ xa với RMI, tiếp
đó là chạy Server và chạy Client cuối.
III.2. Viết một RMI Server
Việc tính toán trên server tiếp nhận yêu cầu từ client, thực hiện việc xử lý yêu
cầu và trả lại bất kỳ kết quả nào. Mã lệnh của server bao gồm có một giao diện và một
lớp. Giao diện định nghĩa những phương thức mà có thể được gọi từ client. Thực chất,
giao diện định nghĩa cảnh quan của client của đối tượng từ xa. Lớp cung cấp sự thực
hiện đó là:
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 21
Cơ sở lý thuyết Lập trình mạng nâng cao
 Thiết kế một giao diện từ xa: Mục này giải thich việc tính toán giao
diện, mà cung cấp kết nối giữa client và server.
 Thực hiện một giao diện từ xa: Mục này thăm dò lớp thực hiện giao
diện Compute, do đó mà thực hiện với một đối tượng từ xa. Lớp này cung cấp cho
phân còn lại của mã lệnh tạo ra chương trình server, kể cả một hàm main phương
thức tạo ra một thể hiện của đối tượng ở xa, đăng ký nó với nới đăng ký RMI và thiết
lập người quản lý an toàn.
III.2.1. Thiết kế một giao diện từ xa
Tại trung tâm của máy tính là một giao thức cho phép những yêu cầu trình bày
với máy tính, máy tính thực hiện những yêu cầu đó và đưa ra kết quả cuối cùng trả về
cho khách hàng (client). Đây là một giao thức hiển thị trong những giao diện mà được
máy tính hổ trợ. Những thông điệp từ xa cho giao thức này được minh họa ở hình sau:
Triệu gọi lẫn nhau giữa Client và Server
Mỗi giao diện chứa đựng một phương thức đơn. Tính toán thực hiện các thao
tác từ xa, Compute, cho phép trình bày những yêu cầu tới máy. Giao diện khác hàng,

Task định nghĩa như thế nào để thực hiện tính toán, trình bày một nhiệm vụ.
Dưới đây là mã nguồn cho giao diện Compute:

package compute;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Compute extends Remote
{
<T> T executeTask(Task<T> t) throws RemoteException;
}
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 22
Cơ sở lý thuyết Lập trình mạng nâng cao
Bởi việc mở rộng giao diện java.rmi.Remote, giao diện Compute nhận
biết như một phương thức có thể gọi từ máy ảo Java khác. Bất kỳ đối tượng nào thực
hiện giao diện này có thể là một đối tượng từ xa.
Như một giao diện từ xa executeTask là một phương thức của một hệ thống
từ xa. Bởi vậy, đây là phương thức được định nghĩa như hiện thân cho khản năng ném
một java.rmi.RemoteException. Đây là một ngoại lệ được ném ra bởi hệ
thống RMI từ một lời triệu gọi phương thức từ xa để cho biết rằng việc truyền thông
tin bị thất bại hoặc một lỗi ở giao thức đã xuất hiện. Một RemoteException là một
phương thức để kiểm tra ngoại lệ, như vậy bất kỳ mã nguồn nào kéo theo một phương
thức từ xa cần điều khiển ngoại lệ này bởi một hoặc bắt nó khai báo throws trong
mệnh đề của nó. Giao diện thứ hai cần cho công nghệ tính toán là giao diện Task, mà
là phương thức kiểu tham số của executeTask trong giao diện Compute. Giao
diện Compute.Task định nghĩa giao diện giữa công nghệ tính toán và công việc mà
nó cần làm, cung cấp cách thức để bắt đầu công công việc. Dưới đây là mã nguồn của
giao diện Task
package compute
public interface Task<T>
{

T execute();
}
Giao diện Task được định nghĩa là một phương thức mà không có những tham
số và không ném ra những ngoại lệ. Bởi vì giao diện không mở rộng Remote, phương
thức trong giao diện không cần liệt kê java.rmi.RemoteException trong mệnh
đề throws của nó.
Giao diện Compute chứa phương thức executeTask, quay trả lại kết quả
thực hiện của giao diện Task chuyển cho nó. Do đó phương thức executeTask có
kiểu tham biến của chính nó T, đó là kiểu kết hợp trả về chính nó có kết quả thông qua
Task. RMI sử dụng Java xếp theo thứ tự cơ chế để truyền tải những đối tượng có giá
trị giữa máy ảo Java. Một đối tượng được xem xét có thể sắp xếp theo thứ tự, lớp của
nó phải thực hiện java.rmi.Serializable là giao diện đặc trưng. Bởi vậy,
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 23
Cơ sở lý thuyết Lập trình mạng nâng cao
những lớp thực hiện giao diện Task cũng phải thực hiện Serializable, cũng như
những lớp của đối tượng sử dụng thay thế cho kết quả yêu cầu.
Những yêu cầu khác nhau có thể được thực hiện bởi một đối tượng Compute
lâu dài nhưng chúng thực hiện kiểu của Task. Những lớp thực hiện giao diện này có
thể chứa đựng bất kỳ dữ liệu nào cần cho tính toán của yêu cầu và mọi cái khác mà
những phương thức cần cho tính toán.
Ở đây RMI làm sao để có thể đơn giản việc tính toán. Bởi vì RMI có thể giả
thiết rằng những đối tượng Task được viết trong ngôn ngữ lập trình Java, nhưng sự
thi hành của đối tượng Task này thì không biết trước được tính toán có được tải
xuống bởi RMI vào trong máy ảo Java khi cần. Khản năng này cho phép khách hành
định nghĩa những loại nhiệm vụ mới sẻ được chạy trên máy chủ mà không cần mã rỏ
ràng được cài đặt trên máy đó.
Máy tính thực hiện lớp ComputeEngine, thực hiện giao diện Compute cho
phép những yêu cầu khác nhau trình bày tới nó bởi những lời gọi phương thức
executeTask của nó. Những yêu cầu này được sử dụng để thực hiện những phương
thức execute và kết quả được trả lại cho khách hàng từ xa.

Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 24
Cơ sở lý thuyết Lập trình mạng nâng cao
III.2.2. Thực hiện một giao diên từ xa
Mục này nói về nhiệm vụ của việc thực hiện một lớp cho công nghệ tính toán.
Trong tổng thể, một lớp thực hiện một giao diện từ xa cần phải làm ít nhất những công
việc sau:
 Khai báo những giao diện từ xa được thực hiện.
 Cung cấp một sự thực hiện cho mỗi phương thức từ xa trong những
giao diện từ xa.
Một chương trình server RMI cần tạo ra những đối tượng từ xa ban đầu và đem
chúng tới thực hiện RMI, làm cho chúng trở nên sẵn sàng nhận những lời triệu gọi từ
xa mới. Thủ tục cài đặt này có thể cũng được đóng gói trong một phương pháp của bản
thân lớp thực hiện đối tượng từ xa hoặc bao gồm trong lớp khác trọn vẹn. Thủ tục cài
đặt cần phải làm như sau:
 Tạo ra và cài đặt hệ thống quản lý an toàn
 Tạo ra và đem tới một hoặc nhiều đối tượng từ xa
 Đăng ký ít nhất một đối tượng từ xa với nơi đăng ký RMI cho mục
đích tự nạp chương trình ngồn.
a. Khai báo việc thực hiện những giao diện từ xa
Thực hiện lớp tính toán được khai báo như sau:
public class ComputeEngine implements Compute
Những trạng thái này thực hiện lớp giao diện từ xa Compute và có thể được sử
dụng cho một đối tượng từ xa.
Lớp ComputeEngine định nghĩa một lớp thực hiện đối tượng từ xa mà thực
hiện giao diện từ xa và không có giao diện nào khác. Lớp ComputeEngine cũng
chứa đựng hai phân tử chương trình có thể thực hiện và có thể triệu gọi cục bộ. Trước
hết những phân tử này là một người xây dựng của ComputeEngine. Vị trí của
những phân tử này là một phương thức main được tạo ra sử dụng ComputeEngine
và làm cho nó sẵn sàng tới những trình khách.
b. Những đối tượng chuyển qua trong RMI

Những đối số hoặc những giá trị trả lại từ những phương thức từ xa của hầu
như bất kỳ kiểu nào, bao gồm những đối tượng cục bộ, những đối tượng từ xa và kiểu
dữ liệu nguyên thủy. Chính xác hơn, bất kỳ kiểu nào có thể được chuyển hoặc từ một
phương thức từ xa miễn là tồn tại một kiểu mà là một kiểu dữ liệu nguyên thủy, một
Nhóm học viên: Hồ Hoài Tâm – Nguyễn Văn Thẩm Trang 25

×