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

tiểu luận môn lập trình mạng áp dụng thuật toán ellis đảm bảo gắn bó dữ liệu trong các cơ sở dữ liệu phân tán

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

Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
BÀI TIỂU LUẬN
MÔN LẬP TRÌNH MẠNG
Đề tài 29:
ÁP DỤNG THUẬT TOÁN ELLIS ĐẢM BẢO GẮN BÓ
DỮ LIỆU TRONG CÁC CƠ SỞ DỮ LIỆU PHÂN TÁN
GVHD : PGS.TS Lê Văn Sơn
Học viên : Phí Thị Lệ Tho
LỚP : Cao học Khoa học máy tính – K24
Đà Nẵng, tháng 5 năm 2012
HVTH: Phí Thị Lệ Tho trang 1
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
LỜI NÓI ĐẦU
Ngày nay hầu hết các ứng dụng tin học đều được xây dựng để thực hiện trên
mạng máy tính, các ứng dụng client-server đang ngày càng được sử dụng phổ biến.
Nhưng khi quy mô và mức độ của các ứng dụng tăng lên và yêu cầu về chất lượng, tốc
độ xử lý và độ phức tạp cũng tăng theo thì trên thực tế, một xu hướng kỹ thuật mới ra
đời – xu hướng phân tán các thành phần tạo nên hệ tin học theo hướng tiếp cận nơi sử
dụng và sản xuất thông tin. Song để khai thác có hiệu quả toàn hệ, vấn đề quan trọng
hàng đầu cần phải tính đến là các tài nguyên nói chung, đặc biệt là tài nguyên thông tin
nói riêng và chiến lược khai thác, sử dụng chúng một cách tối ưu nhất.
Với môi trường mạng phân tán này sẽ có nhiều Server đặt ở những nơi
khác nhau người ta gọi là môi trường đa Server. Trong môi trường đa Server
và việc truy cập từ xa có thể truy xuất đồng thời đảm bào toàn vẹn dữ liệu vì
dữ liệu có thể lưu trữ dự phòng trên nhiều Server khác nhau.
Đây là hệ thống đa Server rất phức tạp nhưng hệ thống đảm bảo gắn bó
dữ liệu giữa các Server đồng thời không làm phức tạp việc truy xuất dữ liệu.
Với những thông tin trên nhóm chúng em trình bày chủ đề:
1. Thuật toán Ellis đảm bảo gắn bó dữ liệu trong các CSDL phân tán


2. Đây là gắn bó mạnh giữa các CSDL phân tán
3. Xây dựng trên cơ sở thuật toán 2P
4. Hiện dữ liệu khi truy cập và kiểm tra tính gắn bó.
Đối với tiểu luận này nhóm xây dựng một hệ thống gồm 4 Server và
một công cụ module Monitor nhằm giám sát cập nhật dữ liệu giữa 4 Server
để đánh giá tính gắn bó dữ liệu giữa các server với nhau.
Mặc dù đã nghiên cứu kỹ phần lý thuyết để có được cách giải quyết bài tập
đúng đắn, phù hợp với yêu cầu nhưng bản thân tôi không thể tránh khỏi những sai
sót, kính mong được sự góp ý của thầy giáo hướng dẫn và các anh chị trong lớp để
đề tài được tốt hơn.
HVTH: Phí Thị Lệ Tho trang 2
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
CHƯƠNG I
GIỚI THIỆU VÀI NÉT VỀ HỆ CƠ SỞ DỮ LIỆU PHÂN TÁN
1.1. Giới thiệu
Công nghệ về các hệ cơ sở dữ liệu phân tán (distributed database system,
DDBS) là sự hợp nhất của hai hướng tiếp cận đối với quá trình xử lý dữ liệu: Công
nghệ cơ sở dữ liệu và công nghệ mạng máy tính. Các hệ cơ sở dữ liệu chuyển từ mô
thức xử lý dữ liệu, trong đó mỗi ứng dụng định nghĩa và duy trì dữ liệu của riêng
chúng sang mô thức quản lý và xử lý dữ liệu tập trung. Hướng đi này dẫn đến tính
độc lập dữ liệu, nghĩa là các ứng dụng được miễn nhiệm đối với những thay đổi về
tổ chức logic hoặc vật lý của dữ liệu và ngược lại.
Một trong những động lực thúc đẩy việc sử dụng hệ cơ sở dữ liệu là nhu cầu
tích hợp các dữ liệu hoạt tác của một xí nghiệp và cho phép truy xuất tập trung, nhờ
vậy có thể điều khiển được các truy xuất đến dữ liệu, còn công nghệ mạng đi ngược
lại với mọi nổ lực tập trung hóa. Nhìn thoáng qua chúng ta khó hình dung ra làm
cách nào tiếp cận hai hướng trái ngược nhau để cho ra một công nghệ mạnh mẽ và
nhiều hứa hẹn hơn so với từng công nghệ riêng lẻ. Mấu chốt của vấn đề là cần phải
hiểu rằng, mục tiêu quan trọng nhất của công nghệ cơ sở dữ liệu là sự tích hợp
không phải sự tập trung hóa, cũng cần phải hiểu rằng hai thuật ngữ có được điều

