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

TRÌNH BÀY THUẬT TOÁN LAMPORT VÀ ỨNG DỤNG CỦA NÓ

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

1
LỜI NÓI ĐẦU
Hiện nay thành tựu về Khoa Học - Công Nghệ phát triển mạnh mẽ đã làm thay đổi
cách nhìn, cách nghĩ của con người từ đó làm thay đổi bộ mặt của xã hội. Đặc biệt là sự
phát triển vượt bậc trong lĩnh vực công nghệ thông tin. Từ những chiếc máy tính điện tử
đầu tiên đã cho ra đời những hệ thống máy tính hoạt động đơn lẻ với nhau ta gọi là máy
tính đơn sau đó có thể nối mạng với nhau để trở thành một mạng máy tính, từ hệ máy
tính tập trung đã phát triển thành hệ máy tính phân tán. Cứ một thành tựu mới ra đời
thay thế cho những thành tựu trước đó như vậy đã kéo theo hàng loạt vấn đề nảy sinh.
Chẳng hạn như sự ra đời của hệ tin học phân tán đòi hỏi phải có phương tiện, kỹ thuật
để nối hệ thống các máy tính ở nhiều nơi lại với nhau thông qua hệ thống truyền thông
dưới sự điều hành thống nhất của một phần mềm cho phép hoạt động theo kiểu phối
hợp lại với nhau nhằm giải quyết một vấn đề chung hay chia sẻ các tài nguyên.
Một ví dụ điển hình được đưa ra đối với hệ tin học phân tán như sau. Nếu một tài
khoản được mở trong ngân hàng thì mỗi tài khoản sẽ được gán một mã số duy nhất và
được lưu thành một mẫu tin trong CSDL. Chủ tài khoản có thể ở bất kì nơi nào trong cả
nước cũng có thể truy cập vào tài khoản của mình thông qua mã số tài khoản đó. Giả sử
hai vợ chồng cùng nhau mở một tài khoản trong ngân hàng, lúc này đây hai người ở hai
ngân hàng khác nhau cùng truy cập vào tài khoản chung của họ. Một người truy cập
vào để rút tiền còn người kia truy cập vào để xem số tiền còn lại của mình. Nếu 2 công
việc này xảy ra cùng một lúc thì vấn đề gì sẽ xảy ra? Vấn đề sai lệch thông tin cho
người muốn truy cập để xem số tiền còn lại là điều đương nhiên. Ngăn chặn khuyết
điểm này người ta đưa ra hàng loạt các phương pháp, thuật toán để đảm bảo khi trao đổi
thông tin vẫn đảm bảo tính gắn bó (nhất quán) trong vấn đề cập nhập thông tin cũng
như truy vấn thông tin, trong đó vấn đề về sự gắn bó thông tin trong cơ sở dữ liệu phân
tán là một trong những vấn đề cơ bản.
Vì vậy trong nội dung của tiểu luận này em trình bày hai vấn đề sau:
Phần I : Lý thuyết.
Trình bày thuật toán lamport và ứng dụng của nó
Phần II: Bài tập.
Hãy viết chương trình mô phỏng quá trình đồng bộ hệ thống bán vé tàu trực tuyến,


số server phục vụ cho hệ là n(n>=3)
Tiểu luận Hệ Phân Tán
2
Em xin chõn thnh cm n TS. Lờ Vn Sn ó cung cp kin thc v ti liu
em cú th hon thnh tiu lun ny.
Do thi gian v kin thc cú hn nờn tiu lun ny khụng trỏnh khi nhng sai sút.
Rt mong nhn c s gúp ý ca thy v cỏc bn cựng lp
CHặNG I
CHặNG I


