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

TIỂU LUẬN LẬP TRÌNH MẠNG VIẾT CHƯƠNG TRÌNH ÁP DỤNG THUẬT TOÁN DUY TRÌ GẮN BÓ, TRÁNH BẾ TẮC VÀ THIẾU THỐN VÔ HẠN HAI PHA TRONG HỆ ĐA SERVER

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 (315.5 KB, 28 trang )

Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN LẬP TRÌNH MẠNG
VIẾT CHƯƠNG TRÌNH ÁP DỤNG THUẬT TOÁN
DUY TRÌ GẮN BÓ, TRÁNH BẾ TẮC VÀ THIẾU
THỐN VÔ HẠN HAI PHA TRONG HỆ ĐA SERVER
GVHD: PGS.TS. LÊ VĂN SƠN
SVTH : ĐOÀN CƯỜNG
VÕ LÊ ĐỨC HUY
LỚP : KHOA HỌC MÁY TÍNH
Đà Nẵng tháng 03- 2010
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 1
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Lời mở đầu
Như chúng ta đã biết, đối với các hệ thống thông tin lớn, cơ sở dữ liệu không chỉ
được lưu trữ và quản lý bởi các Server độc lập mà thường được phân tán trên
nhiều Server và phân bố ở các vị trí địa lý khác nhau. Hệ thống cho phép xử lý
đa truy cập đồng thời và cho phép đăng ký từ xa. Một trong những lợi ích của
Việc phân tán dữ liệu như vậy là nhằm phân chia yêu cầu xử lý dữ liệu cho
nhiều máy nhằm làm tăng năng lực xử lý thông tin của hệ thống và đặc biệt, nó
đảm bảo yêu cầu toàn dữ liệu vì dữ liệu được lưu trữ dự phòng ở nhiều nơi khác
nhau.
Hệ thống trình bày như trên là hệ thống đa server và phức tạp. Một trong các
yêu cầu đặt ra cho hệ thống là phải đảm bảo gắn bó dữ liệu giữa các server
đồng thời không làm ảnh hưởng đến năng lực xử lý của hệ thống.
Nội dung chủ yêu trình bày trong báo cáo này tập trung vào xây dựng chương
trình đảm bảo gắn dữ liệu cho hệ thống đa server. Chương trình này được thiết
kế và xây dựng dựa trên các điều kiện sau:
Về mặt công cụ: Sử dụng ngôn ngữ lập trình mạng JAVA của Sun Micro System


là JDK 1.6, đồng thời khai thác bộ thư Iện hỗ trợ lập trình phân tán được xây
dựng sẳn trong bộ ngôn ngữ này là RMI.
Về mặt thuật toán: Thuật toán sử dụng trong chương trình này là “THUẬT
TOÁN DUY TRÌ GẮN BÓ, TRÁNH BẾ TẮC VÀ THIẾU THỐN VÔ HẠN
HAI PHA TRONG HỆ ĐA SERVER”. Nội dung chủ yếu của thuật toán chủ
được tham khảo từ báo cáo khoa học của Phạm Đình Hân và Lê Văn Sơn đăng
trên Tạp chí Khoa học Công nghệ, số 46-47(2004) và giáo trình Hệ Tin học Phân
tán của PGS TS Lê Văn Sơn. Thuật toán này được cài đặt lại bằng ngôn ngữ
JAVA RMI chạy trên nhiều server.
Trong phạm I của tiểu luận này, chương trình được cài đặt demo trên 3 server,
tuy nhiên chúng ta có thể cài đặt trên hệ thống gồm nhiều server. Chương trình
cũng bao gồm một công cụ gọi là module monitor nhằm giám sát Việc cập nhật
dữ liệu giữa các server, nhằm đánh giá tính gắn bó dữ liệu giữ liệu giữa các
server với nhau.
Cuối cùng, tôi mong muốn nhận được các ý kiến đóng góp, bổ sung của quý thầy
và các bạn.
Xin chân thành cảm ơn!
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 2
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Phần I: Lý thuyết
I.1 Đặt vấn đề:
Bây giờ, ta hãy nghiên cứu một ví dụ cụ thể về Việc quản lý các tài khoản của một
ngân hàng. Mỗi một người mở tài khoản tại ngân hàng sẽ được lưu trữ trong 1 bản ghi
của CSDL. Các trường của bản ghi này bao gồm họ và tên, địa chỉ, điện thoại và một
khoá duy nhất (mã số) cho người đó. Mã số đóng vai trò con trỏ đến CSDL khác chứa
các lần thu tiền vào và rút tiền ra từ tài khoản. Cuối cùng, ta phải có CSDL chứa số dư.
Số dư là số tiền có trong tài khoản ở thời điểm xem xét của từng người gửi tiền. Trạng
thái của số dư trong tài khoản được khống chế ở mức xác định ví dụ như số dư không
được ≤ N cho trước. Điều đó cũng đồng nghĩa với Việc đảm bảo trong tài khoản của
NSD không bao giờ có giá trị bằng 0 hay giá trị âm.

Do vậy, để nghiên cứu, ta cần giả định một số quy tắc nhất định cho Việc hoạt động
của hệ. Các quy tắc này thể hiện trong bảng sau đây :
STT Quy tắc
1 Chỉ có một loại phép toán (hay giao dịch) duy
nhất là chuyển khoản từ tài khoản này sang tài
khoản khác.
2 Hệ có số lượng tài khoản cố định.
3 Không có trao đổi nào khác diễn ra ngoài ngân
hàng.
4 Ngân hàng không được phép tiết lộ bí mật về số
dư của khách.
Xét các quy tắc có tính chất điều kiện như trên, sau khi thực hiện xong hoàn toàn
một giao dịch nào đó, hệ quản lý giao dịch cần phải đảm bảo hai đặc tính sau đây :
STT Ký
hiệu
Đặc tính
1 P1 Tổng tất cả các số dư phải là một hằng
số.
2 P2 Số dư cho một tài khoản là đại lượng ≥
0.
Hai đặc tính này gọi là đặc tính trạng thái tổng quát của CSDL (hay là các ràng
buộc toàn vẹn của hệ). Ta nói rằng trạng thái của hệ được gắn bó, nếu hệ mang hai đặc
tính vừa nêu.
Phép toán chuyển khoản thể hiện bằng cách trừ đi một giá trị P nào đó ở một tài
khoản và cộng chính giá trị đó vào tài khoản khác. Nếu ta ký hiệu A là số dư tài khoản
bị trừ đi và B là số dư tài khoản được cộng vào, thì chương trình thể hiện giao dịch này
có thể Iết như sau :
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 3
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Nếu A >= P thì