này không dẫn đến điều kia. Và vẫn có thể tích hợp mà không cần tập trung hóa.
Đây chính là mục tiêu của công nghệ cơ sở dữ liệu phân tán.
1.2. Định nghĩa cơ sở dữ liệu phân tán
Một cơ sở dữ liệu phân tán là một tập nhiều cơ sở dữ liệu có liên đới logic và
được phân bố trên một mạng máy tính. Vậy hệ quản trị cơ sở dữ liệu phân tán được
định nghĩa là một hệ thống phần mềm cho phép quản trị các hệ cơ sở dữ liệu phân
tán và làm cho việc phân tán trở nên “vô hình” đối với người sử dụng. Hai thuật
HVTH: Phí Thị Lệ Tho trang 3
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
ngữ quan trọng trong định nghĩa này là “liên đới logic’ và “phân bố trên một mạng
máy tính”.
Một hệ cơ sở dữ liệu phân tán (distributed database system, viết tắt là DDBS)
không phải là một “tập các tập tin” lưu riêng lẻ tại mỗi nút của một mạng máy tính.
Để tạo ra một hệ cơ sở dữ liệu phân tán, các tập tin không những có liên đới logic
mà chúng còn phải có cấu trúc và được truy xuất qua một giao diện chung.
Ngoài ra, một hệ cơ sở dữ liệu phân tán không phải là hệ thống trong đó dù
có sự hiện diện của một mạng máy tính, cơ sở dữ liệu chỉ nằm tại một nút của
mạng. Cơ sở dữ liệu này được quản lý tập trung tại một hệ thống máy tính và tất cả
mọi yêu cầu đều chuyển đến vị trí đó. Điều cần xem xét là độ chậm trễ khi truyền
dữ liệu. Tất nhiên sự tồn tại của một mạng máy tính hoặc một tập các tập tin không
đủ để tạo ra một hệ cơ sở dữ liệu phân tán. Điều chúng ta quan tâm là một môi
trường trong đó dữ liệu được phân tán trên một số vị trí.
HVTH: Phí Thị Lệ Tho trang 4
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Trong hệ thống cơ sở dữ liệu phân tán, cơ sở dữ liệu chứa trong vài máy tính.
Các máy tính liên lạc với nhau qua nhiều phương tiện truyền thông, như bus tốc độ
cao hay đường điện thoại. Chúng không chia sẻ bộ nhớ chính, cũng không dùng
chung đồng hồ.
Các bộ xử lý trong hệ thống phân tán có kích cỡ và chức năng khác nhau.
Chúng có thể gồm các bộ vi xử lý, trạm làm việc, máy tính mini, hay các máy tính

lớn vạn năng. Những bộ xử lý này được gọi tên là các trạm, nút, máy tính và cả
những tên tùy theo ngữ cảnh riêng.
Trong hệ thống cơ sở dữ liệu phân tán gồm nhiều trạm, mỗi trạm có thể khai
thác các giao thức truy nhập dữ liệu trên nhiều trạm khác. Sự khác nhau chính giữa
hệ thống cơ sở dữ liệu phân tán và tập trung là: trong hệ thống tập trung, dữ liệu lưu
trữ tại chỗ, còn phân tán thì không.
HVTH: Phí Thị Lệ Tho trang 5
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
CHƯƠNG II
SỰ GẮN BÓ DỮ LIỆU TRONG CƠ SỞ DỮ LIỆU PHÂN TÁN
2.1 Tác động và giao dịch
Các đối tượng khác nhau của hệ không phải là các đối tượng độc lập nhau,
chúng quan hệ với nhau bởi tập hợp các quan hệ gọi là các ràng buộc toàn vẹn. Các
ràng buộc này thể hiện sâu sắc các đặc tính riêng biệt của hệ.
Trạng thái của hệ thoả mãn một tập các ràng buộc toàn vẹn gọi là trạng thái
gắn bó.
Các nhà thiết kế và vận hành hệ mong muốn rằng việc thực hiện các tiến
trình phải duy trì cho được hệ trong trạng thái gắn bó. Để chính xác hoá đặc tính
này, cần phải lưu ý là trạng thái của hệ chỉ được xác định ở mức quan sát cho trước.
Ta quan tâm đến hai mức quan sát:
STT Mức Giải thích
1 NSD
Tiến trình là một dãy thực hiện các giao dịch.
Giao dịch đó là chương trình duy nhất được thực hiện từ
một trạng thái gắn bó dẫn hệ đến một trạng thái gắn bó
khác.
2 Hệ thống
Mỗi giao dịch được cấu tạo từ nột dãy các tác động được
thể hiện như sau. Nếu 2 tác động A và B thuộc hai giao
dịch khác nhau được thực hiện bởi hai tiến trình thì hiệu