CAẽC KHAẽI NIM Vệ H TIN HOĩC PHN TAẽN
CAẽC KHAẽI NIM Vệ H TIN HOĩC PHN TAẽN
1. 1 Hóỷ tin hoỹc phỏn taùn.
1. 1 Hóỷ tin hoỹc phỏn taùn.
Hóỷ tin hoỹc phỏn taùn laỡ hóỷ thọỳng xổớ lyù thọng tin bao gọửm nhióửu bọỹ xổớ lyù hoỷc caùc
bọỹ xổớ lyù nũm ồớ xa taỷi caùc vở trờ khaùc nhau vaỡ õổồỹc lión kóỳt vồùi nhau thọng qua phổồng
tióỷn vióựn thọng dổồùi sổỷ thọỳng nhỏỳt cuớa hóỷ õióửu haỡnh.
Hóỷ tin hoỹc phỏn taùn laỡ hóỷ thọỳng khọng chia seớ bọỹ nhồù vaỡ õọửng họử. Trong hóỷ tin
hoỹc phỏn taùn, caùc tờnh toaùn coù thóứ õổồỹc tờnh trón nhióửu bọỹ xổớ lyù hay trón vi xổớ lyù cuớa hóỷ
thọỳng õa bọỹ xổớ lyù. Nhổ vỏỷy hóỷ thọỳng hóỷ tin hoỹc phỏn taùn õoỡi hoới hóỷ thọỳng cuớa mỗnh phaới
Tiu lun H Phõn Tỏn
3
trang bở bọỹ nhồù cuỷc bọỹ. Caùc bọỹ xổớ lyù trao õọứi thọng tin qua caùc hóỷ thọỳng õổồỡng truyóửn
khaùc nhau nhổ laỡ caùp chuyón duỷng, bus trao õọứi, õổồỡng õióỷn thoaỷi, caùp quang, . . . vv.
1. 2 Nguyón từc xỏy dổỷng hóỷ phỏn taùn.
1. 2 Nguyón từc xỏy dổỷng hóỷ phỏn taùn.
Chia seớ taỡi nguyón: Thổỷc tóỳ phaùt trióứn maỷng maùy tờnh õỷt ra mọỹt vỏỳn õóử lồùn laỡ
cỏửn phaới duỡng chung taỡi nguyón. Mọỹt tióỳn trỗnh trón mọỹt traỷm naỡo õoù coù thóứ cung cỏỳp taỡi
nguyón duỡng chung ồớ mọỹt traỷm khaùc.