A := A - P (a)
B := B + P (b)
nếu không
<Xử lý theo kiểu séc không có tiền bảo chứng>
{Không cập nhật các tài khoản}
Kết thúc nếu
Theo thuật toán thể hiện bằng đoạn chương trình trên, ta cần lưu ý hai điểm sau
đây :
1. Giả sử rằng ta thực hiện đồng thời hai séc trích từ A hay rót vào B. Việc cập nhật
thông tin trên mỗi tài khoản không thể tiến hành theo kiểu tùy ý mà phải đảm bảo loại
trừ tương hổ ở mức tài khoản. Việc loại trừ đó có thể thực hiện theo các kiểu khác
nhau, một trong các kiểu đơn giản nhất là loại trừ ở mức toàn CSDL và hệ quả là loại
bỏ các phép song song. Có thể áp dụng loại trừ ở mức từng tài khoản riêng biệt.
2. Giả sử rằng bộ xử lý thực hiện giao dịch bị rơi vào trạng thái không làm Việc
được tại thời điểm giữa a và b. Tài khoản A đã được trừ trong khi B còn chưa được
cộng. Nói cách khác, đặc tính P1 không thể đảm bảo được gì hơn, nếu dừng lại ở đây.
Ta cần phải bổ sung thêm cho hệ một đặc tính nữa nhằm vào điều vừa nêu. Đó là sau
khi thực hiện một giao dịch hoặc là tất cả các cập nhật đều được tiến hành hoặc là
trạng thái các tài khoản không thay đổi.
Như vậy, lưu ý thứ 2 cho phép ta đảm bảo được tính gắn bó dữ liệu trong điều
kiện có sự cố. Đó chính là đòi hỏi quan trọng đối với toàn hệ trong Việc truy cập thông
tin.
Bây giờ, ta giới thiệu một loại giao dịch mới. Đó là giao dịch kèm theo tỷ lệ lợi
nhuận tiền gửi t có nghĩa là sau một khoản thời gian nào đó số dư này được tính tăng
lên bằng cách cộng số dư với lợi nhuận ngân hàng.
Ta ký hiệu U - giao dịch mới
T - các giao dịch chuyển khoản
và, bây giờ, các ràng buộc toàn vẹn của hệ là :
STT Ký
hiệu

Đặc tính
1 P'1
Thực hiện một lượng giao dịch T nào đó
không làm thay đổi tổng của tất cả các
tài khoản.
2 P'2 Trong một tài khoản, số dư bao giờ
cũng ≥ 0.
3 P'3 Thực hiện n giao dịch loại U nâng tổng
của các tài khoản bằng (1 + t)n.
Cần lưu ý rằng nếu ta cho phép các giao dịch loại U và T hoạt động song song, thì
có nguy cơ phá vở đặc tính P'3.
Ví dụ :
Hãy xem xét một hệ bao gồm hai tài khoản A và B, trong đó có hai giao dịch được
thực hiện theo kiểu tương tranh nhau :
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 4
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Giao dịch T Giao dịch U
A := A - P
B := B + P
A := (1 + t) x A
B := (1 + t) x B
và giả sử rằng đầu tiên ta phải kiểm tra điều kiện A ≥ P.
Nếu trình tự thực hiện của tác động sơ đẳng của hai giao dịch như sau :
A := A – P
A := (1 + t) x A
B := (1 + t) x B
B := B + P
thì điều kiện P'3 không được tôn trọng.
Bây giờ, ta sẽ thực hiện bằng những giá trị số cụ thể. Nếu trước khi thực hiện
hai giao dịch A = 1 000, B = 2 000 và nếu

t = 0.01 và P = 500, thì sau khi thực hiện chúng ta có A + B = 3300, trong khi đó ta lại
có A + B = 3250. Ta đã làm sai giá trị vốn cần có của chúng.
Ví dụ trên cho ta thấy một điều quan trọng khi thực hiện nhiều giao dịch song
song có thể dẫn hệ thống đến trạng thái không gắn bó. Do vậy, cần phải có các giải
pháp khắc phục tình hình đó và đây cũng chính là nội dung cốt lõi mà ta sẽ nghiên cứu
liền sau đây.
I.2 Sự gắn bó thông tin
I.2.1 Các điều kiện giả định và thực tế
Ta có một tập hợp thông tin nào đó có thể được truy cập bởi một tập hợp các
tiến trình. Số lượng các đối tượng thông tin có thể truy cập được và số lượng các tiến
trình có nhu cầu thông tin là con số cố định. Hệ này phát triển rời rạc theo thời gian;
giữa các điểm quan sát (hay còn gọi là điểm xác định), ta có thể nhận biết được trạng
thái thực của chúng, có nghĩa là các giá trị của các đối tượng và ngữ cảnh thực hiện của
các tiến trình. Hệ kiểu như vậy hoạt động với độ ổn định tuyệt vời.
Các điều kiện giả định này so với hệ thực tế có những điểm khác nhau căn bản
sau đây :
STT So sánh
1
Các đối tượng và các tiến trình có thể được tạo
lập và huỷ bỏ có tính chất động trong suốt quá
trình tồn tại của hệ.
2
Các đối tượng và các tiến trình có thể được phân
tán trên các trạm khác nhau liên hệ với nhau qua
hệ thống Iễn thông. Do vậy, ta không thể xác định
trạng thái thời điểm của hệ vì lý do độ trễ đường
truyền giữa các trạm và tính không tương thích
giữa các điểm quan sát trong các trạm đó. Để hiểu
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 5
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn

chi tiết vấn đề này, ta hãy tham khảo tài liệu về
mạng máy tính và các hệ thông mở.
3 Hệ thống Iễn thông và các tiến trình là các đối
tượng có thể xảy ra sự cố kỹ thuật.
Ta sẽ trình bày các thuật ngữ, các khái niệm và diễn giải có liên quan mật thiết đến các
đặc điểm vừa nêu.
I.2.2 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 liên 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ệ thỏa 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 hóa đặ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ừ mộ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 2 giao dịch khác
nhau được thực hiện bởi 2 tiến trình, thì
hiệu ứng tổng quát của chúng sẽ là hoặc

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.
Ví dụ :
Trong hệ thống quản lý tài khoản ngân hàng, mỗi số dư tài khoản được thể hiện
bằng một bản ghi. Ta cần lưu ý rằng :
1. Phép chuyển giá trị từ tài khoản này sang tài khoản khác được xem như là một
tác động.
2. Đọc và ghi một bản ghi là các tác động, nếu hệ quản lý các tập tin đảm bảo tính
không chia cắt được của chúng.
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
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 6
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
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.
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 bảo đảm được nữa; ta cũng đã gặp trong ví dụ I.1.
Một yêu cầu khác 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.
Trong các phần tiếp theo sau đây, ta sẽ nghiên cứu các điều kiện thực hiện các
giao dịch song song mà vẫn tôn trọng các yêu cầu của ràng buộc toàn vẹn.
I.2.3 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
} đã được xác định trong I.2.2.
Mỗi một 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 xẻ được này, toàn bộ 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 một 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 hợp các giao dịch M.
Ví dụ :
Cho T
1
= (a

11
, a
12
, a
13
, a
14
) và T
1
= (a
21
, a
22
, a
23
). Một trật tự hóa (T
1
, T
2
) được thể
hiện ở ví dụ sau đây :
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ó.
Đến đây, tuy ta chưa có dịp làm quen với các đặc tính tổng quát của trật tự hóa,
nhưng đã nắm được một đặc tính quan trọng 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ự.
Nếu ta nắm được các đặc trưng của các trật tự hóa tương đương với một trật tự hóa
tuần tự có nghĩa là cùng có tác dụng như trật tự hóa tuần tự, thì ta đã có được điều kiện
đủ của sự gắn bó.
Đó chính là tiêu chuẩn tương đương mà ngay bây giờ ta sẽ phải thành lập.
Ví dụ 1 :
Trở lại với ví dụ trong phần I.1 và xem xét 3 trật tự hóa có thể là S
1
, S
2
và S
3
.
Trật tự hoá S
1
thể hiện bằng hình vẽ I-1 sau đây :