ứng tổng quát của chúng sẽ là hiệu ứng của dãy (A;B) hoặc
là (B;A)
Ở mức hệ thống, ta có thể nói rằng các tác động là phần tử nhỏ nhất không
thể chia cắt được nữa.
Cho một tập hợp giao dịch M={T
1
, T
2
…, T
n
} lần lượt được thực hiện bởi các
tiến trình độc lập p
1
, p
2
,…,p
n
. Việc thực hiện tuần tự có nghĩa là thực hiện tất cả các
giao dịch của M theo kiểu nối đuôi nhau và tuân thủ một trật tự nào đó. Sự gắn bó
của hệ được bảo toàn, theo định nghĩa, bằng việc thực hiện riêng biệt từng giao
dịch. Do vậy, nó cũng được bảo toàn trong chế độ thực hiện tuần tự của M.
HVTH: Phí Thị Lệ Tho trang 6
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Nếu, vì lý do hiệu quả, nhiều giao dịch được thực hiện song song, thì sự gắn
bó không còn đảm bảo được nữa.
Một yêu cầu khác nữa rất quan trọng là trong quá trình thực hiện hệ phải
đảm bảo cho các tác động không bị ngắt quãng.
2.2 Trật tự hóa các tác động
Trở lại với tập hợp giao dịch M = {T
1

, T
2
…, T
n
} cho ở phần trước. Mỗi giao
dịch được cấu tạo từ một dãy các tác động. Bằng các tác động không chia sẻ được
này, toàn bộ sự việc thực hiện của tập hợp các giao dịch M bởi một tập hợp các tiến
trình tương tranh là tương đương với việc thực hiện một dãy S các tác động thuộc
các giao dịch này, như S = (a
1
, a
2
, , a
n
) chẳng hạn. Trong trật tự tuân thủ trật tự
nội tại của từng giao dịch, dãy này bao gồm tất cả các tác động cấu tạo nên các giao
dịch M; mỗi tác động chỉ xuất hiện một và chỉ một lần. Một dãy như vậy gọi là trật
tự hóa của tập các giao dịch M.
Ví dụ: Cho T
1
= (a
11
, a
12
, a
13
, a
14
) và T
2

= (a
21
, a
22
, a
23
). Một trật tự hóa (T
1
, T
2
) được
thể hiện như sau:
S = a
21
, a
11
, a
12
, a
22
, a
13
, a
23
, a
14
Trong số các trật tự hóa của một tập hợp các giao dịch, điều rất quan trọng là
phải tách ra cho được những cái phục vụ trạng thái gắn bó dữ liệu và chúng được
gọi là trật tự hóa gắn bó.
Như vậy, đặc tính quan trọng của trật tự hóa là: các trật tự hóa tương ứng

với việc thực hiện tuần tự của tập hợp các giao dịch hay còn gọi ngắn gọn là trật tự
hóa tuần tự.
Điều kiện đủ cho sự gắn bó của một trật tự hóa có thể được phát biểu như
sau: Một trật tự hóa là gắn bó, nếu nó có cùng quan hệ phụ thuộc với một trật tự
tuần hoàn.
2.3 Triển khai giao dịch tôn trọng sự gắn bó
Cho một tập hợp giao dịch M={T
1
, T
2
…, T
n
}. Một trật tự hóa của tập hợp các
tác động thành phần sẽ tương ứng với việc thực hiện hoàn toàn các giao dịch. Việc
thu được một trật tự hóa gắn bó chỉ có thể thành công khi áp dụng các ràng buộc
trên trật tự thực hiện các tác động. Nguyên lý của phương pháp là ở chỗ làm chậm
HVTH: Phí Thị Lệ Tho trang 7
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
một tác động nào đó cho đến thời điểm mà sự thực hiện của nó không còn có nguy
cơ phá hủy sự gắn bó của trật tự hóa (bằng cách chặn tiến trình hiện hành).
Để đảm bảo các giao dịch trên tôn trọng sự gắn bó thông tin thì người ta đưa ra các
phương pháp, cơ chế để đảm bảo khi giao dịch vẫn có sự gắn bó thông tin toàn vẹn
dữ liệu trên cơ sở dữ liệu phân tán là:
 Cơ chế then cài: Cho phép một giao dịch có thể giải phóng đối tượng mà
nó đã cài then.
 Loại trừ tương hỗ: Nếu ta biết trước các đối tượng được xử lý bởi một
giao dịch nào đó, thì ta có thể cài then công việc truy cập đến các đối tượng.
 Then cài lựa chọn đối tượng: Một giao dịch thay đổi giá trị của đối tượng
phải loại trừ tất cả các đối tượng khác muốn truy cập, ngược lại thì việc truy cập
được tiến hành theo kiểu tương tranh.

 Giao dịch hai pha: 1. Toàn bộ đối tượng bị cài then vẫn ở trong tình trạng