Lión laỷc: Khi caùc hóỷ thọỳng õaợ õổồỹc mừc nọỳi vồùi nhau, caùc thổỷc thóứ trong hóỷ coù
thóứ trao õọứi thọng tin vồùi nhau.
Tin cỏỷy: Mọỹt traỷm trong hóỷ bở sổỷ cọỳ khọng laỡm cho toaỡn hóỷ aớnh hổồớng, maỡ ngổồỹc
laỷi, cọng vióỷc õoù õổồỹc phỏn cho caùc traỷm khaùc õaớm nhỏỷn. Ngoaỡi ra, traỷm bở sổỷ cọỳ coù thóứ
tổỷ õọỹng phuỷc họửi laỷi traỷng thaùi ban õỏửu trổồùc khi coù sổỷ cọỳ hay traỷng thaùi ban õỏửu cuớa noù.
Tng tọỳc: ỏy laỡ khaùi nióỷm mồùi vóử phỏn taùn taới. Mọỹt tờnh toaùn lồùn naỡo õoù, nóỳu
chố sổớ duỷng mọỹt traỷm thỗ thồỡi gian cho kóỳt quaớ lỏu. Tờnh toaùn naỡy õổồỹc chia nhoớ vaỡ thổỷc
hióỷn song song trón caùc traỷm. ióửu naỡy cuợng cỏửn thióỳt õọỳi vồùi caùc traỷm quaù taới.
Mọỹt trong nhổợng tổ tổồớng lồùn cuớa caùc hóỷ phỏn taùn laỡ phỏn taùn hoaù caùc quaù trỗnh
xổớ lyù thọng tin vaỡ thổỷc hióỷn caùc cọng vióỷc õoù trón caùc traỷm xa nhau. où laỡ cồ sồớ õóứ xỏy
dổỷng caùc hóỷ ổùng duỷng lồùn nhổ thổồng maỷi õióỷn tổớ, giaùo duỷc õióỷn tổớ, chờnh phuớ õióỷn
tổớ. . .
1.3 Caùc vỏỳn õóử hóỷ õióửu haỡnh maỷng maùy tờnh.
1.3 Caùc vỏỳn õóử hóỷ õióửu haỡnh maỷng maùy tờnh.
Lión laỷc laỡ thuỏỷt ngổợ õổồỹc sổớ duỷng chố nhổợng taùc vuỷ trao õọứi thọng tin giổợa caùc
thổỷc thóứ thuọỹc hóỷ thọỳng, trong õoù coù mọỹt thổỷc thóứ gổới (traỷm phaùt) vaỡ mọỹt thổỷc thóứ nhỏỷn
(traỷm nhỏỷn). Thọng tin trong quaù trỗnh gổới vaỡ nhỏỷn õổồỹc goỹi laỡ thọng õióỷp.
Khi mọỹt ngổồỡi sổớ duỷng muọỳn lión hóỷ vồùi caùc ngổồỡi khaùc trong maỷng thỗ ngổồỡi
ỏỳy phaới coù õởa chố maỷng cuớa nhổợng ngổồỡi cỏửn lión hóỷ. ởa chố maỷng laỡ hóỷ thọỳng tón qui
ổồùc tuỏn theo nguyón từc xỏy dổỷng nhỏỳt õởnh vaỡ khọng truỡng nhau. Trong maỷng, mọỹt
ngổồỡi sổớ duỷng coù thóứ thóứ sổớ duỷng mọỹt traỷm bỏỳt kyỡ õóứ lión laỷc vồùi ngổồỡi sổớ duỷng khaùc maỡ
hoỹ muọỳn.
Trón maùy chuớ gừn lióửn vồùi ngổồỡi sổớ duỷng, ngổồỡi ta thaỡnh lỏỷp hóỷ thọỳng tra cổùu õởa
chố cuớa maỷng vaỡ hóỷ thọỳng naỡy phaới luọn luọn õổồỹc laỡm tổồi õóứ õaớm baớo thọng tin chổùa
trong noù phaớn aùnh õuùng traỷng thaùi thổỷc cuớa hóỷ. Khi ngổồỡi sổớ duỷng gổới thọng õióỷp cho
ngổồỡi khaùc ồớ xa, maùy chuớ nguọửn nồi thọng õióỷp xuỏỳt phaùt phaới tra cổùu vaỡo õỏy õóứ xaùc
õởnh hổồùng cuớa luọửng thọng tin õóỳn maùy chuớ õờch, maùy cuớa thọng õióỷp õóỳn.
Hóỷ thọỳng hoaỷt õọỹng nhổ vỏỷy goỹi laỡ hóỷ phỏn taùn Nhổồỹc õióứm lồùn nhỏỳt cuớa hóỷ naỡy
laỡ khi mọỹt maùy chuớ bở sổỷ cọỳ dỏựn õóỳn khọng thóứ tra cổùu thọng tin cho caùc ngổồỡi sổớ duỷng
gừn lióửn vồùi noù. óứ khừc phuỷc õióửu naỡy ngổồỡi ta phỏn taùn caùc hóỷ thọỳng tra cổùu trón caùc