Hình vẽ I-2 thể hiện trật tự hoá S
2
:

Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 7
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn

và S
3
thể hiện một trật tự hoá như sau :

Ta nhận thấy dễ dàng là S
2
có cùng hiệu ứng với trật tự hóa tuần tự S
3
, trong khi
đó S
1
lại khác. Trong S
2
và S
3
các cập nhật lần lượt của A và B đều được thực hiện theo
cùng một trật tự, còn trong S
1
trật tự cập nhật B bị đảo ngược.
Ví dụ này cho ta thấy sự quan trọng của Việc đảm bảo trật tự khi cập nhật
thông tin.
Ví dụ 2 :
Hãy xem xét hai giao dịch sau đây :
T
1
: C := 3 và T
2

: A := C x B
và hai trật tự hóa T
1
và T
2
sau đây (trong đó T
2
được phân ra thành các tác động sơ
đẳng, còn R chỉ đối tượng cục bộ của T
2
).

S'
1
là tuần tự. S'
2
tuân thủ trật tự của các tác động trong mỗi một giao dịch,
nhưng lại không tương đương với S'
1
. Giá trị của A nói chung không bằng 3 x B sau khi
thực hiện S'
2
.
Sự bảo toàn trật tự cập nhật (ví dụ 1) và sự bảo toàn tập hợp các truy vấn trước
khi cập nhật (ví dụ 2) thể hiện điều kiện tương đương giữa các trật tự hóa.
Cho S
tt
là một trật tự hóa tuần tự của tập hợp các giao dịch M và S là một trật tự
hóa bất kỳ của M. Hiệu ứng của S giống với hiệu ứng của S
tt

, nếu hai điều kiện sau đây
được triển khai :
Điều kiện 1 :
Để cho mỗi đối tượng e, các cập nhật biểu hiện trong cùng một trật tự trong S và S
tt
.
Điều kiện 2 :
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 8
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Hãy xem xét hai cập nhật kế tiếp nhau của một đối tượng e trong số các trật tự hóa,
và các cập nhật tương ứng của e trong trật tự hóa khác. Giữa hai cập nhật này, ta tham
khảo cùng các đối tượng trong hai trật tự hóa này trong cùng trật tự hay không.
Lưu ý 1 :
Các điều kiện nêu trên là các điều kiện đủ cho Việc đánh giá tương đương.
Lưu ý 2 :
Ta chỉ có thể hoán vị, không thay đổi hiệu ứng của một trật tự hóa, hoặc là các thao
tác đọc đối tượng có tính chất liên tiếp hoặc là các thao tác gán các đối tượng khác
nhau một cách liên tục.
Cả hai điều kiện vừa nêu là rất mạnh trong Việc nghiên cứu tiếp tục sau này.
Để cho trật tự hóa S, ta định nghĩa một quan hệ phụ thuộc giữa các giao dịch.
Cho T
1
và T
2
là hai giao dịch của M, e là đối tượng của hệ. Ta nói rằng T
2
phụ
thuộc T
1
qua trung gian của e, ký hiệu bằng (T

1
, e, T
2
), với các điều kiện sau đây được
kiểm tra :
1. Một tác động của T
1
tham chiếu e và một tác động sau T
2
thay đổi e.
2. Một tác động của T
1
thay đổi e và một tác động sau T
2
tham chiếu e. (hệ quả của
điều kiện 2).
3. Một tác động của T
1
thay đổi e và một tác động sau T
2
thay đổi e (hệ quả của điều
kiện 1) mà e không được thay đổi bởi một giao dịch khác giữa hai tác động T
1
và T
2
.
Thuật ngữ "trước" được hiểu theo nghĩa "cái tiếp theo nó trong trật tự hóa S".
Quan hệ này được biểu hiện bằng một đồ thị phụ thuộc mà các nút của nó được
gán nhãn bởi tên của giao dịch và các cung là tên các đối tượng. Để cho một trật tự hóa
tuần tự, đồ thị này không có vòng lặp (thực tế, nếu (T

1
, e, T
2
), thì T
1
trước T
2
trong trật
tự tuần tự).
Để cho hai trật tự hóa có cùng một hiệu ứng, thì điều kiện đủ là chúng phải có
cùng quan hệ phụ thuộc.
Do vậy, điều kiện đủ cho sự gắn bó của một trật tự hóa có thể 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 tự.
Chú ý :
Điều kiện cần này cũng có thể trở thành đủ trong một trường hợp đặc biệt mà trong
thực tế ta thường hay gặp. Đó chính là trường hợp mà toàn bộ đối tượng được cập nhật
bằng cách tham chiếu trước thời điểm đó bởi cùng một giao dịch.
Ví dụ :
Các đồ thị phụ thuộc tương ứng với các trật tự hóa S
1
, S
2
và S
3
của ví dụ 1 là :
(S
1
)
A
B

UT
(S
2
)
A
B
UT
(S
3
)
A
B
UT
Hình I-5. Đồ thị ứng với
các trật tự hoá S
1
, S
2
và S
3
.
Các đồ thị tương ứng với các giao dịch S'
1
và S'
2
của ví dụ 2 là :
(S'
1
)
C

T 2T 1
(S'
2
)
C
T 2T 1
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 9
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Hình I-6. Đồ thị ứng với hai giao dịch S'
1
và S'
2
.
Bây giờ, ta hãy kiểm tra các phương tiện đảm bảo một tập hợp các giao dịch
thực hiện theo một trật tự hóa gắn bó.
I.3 Triển khai giao dịch tôn trọng sự gắn bó
Cho một tập hợp các 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 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á huỷ
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).
Hiệu ứng của bộ làm chậm này (cơ chế then cài) đã được trình bày trong các
phần trước của tài liệu này và sẽ được trình bày tiếp trong phần kề liền sau đây.