cài then cho đến cuối giao dịch và 2. Không có then cài nào có thể diễn ra tiếp
theo một then cài khác trong cùng một giao dịch.
Bây giờ ta tưởng tượng rằng các đối tượng được phân tán trên nhiều trạm
khác nhau và được nối với nhau thông qua hệ thống viễn thông và rằng các tiến
trình diễn ra trên các trạm khác nhau. Hệ thống viễn thông cho phép các tiến trình
trên các trạm khác nhau có thể trao đổi các thông điệp với nhau. Ta giả định rằng
các tiến trình và các phương tiện truyền thông là các đối tượng có thể rơi vào sự cố.
Một hệ quản lý tập hợp thông tin phân tán bao gồm:
STT Cơ chế
1
Cơ chế cho phép sắp xếp một cách tổng quát các tác động của
cùng một giao dịch, ngay cả khi các tác động này diễn ra trên các
trạm khác nhau.
2
Cơ chế điều khiển các tranh chấp truy cập cục bộ vào các đối
tượng đảm bảo tôn trọng tính toàn vẹn của các đối tượng truy cập
cục bộ này.
3
Cơ chế có khả năng xử lý các bế tắc và thiếu thốn vô hạn, hậu quả
của việc hủy bỏ các giao dịch.
4 Cơ chế phục hồi các giao dịch đã hủy bỏ hay xử lý các sự cố.
Cơ chế xử lý sự cố
STT Phải thực hiện
HVTH: Phí Thị Lệ Tho trang 8
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
1 Giao dịch T bắt buộc phải thực hiện một cách trọn vẹn
2 Nếu có sự cố xảy ra thì phải quay lại điểm xuất phát.
Muốn thực hiện những điều vừa nêu ở trên, người ta đòi hỏi giao dịch phải
có các đặc tính toàn vẹn như sau:

STT Phải thực hiện
1
Nếu một tiến trình bị sự cố trước khi kết thúc T nhưng lại sau các
thao tác thay đổi cần thiết của T, trạng thái của hệ là gắn bó.
2
Nếu một tiến trình bị sự cố trước khi diễn ra các thay đổi của T,
trạng hái của hệ là gắn bó.
3
Nếu một tiến trình bị sự cố giữa các thay đổi của T, trạng thái của
hệ là không gắn bó.
Nếu dữ liệu được phân tán trên nhiều server, để bảo đảm dữ liệu sẽ được ghi
lên đúng đắn lên mọi cơ sở dữ liệu, đòi hỏi phải có các cơ chế bảo vệ dữ liệu. Ví dụ
như việc cập nhật bảng cân đối tài khoản khách hàng ở ba cơ sở dữ liệu khác nhau. Nếu
có sự cố kết nối xảy ra trong thời gian ghi giao dịch, cơ sở dữ liệu sẽ mất tính đồng bộ.
Xử lý giao dịch khắc phục tình trạng này bằng cách giám sát những thay đổi tác động lên
các cơ sở dữ liệu liên quan nhằm bảo đảm toàn vẹn dữ liệu một khi có sự cố.
2.4 Quản lý gắn bó các giao dịch
Bây giờ ta hãy xem xét một hệ, trong đó các đối tượng được phân tán trên
nhiều trạm, không có bản sao mỗi đối tượng chỉ tồn tại có một bản duy nhất. Một
giao dịch T
j
có thể tham chiếu đến các đối tượng nằm trên các trạm khác nhau và do
vậy gồm nhiều tác động thực hiện trên nhiều trạm. Như vậy ta phải xác định trên
một trạm S
i
một tiến trình P
ji
với nhiệm vụ thực hiện các tác động giao dịch T
j
trên

S
i
, các tác động được thực hiện trên các trạm khác nhau có thể tiến hành theo kiểu
song song.
Các phương pháp để quản lý gắn bó các giao dịch như: Phương pháp dự
phòng để chống bế tắc, phương pháp dựa vào việc hạn chế các khả năng diễn ra
bằng cách phát hiện bế tắc có tính chất động, điều đó dẫn đến hủy bỏ các giao dịch.
HVTH: Phí Thị Lệ Tho trang 9
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
CHƯƠNG III
XÂY DỰNG THUẬT TOÁN ELLIS ĐẢM BẢO GẮN BÓ MẠNH
3.1. Thuật toán Ellis đảm bảo gắn bó mạnh
3.1.1. Nguyên lý
Tập hợp bao gồm các trạm được tổ chức theo kiểu vòng tròn ảo. Các cập
nhật được thực hiện theo hai thì:
- Thống nhất giữa hai trạm
- Thực hiện cập nhật
Do vậy, thuật toán này đảm bảo một sự gắn bó mạnh. Nếu có nhiều yêu cầu
cập nhật diễn ra đồng thời thì ta phải có quy tắc để có thể quyết định yêu cầu nào
được tiếp nhận và thoả mãn. Nhằm phục vụ cho ý tưởng đó, ta thường hay sử dụng
dấu phối hợp cho mỗi cập nhật và ta xử lý yêu cầu có Thời gian dấu lâu nhất.
3.1.2. Triển khai hệ ổn định
Mỗi trạm có thể có các trạng thái sau:
- Nghỉ ngơi: Trạm không thực hiện cập nhật nào cả.
- Hoạt động: Trạm đã nhận một yêu cầu cập nhật cục bộ mà yêu cầu này
đã được truyền cho các trạm khác để kiểm tra.
- Thụ động: Trạm đã đồng ý cho một cập nhật và chờ trật tự tương ứng.
- Cập nhật: Trạm đang trong tình trạng chuyển của cập nhật, trong khi đó tất
cả các yêu cầu khác truyền đến đều được lưu trữ. Chũng sẽ được xử lý khi quay về
một trong các trạng thái khác.