maùy chuớ. Caùc hóỷ thọỳng thọng tin phỏn taùn duỡng cho vióỷc tra cổùu trón caùc maùy chuớ phaới
giọỳng nhau hoaỡn toaỡn.
Trong hóỷ phỏn taùn, thồỡi haỷn truyóửn mọỹt thọng õióỷp laỡ hióỷu sọỳ giổợa thồỡi õióứm nhỏỷn
vaỡ thồỡi õióứm truyóửn. Ta giaớ sổớ rũng: thồỡi haỷn naỡy õuớ lồùn õóứ so saùnh vồùi hóỷ tỏỷp trung, laỡ
mọỹt õaỷi lổồỹng bióỳn thión, vaỡ thồỡi haỷn õoù ồớ cỷp maùy naỡy khaùc vồùi cỷp maùy khaùc. Tổỡ õoù ta
coù caùc hóỷ quaớ nhổ sau:
H qu 1: mt thi im cho trc, mt x lý ang thc hin trờn mt mỏy ch cú th
bit c trng thỏi gn ỳng ca cỏc mỏy khỏc.
Hóỷ quaớ naỡy cho ta bióỳt laỡ trong maỷng khọng tọửn taỷi õọửng họử chung.
Hóỷ quaớ 2
: Trỏỷt tổỷ nhỏỷn caùc thọng õióỷp trón maùy nhỏỷn coù thóứ khọng giọỳng trỏỷt tổỷ phaùt cuớa
chờnh thọng õióỷp õoù.
Caùc maùy trón traỷm coù thóứ bở sổỷ cọỳ vaỡ caùc thọng õióỷp coù thóứ mỏỳt. Giaới phaùp cho
vỏỳn õóử naỡy laỡ õaùnh sọỳ tỏỳt caớ caùc goùi tin gổới õi keỡm theo sọỳ õoù cho maùy nhỏỷn.
Hóỷ quaớ 3
: Hai maùy giọỳng nhau chổùa thọng tin hoaỡn toaỡn giọỳng nhau laỷi khọng bao giồỡ
giọỳng nhau vóử traỷng thaùi.
Tiu lun H Phõn Tỏn
4
Chương 2 ĐỒNG BỘ HÓA THEO MỘT 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 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.
2.1 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
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
2.2 Sắp xếp kiểu đóng dấu
Tiểu luận Hệ Phân Tán
5
Đó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.
2.3 Thuật toán trật tự tổng quát chặt chẽ
2.3.1 Thuật toán LamPort
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.
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.
Tiểu luận Hệ Phân Tán
Nếu Hr, thì
Hr:= E + 1
Chấm dứt
a→b <=> Hi(a) < Hi(b)
6
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ó:
2.3.2 Ứng dụng thuật toán trong hệ phân tán
- Trường hợp 1: Các quy tắc cho các thuật toán cung cấp tài nguyên trên hệ phân
tán.
1. Các bộ cung cấp bắt buộc phải thực hiện cùng 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.
Vậy quy tắc 3 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ệ. Để thực hiện được điều này à sử dụng thuật toán Lamport
- Trường hợp 2:
* Định nghĩa về mối quan hệ “Xảy ra trước” (happens-before relationship)
+ Khi so sánh những sự kiện trên cùng một máy chủ (Host), nếu sự kiện a xuất hiện

trước sự kiện b, thì a “Xảy ra trước” b
+ Nếu một host tiếp nhận (Receives) một Mesg được gởi (Send) từ một host khác,
thì sự kiện Send “Xảy ra trước” Receives
+ Nếu x xuất hiện trong P1 và y xuất hiện trong P2, P1 và P2 không thế hoán đổi
Mesg cho nhau, thì X và Y gọi là đồng quy (concurrent).
* Những quy tắc được sử dụng cho việc cập nhật giá trị cho đồng hồ logic trên các
host:
+ Bộ đếm Counter được tăng trước mỗi sự kiện
+ Trong trường hợp Send, bộ đếm Counter được tăng, sau đó Mesg được gởi. Đồng
thời Mesg mang giá trị mới của Timestamp.
Tiểu luận Hệ Phân Tán
a => b <=> (Hi(a) < Hi(b))
hay
(Hi(a) = Hi(b) và i < j)
7
+ Trong trường hợp Receive, hành động đúng được quyết định bởi giá trị của
Timestamp trong Mesg. Nếu Mesg có giá trị Timestamp cao hơn nhân (Receiver),
đồng hồ logic nơi nhận chấp nhận giá trị được gởi với Mesg. Ngược lại, đồng hồ
logic nơi nhận được tăng và Mesg chọn giá trị được chấp nhận là giá trị đồng hồ
mới.
- Trường hợp 3: Cài đặt đồng hồ lôgic:
B1: Tất cả tiến trình Pi, sử dụng đồng hồ lôgic riêng Ci, giá trị khởi tạo là 0.
B2: Trước khi xử lý một sự kiện, Pi thực hiện như sau: tăng giá trị đồng hồ và gán
cho sự kiện như là timestamp của nó.
Hi = Hi + d (d>0 thường d=1)
B3: Mỗi thông điệp mang giá trị đồng hồ của tiến trình gữi tại thời điểm gữi. Khi Pi
nhận một thông điệp với timestamp Hmsg nó xử lý như sau:
1.Hi = Max( Hi, Hmsg).
2.Thực hiện B2.
3.Phát thông điệp.