I.3.1 Cơ chế then cài
Một giao dịch nào đó đang thực hiện phép then cài trên một đối tượng muốn
giành quyền sử dụng đối tượng này theo một vài kiểu truy cập nhất định. Cơ chế then
cài gán hay không gán quyền truy cập này căn cứ vào quy tắc tiền định như loại trừ
tương hổ, luật đọc - hiệu chỉnh thông tin,
Nếu quyền được thừa nhận, thì đối tượng bị cài then bởi giao dịch. Nếu không,
tiến trình thực hiện giao dịch bị khóa và đối tượng không bị cài then.
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.
Ta sẽ mô tả Việc sử dụng các then cài để đạt được sự gắn bó của giao dịch.
Then cài có thể là nguyên nhân của bế tắc và thiếu thốn vô hạn tài nguyên như đã thấy
trong chương IV và ta cũng sẽ giải quyết vấn đề này trong chương này.
I.3.1.1 Loại trừ tương hổ
Một trong những giải pháp giản đơn để đạt được trật tự hóa gắn bó thể hiện ở
chổ bắt buộc phải sử dụng trật tự hóa tuần tự. Để làm Việc đó, toàn bộ giao dịch được
đặt trong cặp hàm nguyên thuỷ mo_giaodich và dong_giaodich. Đây là sự đảm bảo cho
Việc loại trừ tương hổ giữa các giao dịch. Các hàm này có thể được triển khai dựa trên
các phương pháp đã nghiên cứu trong các chương trước.
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. Điều đó chỉ cho phép thực hiện song
song đối với các giao dịch truy cập vào các đối tượng rời rạc.
Nếu ta muốn nâng cao hơn nữa khả năng sử dụng song song, thì cần phải thực
hiện cài then ở mức độ thấp hơn mức giao dịch. Đó chính là điểm quan trọng mà ta cần
quan tâm.
I.3.1.2 Then cài chọn lựa các đối tượng
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 10
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Các quy tắc truy cập đối tượng được chú ý. Đó là tính hợp thức của Việc truy
cập. Nội dung của quy tắc này như sau :
Một giao dịch thay đổi giá trị của 1 đố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.
Để đảm bảo điều đó luôn luôn được thực hiện, người ta cho phép tiến hành cài
then một đối tượng trước khi Việc sử dụng nó có hiệu lực.
Một giao dịch có thể thực hiện 3 hàm nguyên thuỷ trên đối tượng e :
STT Tên hàm Thuyết minh
1 v_doc(e) Sử dụng khi muốn có được quyền đọc e
theo kiểu chia xẻ.
2 v_viet(e) Sử dụng khi muốn có được quyền đọc và
viết vào e theo kiểu loại trừ.
3 giai_phong(e
)
Giải phóng đối tượng e. Giả sử trước đó
đã được cài then bởi cùng giao dịch này.
Hai hàm nguyên thuỷ sau đã được trình bày trong các chương trước.
Nói một cách chính xác hơn, một giao dịch gọi là phát triển, nếu :
1. Một phép toán chỉ được thực hiện trên một đối tượng sau khi đối tượng đó đã
được cài then bởi giao dịch theo kiểu tương thích với phép toán đó.
2. Không có giao dịch nào cài then được trên đối tượng mà trước đó đã bị cài
then cũng bởi chính giao dịch đó, ngoại trừ theo kiểu loại trừ trong trường hợp trước đó
đã sử dụng kiểu chia xẽ.
3. Sau khi chấm dứt một giao dịch, không có đối tượng nào bị cài then.
Các then cài được sử dụng để hạn chế một lớp các trật tự hóa có khả năng được
thực hiện.
Một trật tự hóa được gọi là hợp thức nếu :
1. Đối tượng được một giao dịch cài then theo kiểu chia xẻ không bị bất cứ then
cài nào theo kiểu loại trừ của các giao dịch khác.
2. Một đối tượng bị cài then theo kiểu loại trừ, thì không bị bất kỳ then cài mới
nào nữa.
Do vậy, mọi cố gắng cài then không phù hợp với các điều kiện tương hổ nêu
trên đều phải chờ (bị làm chậm lại) cho đến khi mở then.