Lúc khởi sự, tất cả các trạm đều trong trạng thái nghỉ ngơi.
Trạm khởi sự việc cập nhật, đầu tiên cần phải gửi một yêu cầu cho phép cập
nhật, nó chỉ làm được công việc đó trong trạng thái nghỉ ngơi. Lúc này nó
được nhận dấu và được gửi vào vòng tròn, trạm khởi sự chuyển trạng thái từ
nghỉ ngơi sang hoạt động
Nếu chỉ có một yêu cầu duy nhất được đưa vào vòng tròn, nó đi qua tất cả
các trạm để chuyển các trạm này từ nghỉ ngơi sang thụ động. Khi nó đã trở về nơi
khởi sự thì việc thống nhất coi như hoàn tất. Việc cập nhật nói riêng lúc này được
gửi đi và mỗi trạm sau khi thực hiện lại trở về trạng thái nghỉ ngơi.
HVTH: Phí Thị Lệ Tho trang 10
TCP/IP
java.net
RMI
JDBC
CORBA
Network OS
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Nếu có nhiều yêu cầu được đưa ra đồng thời trong vòng tròn, thì tình hình đó
dễ dàng diễn ra xung đột. Lúc này, ta phải chọn một yêu cầu có Thời gian dấu lâu
nhất. Để tiến hành công việc đó, ta nêu bật vai trò của “bộ chắn đường” (barrage)
cho các trạm khởi sự. Một trạm nào đó trong trạng thái nghỉ ngơi hay thụ động phải
chuyển toàn bộ yêu cầu đã đến với nó; một trạm trong trạng thái hoạt động chỉ phải
chuyển các yêu cầu có Thời gian lâu hơn các yêu cầu mà chính nó đã phát đi; các
yêu cầu khác đều bị dừng lại và được lưu giữ.
Các yêu cầu bị lưu lại sẽ được gửi tiếp vào vòng tròn, khi trạm lưu trữ chúng hoàn
thành việc cập nhật riêng của mình.
3.2. Giới thiệu hệ thống phân tán sử dụng công nghệ RMI
Kĩ thuật Remote Method Invocation (RMI), được giới thiệu lần đầu tiên trong
JDK 1.1, làm cho công nghệ lập trình mạng lên một tầm cao hơn. Dù rằng RMI là công
nghệ khá dễ sử dụng, nó cũng được xem như là một công nghệ lập trình mạnh với các