2.2.3 Kết luận
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.
Tiểu luận Hệ Phân Tán
8
Phần II BÀI TẬP
Chương I ỨNG DỤNG CÔNG NGHỆ RMI TRONG LẬP TRÌNH JAVA
1.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.
Tiểu luận Hệ Phân Tán
9
 Đị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.
Hình 2.4 Mô hình triệu gọi các đối tượng từ xa
* Tạo các ứng dụng phân tán nhờ sử dụng RMI
 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.
1.2 Ứng dụng RMI để viết chương trình máy chủ 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à:
Tiểu luận Hệ Phân Tán
10
 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.
* 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:
Hình 2.5 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;
}
Tiểu luận Hệ Phân Tán
11
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ững lớp thực hiện giao
Tiểu luận Hệ Phân Tán
12

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.
* 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.
+ 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.
Tiểu luận Hệ Phân Tán

13
+ 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 đối
tượng từ xa, hoặc một đối tượng có thể xếp theo thứ tự, có nghĩa rằng nó thực hiện giao
diện java.rmi.Serializable.
Một vài kiểu đối tượng nào đó không gặp bất kỳ tiêu chuẩn nào và không thể
được đi qua hoặc trả lại từ một phương thức từ xa. Hầu hết đối tượng này, như những
luồng hoặc những bộ mô tả file, đóng gói thông tin có ý nghĩa bên trong một địa chỉ cục
bộ. Nhiều lớp bao gồm những lớp trong những gói java.lang và java.util, thực hiện giao
diện Serializable.
Những quy tắc điều khiển đối số làm như thế nào và giá trị trả về được thực hiện
như sau:
 Những đối tượng từ xa về bản chất thông qua sự tham chiếu. Một sự
tham chiếu đối tượng từ xa là một mẫu, mà một khách hàng ủy nhiệm cách thực hiện
đầy đủ của những giao diện từ xa mà đối tượng thực hiện.
 Những đối tượng cục bộ được sao chép và sử dụng đối tượng sắp xếp
theo thứ tự. Theo mặc định, tất cả các lĩnh vực được sao chép rỏ ràng static hoặc
transient. Mặc định xếp theo thứ tự hành vi có thể là chuyển đến trên một lớp gần phân
loại file.
+ Thực hiện phương thức main của Server
+ Tạo ra và cài đặt một điều khiển an toàn
1.3 Ứng dụng RMI để viết chương trình máy khách Client
Tính toán là một chương trình tương đối đơn giản. Nó thực hiện những yêu cầu
mà nó đã được trao. Một trình khách cần gọi tới tính toán, nhưng nó cũng phải định
nghĩa nhiệm vụ thực hiện bởi công nghệ tính toán .
Hai lớp riêng biệt tạo trình khách trong ví dụ của chúng ta. Lớp đầu tiên,
ComputePi xem và triệu gọi đối tượng Compute. Lớp thứ hai, Pi thực hiện giao diện