Chú ý :
Một giao dịch là tốt, nếu nó sử dụng các then cài phù hợp với đặc điểm của chúng.
Một trật tự hóa gọi là hợp thức, nếu các then cài hoạt động phù hợp với các đặc điểm
này.
Trong phần tiếp theo, ta chỉ xem xét các trật tự hóa hợp thức của các giao dịch được
hình thành hoàn toàn hợp thức. Ta sẽ xem xét các điều kiện của một trật tự hóa gắn bó.
I.3.1.3 Giao dịch hai pha
Bây giờ, ta hãy xem xét một giao dịch hình thành hợp thức bằng cách kiểm tra
hai điều kiện :
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.
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 11
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Ta có thể chứng minh trong bài tập 1 của chương này rằng toàn bộ trật tự hóa
hợp thức của các giao dịch như vậy là gắn bó. Nói một cách tổng quát, giả sử rằng toàn
bộ giao dịch là hình thành tốt và ngoài ra hãy kiểm tra bằng cách thay điều kiện 1 nêu
trên bằng điều kiện tổng quát hơn. Đó là điều kiện 2.
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.
Điều kiện này thể hiện ở chổ là dãy các phép toán trên các then cài được phân tích
thành 2 pha nối tiếp nhau. Một pha mà trong đó các đối tượng bị cài then, còn pha kia
chúng được mở then. Đặc tính này định nghĩa các giao dịch theo hai pha.
Bằng cách sử dụng điều kiện tương đương đã cho trong I.2.3 ta có thể hình thành
nên kết quả sau đây và cũng được phản ảnh trong bài tập 1 của chương.
Toàn bộ trật tự hóa hợp thức của một tập hợp các giao dịch hình thành tốt hai
pha là gắn bó, có nghĩa là cùng hiệu ứng với trật tự hóa tuần tự.
Ngược lại, nếu các giao dịch của một tập hợp (không phải là hình thành tốt và ở
hai pha, thì có thể xây dựng các trật tự hóa hợp thức của M là không gắn bó.
Ví dụ 1 :
Hãy truy cập vào tập hợp các đối tượng.

Giả sử rằng ta muốn đọc các giá trị của một tập hợp các đối tượng và quy ước
rằng các giá trị này kiểm tra các ràng buộc toàn vẹn. Lúc này, ta cần phải cài then theo
kiểu chia xẻ cho mỗi một đối tượng trước khi đọc, mở then diễn ra ở cuối của giao dịch
này. Một phép như vậy gọi là đọc gắn bó của tập hợp các đối tượng.
Như thế, giao dịch được thể hiện như sau :
v_doc(a)
v_doc(b)
doc(a)
doc(b)
v_doc(c)
doc(c)
giai_phong(a)
giai_phong(b)
giai_phong(c)
là giao dich đọc gắn bó của tập hợp {a, b, c}.
Ví dụ 2 :
Trở lại với ví dụ trong được mô tả trong ví dụ I.1. Đây là hai kiểu mô tả khác nhau
của giao dịch T và một kiểu mô tả có thể của giao dịch U :
Giao dịch T
1
Giao dịch T
2
Giao dịch T
3
v_viet(A)
A := A - P
1
giai_phong(A)
v_viet(B)
B := B + P

1
giai_phong(B)
v_viet(A)
A := A - P
2
v_viet(B)
giai_phong(A)
B := B + P
2
giai_phong(B)
v_viet(A)
A := (1 + t) x A
v_viet(B)
B := (1 + t) x B
giai_phong(B)
giai_phong(A)
Ta kiểm tra rằng tất cả các giao dịch đều là hình thành tốt và T
2
và U đều ở hai
pha và T
1
không có hai pha.
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 12
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Sau đây là hai trật tự hóa hợp thức S
1
và S
2
xuất phát từ Việc thực hiện song song
của T

1
và U và T
2
và U.
S
1
(T
1
,U) S
2
(T
2
,U)
T
11
: v_viet(A)
T
12
: A := A - P
1
T
13
: giai_phong(A)
U
1
: v_viet(A)
U
2
: A := (1 + t) * A
U

3
: v_viet(B)
U
4
: B := (1 + t) * B
U
5
: giai_phong(B)
T
14
: v_viet(B)
T
15
: B := B + P
1
U
6
: giai_phong(A)
T
16
: giai_phong(B)
T
21
: v_viet(A)
T
22
: A := A - P
2
T
23

: v_viet(B)
T
24
: giai_phong(A)
U
1
: v_viet(A)
U
2
: A := (1 + t) x A
T
25
: B := B + P
2
T
26
: giai_phong(B)
U
5
: v_viet(B)
U
4
: B := (1 + t) x B
U
5
: giai_phong(B)
U
6
: giai_phong(A)
Ta sẽ kiểm tra rằng S

1
dẫn đến trạng thái không gắn bó, U thực hiện trên các giá
trị không gắn bó của B và rằng S
2
là tương đương với trật tự hóa tuần tự S
2
(T
2
,U).
I.3.2 Hệ quả của tính không chắc chắn trên trạng thái của hệ
Bây giờ, ta hãy 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 cũng giả định rằng các tiến
trình và các phương tiện truyền thông tin là các đối tượng có thể rơi vào tình trạng sự
cố.
Các đối tượng thay đổi hay tham chiếu trong quá trình thực hiện cùng một giao
dịch có thể nằm trên các trạm khác nhau. Nếu ta xét đến ví dụ I.1, thì tài khoản A và tài
khoản B có thể được quản lý bởi hai cơ quan khác nhau. Phép chuyển khoản T trong
trường hợp này bao gồm các tác động thực hiện trên hai trạm khác nhau. Một xử lý
như vậy, trong trường hợp hệ tập trung chỉ cần một giao dịch tuần tự là đủ, nhưng với
các hệ phân tán, thì cần ít nhất hai dãy tác động cục bộ. Tương tự như vậy đối với giao
dịch loại U.
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 và đảm bảo tôn trọng tính vẹn
toàn của các đối tượng 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 huỷ bỏ các giao dịch.
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 13
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
4 Cơ chế phục hồi các giao dịch đã bị huỷ bỏ hay
xử lý các sự cố.
I.3.3 Xử lý các sự cố
Ta giả sử rằng các bộ xử lý và bộ nhớ cấu tạo nên các trạm là nguyên nhân chính
của các sự cố làm ngắt quảng quá trình thực hiện các tiến trình. Các hệ thống Iễn thông
cũng có thể là nơi diễn ra các sự cố làm mất hẵn hay chồng chéo các thông điệp.
Ta xét sự gắn bó thông tin không chỉ trong các điều kiện thuận lợi như đã nêu trước
đây, mà còn tính đến các yếu tố mới và cũng xét đến các công cụ cho phép đảm bảo
cho sự gắn bó này.
Nếu một tiến trình p bị sự cố trong lúc thực hiện một giao dịch T, thì trạng thái của
hệ xuất phát từ Việc thực hiện từng phần đó chắc chắn sẽ không còn gắn bó.
Một cơ chế cho phép duy trì sự gắn bó trong môi trường phân tán có sự cố phải là :
STT Phải thực hiện
1 Giao dịch T bắt buộc phải được thực hiện một cách
trọn vẹn.
2 Nếu có sự cố diễn ra, thì bắt buộc nó phải quay trở
lại điểm xuất phát.
Muốn thực hiện những điều vừa nêu trong bảng 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 Đặc tính
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 thá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ó.
Các đặc tính trên có thể mô tả bằng hình vẽ I-7 sau đây :

Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 14
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Hình I-7. Ba giai đoạn của một giao dịch.
Trong tình huống này, ta có hai giải pháp có thể là :
STT Giải pháp tổng quát
1 Phục hồi trạng thái của hệ như trước khi diễn ra
giao dịch T.
2 Cố gắng tiếp tục thực hiện giao dịch T cho đến kết
thúc.
Không phải lúc nào ta cũng có thể áp dụng được giải pháp 1 vì một số tác động
không thể quay trở lại được. Như thế, ta phải xác định cho được điểm không trở lại của
từng giao dịch. Căn cứ vào điểm này, nếu vượt quá nó, không có hành động nào quay
trở lại được thực hiện và trạng thái trước đó của giao dịch sẽ được phục hồi bởi phép
lập lại (rollback).
Trong hệ thống tập trung, Việc triển khai một kỹ thuật khẵng định (điểm không
trở lại) không có gì khó khăn. Ta thực hiện một cập nhật có tính chất quyết định vào
trạng thái bằng một phép ghi duy nhất.
Trong hệ phân tán, vấn đề triển khai có nhiều tinh tế hơn vì khi một trạm bắt
đầu cập nhật, nó phải gửi cho tất cả các trạm khác và sự cố có thể diễn ra vào đúng thời
điểm đó.
Các kỹ thuật khẵng định hai giai đoạn (Lampson) hay ba giai đoạn (Bernstein)
được phát triển.
Ví dụ :

DFS là hệ quản lý các tập tin được thành lập cho hệ điều hành mạng ETHERNET.
Các chức năng truy cập vào các tập tin được tiến hành thông qua các tiến trình server.
Các tiến trình server chịu trách nhiệm trao đổi các thông điệp với các tiến trình NSD.
Ta nhận thấy các nguyên lý toàn vẹn và khẵng định ở đây có nhiều mức khác nhau :
STT Tên gọi Thuyết minh
1 Ghi tập tin
Tại mức ghi file, phép toán thực hiện
trên "bộ nhớ cứng" có nghĩa là hoặc là
thực hiện trọn vẹn phép toán, hoặc là
không thực hiện gì cả. Bộ nhớ cứng
được thực hiện bằng cách ghi liên tục
hai bản thông tin, trong đó một cho dự
trữ.
2 Giao dịch
Tại mức giao dịch, các thay đổi thông
tin không được thực hiện tức thì, mà
được ghi trong một list đích. Một phép
toán cho phép chuyển tập hợp các thay
đổi này sang các đối tượng, như thế là
giao dịch khẵng định. Như vậy, list đích
hoặc là toàn bộ hoặc là không có gì.
Cuối cùng, khi giao dịch làm giống
nhau cho các server, thì tại mỗi server
đều phải có list đích của mình. Một
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 15
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
3 Server
trong các server phải là server chỉ huy
cho giao dịch này và kiểm tra toàn bộ
các list đích đã được chuẩn bị tốt hay

chưa. Khi mọi Việc đã tốt, nó khẵng
định cho tiến trình NSD biết là giao
dịch đã kết thúc. Các list đích được đảm
bảo chắc chắn nhờ cơ chế bộ nhớ cứng.
I.3.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ó cá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 bao 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 từng 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 của
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.
Bây giờ ta hãy xem xét một tập hợp các giao dịch. Như trong phần I.2 đã chỉ ra,
ta cố gắng thực hiện các giao dịch với độ cực đại về song song giữa các tác động trong
điều kiện duy trì tốt trạng thái gắn bó của hệ. Áp dụng cơ chế then cài như đã trình bày
trong I.3.1 có thể là nguyên nhân dẫn đến bế tắc và thiếu thốn vô hạn. Đó là điều mà ta
cần phải tính đến. Nhưng trong thực tế, khả năng xuất hiện bế tắc là không đáng kể vì
mỗi một giao dịch xử lý một phần rất bé của tập hợp các đối tượng. Đó là điểm khác
nhau giữa hệ phân tán và hệ tập trung.
Ta sẽ được giới thiệu hai phương pháp triển khai các nguyên lý trong I.3.1.

Trong phương pháp đầu, bế tắc được xử lý bằng phương pháp dự phòng, điều đó đòi
hỏi ta phải có kiến thức cần thiết về các đối tượng xử lý. Phương pháp thứ hai 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 huỷ bỏ các giao dịch. Thực tế cho thấy phương pháp này là hoàn hảo nếu
khả năng xung đột thấp.
I.3.4.1 Sử dụng các giao dịch hai pha
Ta đã thấy trong I.3.1 là sự gắn bó có thể được đảm bảo nếu đặt tất cả các giao
dịch trong dạng 2 pha. Để mở rộng các lập luận trong I.3.1.3 và áp dụng được vào tập
hợp các đối tượng phân tán trên nhiều trạm, ta cần phải xác định một trật tự giữa hai
tác động trên hai trạm khác nhau.
Đặc biệt là kỹ thuật dấu, cho phép áp dụng tại đây.
Vấn đề còn lại là phải giải quyết sao cho không diễn ra tình trạng bế tắc. Có thể
áp dụng phương pháp dự phòng dựa trên cơ sở các thông điệp như trong phần III.3.
Một phương pháp như vậy đòi hỏi phải có sự hiểu biết nhất định về các đối tượng xử lý
từ trước bằng một giao dịch nào đó và không được phép định nghĩa động của các đối
tượng này; trong khi đó, ràng buộc này có thể được chấp nhận.
Trong các trường hợp tổng quát, Việc dự phòng các bế tắc là không thể được.
Do vậy, cần phải chấp nhận các xung đột truy cập diễn ra và xử lý chúng chỉ sau khi
phát hiện được. Cách này đòi hỏi ta phải huỷ bỏ các giao dịch. Việc duy trì trạng thái
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 16
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
gắn bó của hệ trên các đối tượng xử lý chỉ đạt được bằng cách sử dụng có hệ thống các
kỹ thuật thích hợp. Đó chính là phương pháp phát hiện động mà ta sẽ giới thiệu sau
đây.
I.3.4.2 Thuật toán duy trì sự gắn bó tránh bế tắc và thiếu thốn
Thuật toán này được mô tả trong các ấn phẩm của Rozenkrantz. Các phép toán then
cài và mở then không được chỉ ra trong các giao dịch. Một bộ điều khiển cục bộ trong
từng trạm phân tích tất cả các truy cập vào đối tượng và thực hiện tự động các phép
toán này khi cần thiết theo nguyên lý hai pha. Các đối tượng xử lý bởi các giao dịch
không cần phải biết từ trước.

I.3.4.2.1 Duy trì sự gắn bó
Nội dung cơ bản của phương pháp này dựa trên các nguyên lý sau đây :
1. Then cài ngầm định.
Bộ điều khiển cục bộ trên mỗi trạm S
i
áp đặt cho các tác động khác nhau trên trạm
và diễn biến theo một trật tự hóa hợp thức. Để làm Việc đó, cần phải chặn giao dịch T
j
hay nói chính xác là tiến trình P
ji
mà tiến trình này đang thực hiện trên S
i
. Tất cả diễn ra
cứ như mỗi một đối tượng được cài then bởi mỗi một giao dịch sử dụng, theo kiểu chia
xẻ trước khi đọc, theo kiểu loại trừ trước khi ghi; tất cả các mở then chỉ diễn ra sau khi
xong một giao dịch. Như thế, sự gắn bó của tập hợp các đối tượng được đảm bảo bằng
kết quả của I.3.1.3. Đó là trật tự hóa hợp thức của giao dịch hình thành tốt hai pha.
2. Phát hiện động các xung đột.
Hành I xung đột truy cập vào đối tượng diễn ra khi có hai giao dịch cố gắng thực
hiện các tác động không tương thích vào một đối tượng này. Các quy tắc tương thích là
các quy tắc của mô hình "đọc-hiệu chỉnh" trong phần I.3.1.2 đã được trình bày. Một
xung đột được phát hiện khi có ý định truy cập bởi một giao dịch T
2
vào một đối tượng
đã bị khóa ngầm định bởi giao dịch T
1
theo kiểu không tương thích. Vì lý do bế tắc mà
ta sẽ trình bày trong phần 2 sau đây, không nên để T
2
chờ cho đến khi T

1
kết thúc, mà
bắt buộc phải huỷ một trong hai giao dịch này.
3. Khẵng định.
Như đã trình bày ở trên, toàn bộ giao dịch theo hệ số ưu tiên có thể bị huỷ bỏ, nên
cần phải áp dụng có hệ thống một kỹ thuật khẵng định. Mỗi khi một giao dịch bị huỷ
bỏ, thì tất cả các đối tượng mà nó đã cài then đều được mở then và tất cả các giá trị đã
bị thay đổi cần phải khôi phục trở lại như cũ của chúng. Trong trường hợp đó, chỉ có
các phép ghi được thực hiện trên các bản sao đối tượng. Nếu giao dịch bị huỷ, một
thông điệp huỷ được gửi đi cho tất cả các trạm chứa các đối tượng thay đổi và các bản
sao bị huỷ bỏ. Trường hợp ngược lại, giao dịch kết thúc bình thường, thì một thông
điệp khẵng định được gửi cho tất cả các trạm đó và lúc này các bản sao của các đối
tượng thay đổi được phép thay thế các bản gốc.
I.3.4.2.2 Huỷ bỏ bế tắc và thiếu thốn vô hạn
Ngay khi ta chặn các giao dịch tác nghiệp trên các đối tượng chung hoặc bằng
then cài hay ngầm định, ta có thể làm phát sinh các rủi ro về bế tắc.
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 17
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Một bế tắc được loại bằng cách huỷ bỏ hoàn toàn một trong các giao dịch gây
nên xung đột, nhưng nếu ta chọn theo kiểu ngẫu nhiên để huỷ bỏ, thì ta lại gặp phải
một trường hợp rắc rối về kỹ thuật khác là một hay một số giao dịch nào đó sẽ rơi vào
trạng thái chờ vô hạn.
Nhằm tránh hiện tượng thiếu thốn vô hạn đó, tập hợp các giao dịch được hoàn
toàn sắp xếp theo một trong các phương pháp đã nghiên cứu trong chương IV và
chương V như là các dấu chẳng hạn. Khi có xung đột diễn ra, ta chọn lựa giao dịch
thích hợp một cách có hệ thống theo thuật toán dựa trên trật tự đó.
Trong thiết kế hệ thống phân tán, người ta thường sử dụng hai chiến lược chọn
lựa giao dịch. Sau đây, ta sẽ mô tả một trong các phương pháp ấy gọi là phương pháp
wait-die system.
Giả sử rằng T

1
và T
2
là hai giao dịch đang ở trong trạng thái xung đột để truy cập
vào một đối tượng chung e. T
1
đã thực hiện động tác đầu tiên trên e. Ta gọi các N(T
1
)
và N(T
2
) là các dấu kết hợp lần lượt với từng giao dịch khi khởi sự.
Khi diễn ra xung đột, Việc lựa chọn được thực hiện bằng bộ điều khiển của trạm
e được tiến hành như sau :
Nếu N(T
2
) < N(T
1
) thì < T
2
bị chặn >
nếu không < T
2
bị huỷ rồi được khởi sự
lại>
Chấm dứt nếu
Nói cách khác, nếu giao dịch T
2
là trước hơn, thì nó vẫn trong tình trạng bị chặn
cho đến khi T

1
kết thúc bình thường hay đến lượt bị huỷ bỏ. Nếu giao dịch T
2
là mới
nhất, thì nó bị huỷ và khởi động trở lại bắt đầu từ trạm sinh ra nó.
Chiến lược thứ hai gọi là wound-wait system cũng sử dụng trật tự của các giao
dịch, nhưng bắt nguồn bằng Việc "trưng dụng".
I.3.4.2.3 Ví dụ
Ta hãy minh họa hoạt động của thuật toán bằng Việc thực hiện hai giao dịch :
Giao dịch T
1
Giao dịch T
2
A := A + 10 A := A + 5
Các giao dịch này có thể được phân tích để phát hiện ra các truy cập sơ đẳng
vào đối tượng chia xẻ A. Giả sử rằng a
1
và a
2
là hai biến cục bộ tương ứng với các tiến
trình thực hiện T
1
và T
2
. Để làm sáng tỏ vấn đề xung đột truy cập, ta cũng phải cho xuất
hiện, bằng cách thuyết minh, các phép toán then cài ngầm định :
Giao dịch T
1
Giao dịch T
2

 {v_doc(A)}
a
1
:= A
a
1
:= a
1
+ 10
 {v_doc(A)}
a
2
:= A
a
2
:= a
1
+ 5
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 18
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
 {v_viet(A)}
A := a
1
{giai_phong(A)}
 {v_viet(A)}
A := a
2
{giai_phong(A)}
Bây giờ ta hãy xem xét ý định thực hiện T
1

và T
2
theo trật tự hóa (không hợp thức)
. T
1
được xem là giai dịch già nhất và hãy áp dụng chiến lược trình bày ở trên.
Quá trình thực hiện diễn ra theo sơ đồ sau :
Bước Thuyết minh
1 T
1
thực hiện dãy 
2
T
2
thực hiện dãy  và không có xung đột
diễn ra.
3
T
1
có ý định thực hiện dãy  và bước vào
xung đột với T
2
. Việc sử dụng thuật toán
kéo theo Việc chặn T
1
.
4
T
2
có ý định thực hiện dãy  và bước vào

xung đột với T
1
. Việc sử dụng thuật toán
kéo theo sự huỷ bỏ T
2
.
5
T
1
được mở chặn và thực hiện dãy  và
không có xung đột vì Việc huỷ bỏ T
2
đã
huỷ bỏ luôn Việc chặn A bởi T
2
.
6
T
2
được thực hiện lại công Việc của mình
ngay từ đầu và thực hiện liên tục  và .
Hiệu ứng tổng quát của Việc thực hiện này cuối cùng chính là hiệu ứng của Việc
trật tự hóa theo kiểu tuần tự, cho nên có thể coi là hợp thức theo dãy .
I.3.5 Kết luận
Trong hệ phân tán, sự hiểu biết không hoàn toàn đầy đủ và chậm trể các thông
tin không phải cục bộ dẫn đến cần phải quản lý chặt chẽ hơn Việc truy cập đến các đối
tượng. Những vấn đề kỹ thuật này được đặt ra, song nếu không giải quyết triệt để, đôi
khi làm thiệt hại đến hiệu quả hoạt động chung của hệ. Như vậy, nếu ta sử dụng các
giao dịch hai pha, Việc dự phòng bế tắc bằng phương pháp gửi các thông điệp có thể
dẫn đến làm chậm trễ các then cài có lợi (vô hại); điều đó làm hạn chế khả năng song

song.
Theo phương pháp phát hiện động các xung đột, một giao dịch nào đó có thể bị
huỷ bỏ và khởi động lại, thì trong lúc này một hiểu biết đầy đủ về tập hợp các thông tin
sẽ là điều quan trọng nhằm tránh mất thời gian.
Ta cũng lưu ý một điều là tất cả các phương pháp đã được sử dụng đều dựa vào
Việc vận dụng một trật tự toàn phần chặt chẽ trên các giao dịch. Đó là phương tiện duy
nhất để điều chỉnh trong tình hình có xung đột.
Phần II. Cài đặt chương trình trên hệ đa server
II.1 Thuật toán khoá chốt cơ bản
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 19
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
{Các định nghĩa chuẩn bị cho các thuật toán được trình bày trong tiểu luận}
declare-type
Operation : một trong số Begin-Transaction, Read, Write, Abort, hoặc Commit
DataItem : một mục dữ liệu trong cơ sở dữ liệu phân tán
TransactionId: một giá trị duy nhất được gán cho mỗi giao dịch
DataVal: một giá trị có kiểu dữ liệu cơ bản (nghĩa là số nguyên, số thực,…)
SiteId: một đinh danh duy nhất cho vị trí
Dbop: một bộ ba gồm {một phép toán trên cơ sở dữ liệu của ứng dụng}
opn: Operation
data: DataItem
tid: TransactionId
Dpmsg: một bộ ba gồm
opn: Operation
tid: TransactionId
result: DataVal
Scmsg: một bộ ba gồm
opn: Operation
tid: TransactionId
result: DataVal

Transation ← một bộ hai gồm
tid: TransactionId
body: thân giao dịch
Message ← một chuỗi ký tự cần được truyền đi
OpSet: một tập các Dbop
SiteSet: một tập các SiteIde
WAIT(msg: Message)
begin
{đợi cho đến khi có một thông báo đến}
end
{Thuật toán 2.1. Bộ quản lý khoá cơ bản (Basic LM)}
declare-var
msg : Message
dop : Dbop
Op : Operaeion
x : Dataltem
T : TransactionId
pm : Dpmsg
res : Dataval
SOP : Opset
begin
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 20
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
repeat
WAIT(msg)
case of msg
Dbop:
begin
Op ← dop.opn
x ← dop.da ta

T ← dop.tid
case of Op
Begin-transaction:
begin
gởi dop đến bộ xử lý dữ liệu
end
Read or Write {yêu cầu khoá}
begin
tìm đơn vị khoá lu sao cho x lu
if lu chưa bị khoá or thể thức khoá lu tương thích với Op
then
begin
đặt khoá trên lu ở thể thức thích hợp
gởi dop đến bộ xử lý dữ liệu
end
else đưa dop vào một hàng đợi của lu
end-if
end
Abort or Commit:
begin
gởi dop đến bộ xử lý dữ liệu
end
end-case
Dpmsg: {trả lời của bộ xử lý dữ liệu}
Begin {yêu cầu mở khoá}
Op ← pm.opn
x ← pm.result
T ← pm.tid
tìm đơn vị khoá lu sao cho x lu, giải phóng khoá trên lu do T giữ
if không còn khoá nào trên lu and

có những thao tác đang đợi khoá lu trong hàng đợi then
begin
SOP ← thao tác đầu tiên trong hàng đợi
SOP ← SOP { là một thao tác trên hàng đợi có thể khoá lu
ở thể thức khoá tương thích với các thao tác hiên hành
trong SOP }
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 21
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
đặt các khoá trên lu cho các thao tác trong SOP
for tất cả các phép toán trong SOP do
gởi mỗi thao tác đến bộ xử lý dữ liệu
end-for
end-if
end
end-case
until forever
end. {Basic LM}
II.2 - NHỮNG ĐIỂM CẦN CẢI TIẾN
Thuật toán khoá được cho trong thuật toán 2.1 vừa được trình bày không đồng bộ
hoá chính xác các thực thi giao dịch. Điều này là do khi tạo ra các lịch biểu khả tuần
tự, các thao tác khoá và giải phóng khoá cũng cần phải được điều phối. Chúng ta minh
hoạ nó bằng ví dụ sau:
Ví dụ:
Xét hai giao dịch sau đây:
T
1
: Read(x) T
2
: Read(x)
x ← x + 1 x ← x * 2

Write(x) Write(x)
Read(y) Read(y)
y ← y – 1 y ← y * 2
Write(y) Write(y)
Commit Commit
Dưới đây là một lịch biểu hợp lê được bộ quản lý khoá tạo ra khi sử dụng Thuật
toán 2.1:
S = {wl
1
(x) R
1
(x), W
1
(x), lr
1
(x), wl
2
(x), R
2
(x), W
2
(x), lr
2
(x), wl
2
(y),
R
2
(y), W
2

(y), lr
2
(y), C2, wl
1
(y), R
1
(y), W
1
(y), lr
1
(y), Cl}
Ở đây, lr
i
(z) biểu thị thao tác giải phóng khoá trên z đang được T
i
giữ.
Chú ý rằng S không khả tuần tự. Bởi vì, nếu trước lúc thực hiện các giao dịch
này, giá trị của x và y lần lượt là 50 và 20. Nếu S khả tuần tự, thì giá trị sau khi thực
hiện tương ứng là 102 và 38 nếu T
1
thực hiện trước T
2
, hoặc là 101 và 39 nêu T
2
thực
hiện trước T
1
. Tuy nhiên, kết quả thực hiện S cho ra giá trị của x và y lần lượt là 102 và
39. Điều đó chứng tỏ S không khả tuần tự.
Vấn đề lịch biểu S trong ví dụ này là, thuật toán khoá chốt đã giải phóng các

khoá được một giao dịch giữ (chẳng hạn T
1
) ngay khi lệnh đi kèm (đọc hoặc ghi) được
thực hiện; và đơn vị khoá (chẳng hạn x) không cần truy xuất nữa. Tuy nhiên bản thân
giao dịch đó đang khoá những mục khác (chẳng hạn y) sau khi nó giải phóng khoá trên
x. Mặc dù điều này dường như có lợi vì làm tăn khả năng hoạt động đồng thời, nó cho
phép các giao dịch đan xen với nhau, làm mất đi tính biệt lập và tính nguyên tử tổng
thể. Đây chính là lập luận của phương pháp khoá chốt hai pha (two-phase locking,
2PL).
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 22
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Qui tắc khoá hai pha chỉ đơn giản khẳng định rằng không có giao dịch nào yêu
cầu khoá sau khi nó đã giải phóng một trong các khoá của nó. Điều đó nói rằng một
giao dịch không được giải phóng khoá cho đến khi nó đảm bảo rằng không yêu cầu
thêm khoá nữa. Các thuật toán 2PL thực hiện các giao dịch qua hai pha. Mỗi giao dịch
có một pha tăng trưởng (growing phase), trong pha này nó nhận các khoá và truy xuất
các mục dữ liệu, và có một pha thu hồi ( shrinking phase), là giai đoạn nó giải phóng
các khoá (Hình 2.2). Điểm khoá (locking point) là thời điểm giao dịch đã nhận được tất
cả các khoá nhưng chưa bắt đầu giải phóng bất kỳ khoá nào. Vì thế điểm khoá xác định
cuối pha tăng trưởng và khởi điểm pha thu hồi của một giao dịch.
Hình 2.2. Biểu đồ khoá 2PL
Hình 2.2 chỉ ra rằng bộ quản lý khoá giải phóng các khoá ngay sau khi hoàn tất
việc truy xuất. Điều này cho phép các giao dịch đang đợi khoá tiếp tục tiến hành và
nhận khoá, do vậy làm tăng hoạt động đồng thời. Tuy nhiên việc cài đặt gặp nhiều
khó khăn vì bộ quản lý khoá phải biết rằng giao dịch đã nhận đủ tất cả mọi khoá và sẽ
không còn cần khoá một mục nào nữa. Bộ quản lý khoá cũng phải biết rằng giao dịch
không còn cần truy xuất mục dữ liệu đó nữa, vì thế khoá có thể được giải phóng. Cuối
cùng, nếu giao dịch bị huỷ bỏ sau khi giải phóng một khoá, nó có thể làm huỷ bỏ luôn
cả các giao dịch đã truy xuất các mục đã mở khoá. Hiện tượng này được gọi là huỷ bỏ
dây chuyền (cascading abort). Vì những khó khăn đó, phần lớn các bộ xếp lịch 2PL đều

cài đặt một dạng khắc khe hơn có tên là khoá chốt hai pha nghiêm ngặt (strict two-
phase locking), trong đó nó giải phóng toàn bộ các khoá vào lúc giao dịch kết thúc (uỷ
thác hoặc bị huỷ bỏ). Biểu đồ khoá loại này được trình bày trong hình sau đây.
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 23
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
Hình 2.3. Biểu đồ khoá hai pha nghiêm ngặt.
Bộ quản lý khoá 2PL nghiêm ngặt chỉ sửa lại một ít trong Thuật toán 2.1. Thực
sự chỉ cần sửa đổi phần xử lý các hồi đáp từ bộ xử lý dữ liệu nhằm đảm bảo rằng
các khoá chỉ được giải phóng nếu thao tác là uỷ thác hoặc huỷ bỏ. Toàn bộ thuật
toán 2PL nghiêm ngặt được trình bày trong Thuật toán 2.2, thuật toán quản lý giao dịch
để xếp lịch theo 2PL được trình bày trong Thuật toán 2.3.
Thuật toán 2.2. Thuật toán quản lý khoá bằng phương pháp khoá chốt hai pha
nghiêm ngặt (S2PL-LM).
declare-var
msg : Message
dop : Dbop
Op : Operaeion
x : Dataltem
T : TransactionId
pm : Dpmsg
res : Dataval
SOP : Opset
begin
repeat
WAIT(msg)
case of msg
Dbop:
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 24
Tiểu luận: Lập trình mạng GVHD: PGS.TS. Lê Văn Sơn
begin

Op ← dop.opn
x ← dop.da ta
T ← dop.tid
case of Op
Begin-transaction:
begin
gởi dop đến bộ xử lý dữ liệu
end
Read or Write {cần khoá chốt}
begin
tìm đơn vị khoá lu sao cho x lu
if lu chưa bị khoá or thể thức khoá lu tương thích với Op
then
begin
đặt khoá trên lu ở thể thức thích hợp
gởi dop đến bộ xử lý dữ liệu
end
else đặt dop vào một hàng đợi cho lu
end-if
end
Abort or Commit:
begin
gởi dop đến bộ xử lý dữ liệu
end
end-case
Dpmsg:
Begin
Op ← pm.opn
res ← pm.result
T ← pm.tid

If Op = Abort or Op = Commit then
begin
for mỗi đơn vị khoá lu bị khoá bởi T do
begin
giải phóng khoá trên lu do T giữ
if không còn khoá nào trên lu and
có các thao tác đang đợi khoá lu trong hàng đợi then
begin
SOP ← thao tác đầu tiên trong hàng đợi
SOP ← SOP { là một thao tác trên hàng đợi có thể khoá lu
ở một thể thức khoá tương thích với các thao tác hiên hành
trong SOP }
Người thực hiện: Đoàn Cường,Võ Lê Đức Huy KHMT 11 Trang 25

×