nhà phát triển Java trung bình với một mô hình phát triển hoàn toàn mới – công nghệ
lập trình phân tán. Trong phần này, tôi sẽ giới thiệu sâu về kĩ thuật này lập trình mạng
phân tán này.
3.2.1. Kiến trúc Java RMI
Mục tiêu thiết kế cho kiến trúc của RMI là để tạo một mô hình đối tượng phân tán
Java mà tích hợp một cách tự nhiên vào ngôn ngữ lập trình Java và mô hình đối tượng
cục bộ. Kiến trúc RMI đã thành công, trong việc xây dựng một hệ thống kế thừa khả
năng an toàn và tin cậy của kiến trúc Java sang môi trường lập trình phân tán.
HVTH: Phí Thị Lệ Tho trang 11
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
3.1.2. Giao tiếp: trái tim của RMI
Kiến trúc RMI dựa trên một lý thuyết quan trọng: định nghĩa và sự triển khai của
thuộc tính là các khái niệm tách biệt. RMI cho phép mã nguồn định nghĩa hành vi và
mã nguồn triển khai hành vi đó được duy trì tách biệt và chạy trên các JVM tách biệt
nhau.
Điều này phù hợp với nhu cầu của các hệ phân tán trong đó các client được liên
quan với nhau về mặt định nghĩa của một dịch vụ và các server được tập trung vào
cung cấp các dịch vụ đó.
Trong RMI, việc định nghĩa của một dịch vụ từ xa được mã hóa sử dụng một giao
tiếp Java. Việc triển khai cho một dịch vụ từ xa được mã hóa trong một lớp đối tượng.
Chính vì thế điểm quan trọng để hiểu RMI là nhớ về giao tiếp định nghĩa hành vi và
các lớp định nghĩa triển khai cho các hành vi đó.
Sơ đồ sau mô tả cho sự tách biệt này,
Chú ý rằng một giao tiếp Java không chứa mã thực thi. RMI hỗ trợ hai lớp triển
khai cho cùng một giao tiếp. Lớp thứ nhất là triển khai của hành vi, và chạy trên server.
Lớp thứ hai hoạt động như một ủy quyền cho dịch vụ từ xa và chạy trên client. Điều
này được thể hiện trong sơ đồ sau đây:
Một chương trình client tạo các lời gọi phương thức trên đối tượng proxy, RMI
gửi yêu cầu đến cho JVM ở xa, và chuyển nó đến để triển khai. Bất kì giá trị trả về
HVTH: Phí Thị Lệ Tho trang 12

Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
được cung cấp bởi việc triển khai này được gửi ngược đến proxy và sau đó đến chương
trình phía máy khách.
3.2.1. Lớp truyền vận
Lớp truyền vận thực hiện kết nối giữa nhiều JVM. Tất cả các kết nối đều là các
kết nối mạng dựa trên chuỗi sử dụng TCP/IP.
Thậm chí nếu hai JVMs đang chạy trên cùng một máy tính vật lý, chúng kết nối
thông qua ngăn xếp giao thức TCP/IP của hai máy tính đó. Sơ đồ sau đây cho thấy việc
sử dụng tự do của các kết nối TCP/IP giữa các JVMs.
Lớp truyền vận RMI được thiết kế để tạo kết nối giữa các client và server, thậm
chí để giải quyết các trở ngại của việc kết nối mạng.
Trong khi lớp truyền vận ám chỉ đến việc sử dụng nhiều kết nối TCP/ IP, một số
cấu hình mạng chỉ cho phép một kết nối TCP/IP đơn giữa client và server.
Trong trường hợp này, lớp truyền vận đa hợp nhiều kết nối ảo bên trong một kết
nối TCP/IP đơn duy nhất.
Các đối tượng đặt tên.
Trong suốt kiến trúc RMI, một câu hỏi được lặp đi lặp lại là: Làm thế nào một
client tìm thấy một dịch vụ RMI từ xa? Các client tìm các dịch vụ từ xa bằng cách sử
dụng một cơ chế đặt tên hay dịch vụ thư mục. Điều này dường như khá khó hiểu. Làm
sao một client xác định một dịch vụ bằng cách sử dụng một dịch vụ khác? Ở đây, cơ
chế đặt tên hay dịch vụ thư mục được chạy trên một chỉ số port và host biết trước.
RMI có thể sử dụng nhiều dịch vụ đặt tên khác nhau, bao gồm Java Naming và
Giao tiếp thư mục (JNDI). RMI chính bản thân nó bao gồm một dịch vụ đơn giản được
gọi là RMI Registry, rmiregistry. Bộ đăng kí RMI chạy trên mỗi máy mà chứa các đối
tượng dịch vụ từ xa và chấp nhậnh các truy vấn cho các dịch vụ này, mặc định trên port
1099.
HVTH: Phí Thị Lệ Tho trang 13
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Trên một máy chủ, chương trình server tạo một dịch vụ từ xa bằng cách tạo một
đối tượng cục bộ triển khai dịch vụ này. Kế tiếp, nó xuất đối tượng đó cho RMI. Khi

đối tượng được xuất ra, RMI tạo một dịch vụ lắng nghe chờ đợi client kết nối đến và
yêu cầu dịch vụ này. Sau khi xuất xong, server đăng kí đối tượng đó dưới một tên
chung.
Ở phía client, bộ đăng kí RMI được truy cập thông qua phương thức tĩnh Naming.
Nó cung cấp phương thức lookup() mà client sử dụng để truy vấn một đăng kí. Phương
thức lookup() chấp nhận một URL xác định tên server và tên dịch vụ được yêu cầu.
Phương thức đó trả về một tham chiếu từ xa cho đối tượng dịch vụ. URL này có dạng
rmi://<host_name>
[:<name_service_port>]
/<service_name>
Trong đó host_name là tên được ghi nhận trên một mạng nội bộ (LAN) hay là
một tên DNS trên Internet. name_service_port chỉ cần được xác định chỉ nếu dịch vụ
tên được chạy trên một port khác với port 1099.
HVTH: Phí Thị Lệ Tho trang 14
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
CHƯƠNG IV
DEMO CHƯƠNG TRÌNH ỨNG DỤNG JAVA
4.1. Đặt vấn đề
Trong một hệ phân tán có độ ổn định tốt, ta muốn duy trì sự gắn bó mạnh
giữa các bản sao của một đối tượng đặt trên các server khác nhau.
Thuật toán như sau : Trước khi thực hiện cập nhật, một server nào đó cần
phải yêu cầu và thống nhất với các server khác. Khi đó, server này tiến hành cập
nhật; điều này phải tiến hành trên tất cả các bản sao; đối tượng không thể truy cập
chừng nào các bản sao còn chưa cập nhật hết.
Vậy với điều kiện hệ phân tán không ổn định (luôn có sự cố kỹ thuật) các
Server sẽ cập nhật như thế nào?
4.2 Chương trình Java
4.2.1. Giả lập 03 Server và 01 Client
Phần này tôi chọn lập trình Client/Server bằng RMI của Java để mô phỏng quá
trình cập nhật dữ liệu khi rút tiền từ ATM:

- Giả lập ba Server trên một máy đơn giống như ba Server đang chạy trên
Internet thực sự. Ba Server này có chức năng:
o Chứa cơ sở dữ liệu là một tài khoản ngân hàng.
o Khởi động Server1 lắng nghe kết nối với Server2 và Server3 và hiển
thị cơ sở dữ liệu.
o Khởi động Server2 và kết nối với Server1, lắng nghe kết nối
Server3 và hiển thị cơ sở dữ liệu.
o Khởi động Server3, thực hiện kết nối với Server1 và Server2, đồng
thời hiển thị cơ sở dữ liệu.
Vậy Trước khi thực hiện cập nhật, một server nào đó cần phải yêu cầu và
thống nhất với các server khác. Cơ sở dữ liệu chỉ cập nhật khi các Server đồng bộ
- Giả lập Client trên một cửa sổ khác:
o Kết nối với 3 Server
o Gửi thông điệp để thay rút số tiền có trong tài khoản của các khách
hàng
HVTH: Phí Thị Lệ Tho trang 15
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Khi đó, server này tiến hành cập nhật; điều này phải tiến hành trên tất cả các
bản sao; đối tượng không thể truy cập chừng nào các bản sao còn chưa cập nhật hết.
Vậy nếu hệ phân tán không ổn định thì các Server sẽ không cập nhật cơ sở
dữ liệu hay các bản sao trên các Server phải được cập nhật một cách đồng bộ.
4.2.2 Giao diện chương trình
Để mô phỏng cho cách làm việc trên mạng của Server ta sẽ mở 3 cửa sổ dòng
lệnh, mỗi cửa sổ được dùng làm một Server và một cửa sổ Client để gửi thông điệp.
HVTH: Phí Thị Lệ Tho trang 16
SERVER 1 SERVER 2
CLIENTSERVER 3
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
KẾT QUẢ SAU KHI KHÁCH HÀNG RÚT SỐ TIỀN 50
4.2.3. Mã nguồn chương trình