Tiểu luận Hệ Phân Tán
14
Task và định nghĩa công việc đã thực hiện bởi việc tính toán. Công việc của lớp Pi là
tính toán giá trị của π của những số thập phân.
Cũng như máy chủ ComputeEngine, thì trình khách cũng bắt đầu việc cài đặt
một bộ phân quản lý an ninh. Bước này thì cần thiết bởi vì quá trình của việc nhận các
mẩu đối tượng của máy chủ từ xa có thể tải xuống những định nghĩa lớp của máy chủ.
Cho RMI để tải xuống những lớp quản lý an ninh phải đang có hữu hiệu.
Sau khi thiết đặt quản lý an ninh, khách hàng xây dựng một tên để sử dụng xem
một đối tượng Compute từ xa, sử dụng cùng tên được dung bởi ComputeEngine để ràng
buộc đối tượng từ xa của nó. Đồng thời, trình khách sử dụng
LocateRegistry.getRegistry API để tổng hợp một tham chiếu từ xa tới nơi đăng ký trên
máy chủ. Giá trị của tham số đầu tiên trong lệnh args[0] là tên của một máy chủ từ xa
chạy trên đối tượng Compute. Trình khách có thể triệu gọi phương thức lookup trên nơi
đăng ký để xem đối tượng từ xa bởi bên trong nơi đăng ký của máy chủ. Sự quá tải đặc
biệt của LocateRegistry.getRegistry được dùng một tham số String trả về một tham
chiếu cho nơi đăng ký tại máy chủ có tên và cổng nơi đăng ký mặc định 1099. Chúng ta
sử dụng một sự quá tải mà có một tham số int nếu nơi đăng ký được tạo ra trên một
cổng khác với cổng 1099.
Tiếp theo trình khách tạo ra một đối tượng Pi mới chuyển cho người xây dựng,
Pi giá trị của tham số thực hiện lệnh thứ hai args[1] phân tích như một số nguyên. Tham
số này chỉ báo số lượng những hàng chữ số thập phân để sử dụng trong việc tính toán.
Cuối cùng, trình khách kéo theo phương thức executeTask của đối tượng Compute từ
xa. Đối tượng được đi vào trong lời triệu gọi executeTask trả lại một đối tượng của kiểu
BigDecimal, mà chương trình cất giữ trong có thể thay đổi được result. Hình sau miêu
tả luồng của những thồng báo trọng số trình khách CpmputePi,rmiregistry và
ComputeEngine
Tiểu luận Hệ Phân Tán
15
Hình 2.6 Miêu tả luồng thông báo trọng số khách hàng

Chú ý tất cả được xếp theo thứ tự những lớp được hay không thực hiện giao diện
Serializable trực tiếp hoặc gián tiếp, khai báo private static final đặt tên
serialVersionUID tới sự tương thích tuần tự hóa giữa các phiên bản. Nếu không có
phiên bản trước đây của lớp đã được giải phóng thì giá trị của lĩnh vực này có thể là bất
kỳ giá trị nào, tương tự như 227L được dung bởi Pi, miễn là giá trị được sữ dụng kiên
định trong những phiên bản tương lai. Nếu một phiên bản trước đây của lớp đã được
giải phóng không biểu hiện serialVersionUID rỏ ràng, nhưng tính tương thích tuần tự
hóa với phiên bản là quan trọng, lúc đó giá trị tính toán ban đầu hoàn toàn cho phiên
bản trước khi sử dụng cho giá trị của phiên bản mới thể hiện rỏ ràng. Công cụ serialver
có thể được chạy chống lại phiên bản trước đây để xác định sự hư hỏng trong tính toán
giá trị cho nó.
Tiểu luận Hệ Phân Tán
16
Chương II PHÂN TÍCH THIẾT KẾ HỆ THỐNG
2.1 Đặt tả bài toán đăng ký vé tàu trực tuyến
2.1.1 Mô hình hệ thống đặt vé tàu trực tuyến
Hình 3.1 Hệ thống đặt vé tàu trực tuyến
Cách thức xử lý bài toán cho hệ thống đặt vé tàu trực tuyến.
Khi một khách hàng (Client) có yêu cầu đặt vé tàu trực tuyến từ một trạm này
đến một trạm khác của hệ thống đường sắt.
(1): Khách hàng (Client) gửi yêu cầu đăng ký đặt vé tàu đến máy chủ (Server)
(2): Máy chủ (Server) tiếp nhận yêu cầu đăng ký đặt vé tàu của Client. Sau đó phân
tích yêu cầu của Client, nếu yêu cầu này thuộc xử lý ở Trạm 1 thì Server sẻ gửi yêu cầu
của Client đến cho Trạm 1 xử lý.
Trạm 1: Tiếp nhận yêu cầu đăng ký đặt vé tàu của Server và xử lý việc tính toán.
Tiểu luận Hệ Phân Tán
Client
Server
Agent
Agent

Agent
(1)
(2)
(4)
(7)
(8)
(5)
(6)
(3)
Database
Tram1
Database
Tram 2
Database
Tram 3
17
(5) : Sau khi xử lý xong yêu cầu, Tram 1 sẻ trả kết quả xử lý trở về cho Server.
(3)(4) : Tương tự (2)
(6)(7) : Tương tự (5)
(8) : Máy chủ (Server) tổng hợp kết quả được trả về từ các máy trạm và cuối cùng là trả
lại kết quả đã được xử lý cho khách hàng (Client).
2.1.2 Đặc tả yêu cầu của hệ thống
+ Xác định yêu cầu chức năng
Hệ thống được xây dựng cho khách hàng và nhân viên ngành đường sắt với mục
đích sử dụng các chức năng sau:
 Khách hàng có thể sử dụng hệ thống để tìm kiếm thông tin và đăng ký đặt