* Mã nguồn tập tin Client.java
import java.io.*;
import java.rmi.*;
public class Client{
static Server1 obj1 = null;
String mkh;
String solg;
HVTH: Phí Thị Lệ Tho trang 17
SERVER 1
SERVER 2 SERVER 3
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
static Server2 obj2 = null;
static Server3 obj3 = null;
public static void main (String argv[]) throws Exception{
try{
Client sv = new Client();
DataInputStream stream = new DataInputStream(System.in);
System.out.println(" RUT TIEN THE ATM ");
try{
System.out.print("NHAP VAO MA KHACH HANG = ");
sv.mkh = stream.readLine();
System.out.print("NHAP SO TIEN CAN RUT = ");
sv.solg = stream.readLine();
}catch(IOException e){
System.out.println("loi nhap du lieu");
}
obj1 = (Server1)Naming.lookup("rmi://localhost:2001/Server1");
obj2 = (Server2)Naming.lookup("rmi://localhost:2002/Server2");
obj3 = (Server3)Naming.lookup("rmi://localhost:2003/Server3");
obj1.capnhat(sv.mkh,sv.solg);

obj1.listkhachhang();
obj2.listkhachhang();
obj3.listkhachhang();
}catch (Exception e){
System.out.println ("Client exception: " + e); } } }
* Server1.java
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.sql.*;
public interface Server1 extends java.rmi.Remote {
HVTH: Phí Thị Lệ Tho trang 18
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
public void listkhachhang() throws
java.rmi.RemoteException,SQLException;
public void capnhat(String mkh,String solg) throws
java.rmi.RemoteException,SQLException;
}
* Server1caidat.java
import java.rmi.*;
import java.rmi.server.*;
public class Server1caidat{
public static void main(java.lang.String args[]) throws Exception {
java.lang.System.out.println("Creating Registry Server1 ");
try {
java.rmi.registry.LocateRegistry.createRegistry(2001);
Server1Impl server1impl = new Server1Impl();
server1impl.listkhachhang();
java.rmi.Naming.rebind("rmi://localhost:2001/Server1", server1impl);
java.lang.System.out.println("Server1 Ready");
}

catch(java.lang.Exception exception) {
java.lang.System.out.println("Create registry failed " +
exception.getMessage());
java.lang.System.exit(0); }}}
* Server1Impl.java
import java.io.*;
import java.rmi.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Math;
HVTH: Phí Thị Lệ Tho trang 19
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
import java.util.*;
import java.util.StringTokenizer;
public class Server1Impl extends java.rmi.server.UnicastRemoteObject
implements Server1 {
int so,so1;
public Server1Impl()
throws java.rmi.RemoteException {
java.lang.System.out.println("Starting Server1 "); }
public void listkhachhang()throws java.rmi.RemoteException,SQLException
{ String smakh,stenkh,ssotien;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch (ClassNotFoundException e) {
System.out.println("Khong nap duoc lop Driver");
return;
}

try{
Connection con =
DriverManager.getConnection("jdbc:odbc:khachhang","","");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("Select * from khachhang");
while(rs.next()){
smakh = rs.getString("MaKH");
stenkh = rs.getString("TenKH");
ssotien = rs.getString("SoTien");
System.out.println(smakh+ " " + stenkh + " " + ssotien); }
rs.close(); stmt.close(); con.close();
} catch(SQLException se){
System.out.println("Loi o SQL : " + se.getMessage());
se.printStackTrace(System.out);} }
HVTH: Phí Thị Lệ Tho trang 20
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
public void capnhat(String mkh,String solg) throws
java.rmi.RemoteException, SQLException {
System.out.println("Client request");
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch (ClassNotFoundException e){
System.out.println("Khong nap duoc lop Driver");
return;}
try{
Connection con =
DriverManager.getConnection("jdbc:odbc:khachhang","","");
con.setAutoCommit(false);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("Select SoTien from khachhang

where MaKH='"+mkh+"'");
rs.next();
so = Integer.parseInt(rs.getString("SoTien"));
so1 = Integer.parseInt(solg);
stmt.addBatch("Update khachhang Set SoTien='"+String.valueOf(so-
so1)+"' where MaKH='"+mkh+"'");
int[] upcounts = stmt.executeBatch();
con.commit();
stmt.close();
con.close();
}catch(SQLException se){
System.out.println("Loi o SQL : " + se.getMessage());
se.printStackTrace(System.out);}}}
HVTH: Phí Thị Lệ Tho trang 21
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
KẾT LUẬN
Một trong các tiêu chí đặt ra trong việc phát triển các chương trình ứng dụng
hiện nay, là phải hoạt động hiệu quả trên môi trường mạng, đáp ứng được các yêu
cầu của đối tượng sử dụng. Đòi hỏi các nhà thiết kế hệ thống, người lập trình phải
có tư duy và khả năng và nắm bắt kịp thời các công nghệ ứng dụng trong lập trình
mạng .
Qua quá trình nghiên cứu bài giảng của thầy giáo PGS.TS Lê Văn Sơn và
các tài liệu liên quan để áp dụng thực hiện tiểu luận này, tôi đã hiểu được rõ thêm
bản chất của hệ tin học phân tán, nhất là quá trình gắn bó dữ liệu bằng phương pháp
trật tự hóa trên hệ thống đa Server thông qua việc gửi và nhận thông điệp giữa
Client/Server, giữa các Server.
Nội dung tiểu luận đã khái quát sơ lược lý thuyết về hệ Cơ sở dữ liệu phân
tán, sự gắn bó dữ liệu bằng phương pháp trật tự hóa, các kỹ thuật lập trình phân tán
trong ngôn ngữ lập trình Java. Xây dựng giao diện trao đổi thông điệp giữa Client
và hai server, từ đó xây dựng các Client/Server có monitoring theo dõi quá trình gửi

và nhận thông điệp trực tiếp trong panel.
HVTH: Phí Thị Lệ Tho trang 22
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
TÀI LIỆU THAM KHẢO
[1] Ts Lê Văn Sơn, Hệ tin học phân tán, Nhà xuất bản đại học quốc gia TP.
Hồ Chí Minh, 2002.
[2] Lê Văn Sơn, Nghiên cứu phát triển giải thuật quản lý nhiều bản sao cho
các ứng dụng phức tạp, Tạp chí Khoa học và Công nghệ Đại học Đà Nẵng, Số 1
(2003), tr. 64.
[3] Phương Lan, JaVa tập 2, nhà xuất bản lao động
[4] Trần Tiến Dũng, Giáo trình Lý thuyết và bài tập Java, nhà Xuất bản Giáo
dục năm 1999.
[5] Ngô Bá Hùng - Nguyễn Công Huy, Giáo trình lập trình truyền thông, Đại
học cần thơ.

HVTH: Phí Thị Lệ Tho
Tiểu luận lập trình mạng GVHD: PGS.TS Lê Văn Sơn
MỤC LỤC
Trang
LỜI NÓI ĐẦU 2
CHƯƠNG I 3
GIỚI THIỆU VÀI NÉT VỀ HỆ CƠ SỞ DỮ LIỆU PHÂN TÁN 3
1.1. Giới thiệu 3
1.2. Định nghĩa cơ sở dữ liệu phân tán 3
CHƯƠNG II 6
SỰ GẮN BÓ DỮ LIỆU TRONG CƠ SỞ DỮ LIỆU PHÂN TÁN 6
2.1 Tác động và giao dịch 6
2.2 Trật tự hóa các tác động 7
2.3 Triển khai giao dịch tôn trọng sự gắn bó 7
2.4 Quản lý gắn bó các giao dịch 9

3.1. Thuật toán Ellis đảm bảo gắn bó mạnh 10
3.2. Giới thiệu hệ thống phân tán sử dụng công nghệ RMI 11
3.2.1. Kiến trúc Java RMI 11
3.1.2. Giao tiếp: trái tim của RMI 12
3.2.1. Lớp truyền vận 13
4.2.1. Giả lập 03 Server và 01 Client 15
KẾT LUẬN 22
MỤC LỤC
HVTH: Phí Thị Lệ Tho

×