vé tàu
 Nhân viên quản lý hệ thốNn g có thể sử dụng hệ thống để giúp cho việc
quản lý các chức năng của ngành đường sắt như: Việc quản lý ga, tàu, giá
vé, lich trình và việc quản lý khách hàng.

+ Xác định tác nhân tương tác
Hệ thống xây dựng nhằm hỗ trợ các tác nhân (Actor):
 User (Người sử dụng): Là tác nhân tương tác với hệ thống từ đầu đến
cuối. Tác nhân này bao gồm:
Hình 3.2 Các tác nhân tương tác tới hệ thống
Tiểu luận Hệ Phân Tán
18
- Bộ phân quản lý của ngành đường sắt (nhân viên)
Bao gồm ban lãnh đạo và quản lý trực tiếp tới hệ thống chủ yếu là nhân viên của
ngành, mà nhiệm vụ chính của mỗi nhân viên đó là sử dụng hệ thống để quản lý:
 Quản lý những thông tin về ga tàu, tàu, toa tàu, giá vé, lịch trình và
quản lý khách hàng.
 Quản lý việc tìm kiếm, cập nhật thông tin.
 Thống kê báo cáo hàng ngày, hàng tháng và hàng quý.
 Xử lý mọi phản hồi đóng góp ý kiêm của khách hàng
- Quản trị hệ thống
 Chịu trách nhiệm về kỷ thuật của hệ thống.
 Sao lưu, khôi phục dữ liệu và sủa chữa nâng cấp hệ thống.
- Khách hàng
Là các cá nhân, tập thể và các đơn vị doanh nghiệp có nhu cầu đăng ký đặt vé
tàu. Hoạt động của khách hàng bao gồm các hoạt động sau:
Đăng ký làm thành viên: Người dùng nhập họ tên, địa chỉ, số điện thoại, mật khẩu,
email để đăng ký tài khoản của mình trong hệ thống.
Tìm kiếm thông tin về tàu và lich trình chạy tàu.
Đăng ký đặt vé tàu
2.2 Phân tích hệ thống
2.2.1 Sơ đồ Use Case tổng quan
Tiểu luận Hệ Phân Tán
19
Hình 3.3 Sơ đồ Use Case tổng quan

2.2.2 Sơ đồ Use Case Khách Hàng
Hình 3.4 Sơ đồ Use Case Khách hàng
2.2.3 Sơ đồ Use Case Nhân Viên
Hình 3.5 Sơ đồ Use Case Nhân viên
2.3 Thiết kế hệ thống chương trình
2.3.1 Thiết kế sơ đồ lớp của hệ thống
Hình 3.17 Sơ đồ các lớp của hệ thống
2.3.2 Xây dựng sơ đồ thực thể quan hệ kết hợp
Tiểu luận Hệ Phân Tán
20
n 1 n 1

n n
1

n n

1 1
1 n
1
n
n 1
1
Hình 3.18 Sơ đồ thực thể quan hệ kết hợp
2.3.3 Sơ đồ khối chương trình Server
Tiểu luận Hệ Phân Tán
CHỔ
MaCho
MaPhieu
Toa

SoGhe
KIỂU
MaKieu
TenKieu
PHIẾU ĐẶT VÉ
MaPhieu
MaKhachHang
MaLoai
MaVe
SoVe
NgayDi
TOA
MaToa
TenToa
SoGhe
KieuGhe
KHÁCH HÀNG
SoCMND
HoVaTen
GioiTinh
DiaChi
DienThoai
E-Mail
MatKhau
LOẠI KH
MaLoai
TenLoai
TyLeGiam
GIA VE
MaVe

MaTau
MaKieu
GaTruoc
GaSau
GiaVe
GA
MaGa
TenGa
DiaChi
ThongTin
LỊCH TRÌNH
MaLichTrinh
MaGa
MaTau
GioDi
GioDen
ThoiGian
TÀU
MaTau
TenTau
SoToa
ThongTin
21
2.3.4 Sơ đồ khối chương trình Client
Tiểu luận Hệ Phân Tán
22
Chương III CÀI ĐẶT HỆ THỐNG VÀ KIỂM THỬ
3.1 Cài đặt hệ thống
3.1.1 Trên hệ thống Server và Agent
+ Trên Server

Chương trình cài đặt trên Server gồm các Servlet sau:
DangKy: Tiếp nhận đăng ký của khách hàng từ Client.
DangNhap: Tiếp nhận yêu cầu đăng nhập vào hệ thống tài khoản.
DatVe: Tiếp nhận đăng ký đặt vé của khách hàng từ Client.
QuanLyThongTin: Quản lý những thông tin chung của hệ thống
Server như: Ga, Tàu hỏa, Lịch Trình, Giá vé
+ Trên Agent
Hệ quản trị cơ sở dữ liệu Access 2003 của Microsoft
Cài đặt chương trình Chứa các hàm cho phép truy cập từ xa, xử lý
các yêu cầu do Server gửi đến
3.1.2 Trên hệ thống Client
Có kết nối mạng Internet.
Cài đặt chương trình
Cài đặt chương trình Client của hệ thống.
3.2 Kiểm thử chương trình
Tiểu luận Hệ Phân Tán
23
TÀI LIỆU THAM KHẢO
1. Hệ phân tán – TS. Lê Văn Sơn, Nhà xuất bản Đại học quốc gia TP. Hồ Chí Minh.
2. R. Obermarck, "Distributed Deadlock Detection Algorithm", ACM Transactions on
Database Systems, vol.7, no.2, p 187 (June 1992).
3. K. Mani Chandy, J. Misra and L.M. Haas, "distributed Deadlock Detection", ACM
transactions on Computer Systems, vol.1, no.2, p 144 (May 1983).
4. S.S. Isloor and T.A. Marsland, "The Deadlock Problem: An Overview", Computer,
vol.13, no.9, p. 58 (September 1980).
5. D.A. Menasce and R.A. Muntz, "Locking and Deadlock Detection in Distributed
Databases", IEEE Transactions on Software Engineering, vol. SE-5, no.3, p.195 (May
1979).
6. David B.Lomet, “Coping with Deadlock in Distributed Systems”, IBM Thomas
J.Watson Research Center Yorktown Heights, New York 10598.

Mục lục
Lời nói đầu
Tiểu luận Hệ Phân Tán
24
Phần I Lý thuyết
Chương I CÁC KHÁI NIỆM CƠ BẢN VỀ HỆ PHÂN TÁN
1.1 Khái niệm hệ phân tán
1.2 Nguyên tắc xây dựng hệ phân tán
1.3 Các vấn đề hệ điều hành mạng máy tính
Chương 2 ĐỒNG BỘ HÓA THEO TRẬT TỰ TỔNG QUÁT CHẶT CHẼ
2.1 Cung cấp phân tán
2.2 Thuật toán trật tự tổng quát chặt chẽ
2.2.1 Thuật toán Lamport
2.2.2 Ứng dụng thuật toán trong hệ phân tán
2.2.3 Kết luận
Phần II Bài tập
Chương I ỨNG DỤNG CÔNG NGHỆ RMI TRONG LẬP TRÌNH JAVA ĐỂ
LẬP TRÌNH BÀI TOÁN
1.1 Tổng quan về RMI
1.2 Ứng dụng RMI để viết chương trình máy chủ Server
1.3 Ứng dụng RMI để viết chương trình máy khách Client
Chương II PHÂN TÍCH THIẾT KẾ HỆ THỐNG
2.1 Đặt tả bài toán đăng ký vé tàu trực tuyến
2.2 Phân tích hệ thống
2.3 Thiết kế hệ thống chương trình
Chương III CÀI ĐẶT CHƯƠNG TRÌNH VÀ THỬ NGHIỆM
3.1 Cài đặt chương trình
3.2 Thử nghiệm

Tiểu luận Hệ Phân Tán

×