Professional Documents
Culture Documents
He Phan Tan-Bai 02p3-4
He Phan Tan-Bai 02p3-4
He Phan Tan-Bai 02p3-4
Distributed Systems
II. Các vấn đề cơ bản
Đồng bộ thời gian
1. Giới thiệu
Thời gian, đồng hồ là vấn đề cần quan tâm trong các hệ thống phân tán
Thường cần đo thời gian: thời gian xảy ra sự kiện, thời gian giao dịch, ..
Các cơ chế, thuật toán cần đồng hồ xác định thời gian: timestamp,
các đồng hồ dựa trên giao động tinh thể thường có sai số khoảng 10-6
(1000000 giây - sai lệch 1 giây)
2. Đồng hồ
Trong nhiều hệ thống phân tán, thời gian thực: đồng bộ đồng hồ giữa
các nút là quan trọng
quy chuẩn về một múi giờ thời gian UTC (coordinated universal time)
có thể đồng bộ với máy chủ thời gian NT server
đồng hồ nguyên tử: sai số khoảng 10-13.
Các tiến trình có đồng hồ của mình, và nhiều trường hợp cần bộ để phục vụ cho
các bài toán khác nhau, chẳng hạn ghi nhận nhật ký
Trường hợp đồng bộ đồng hồ với một nguồn tin cậy => external synch
độ chính xác không quá D
Các tiến trình có thể đồng bộ với nhau => internal synch
đồng bộ thời gian sai không quá D
2. Đồng hồ
Đồng bộ trong hệ synch
để ý: hệ synch: các sai lệch đồng hồ, thời gian truyền - bị chặn trên - dự tính đc
Tiến trình p1 gửi message chứa thời gian t (local) tới p2
p2 có thể đặt thời gian t+Ttran , Ttran - thời gian truyền message
tuy nhiên: thời gian truyền có thể biến thiên
với hệ synch: thời gian truyền này trong khoảng từ min tới max
đặt u = max - min, p2 có thể thiết lập thời gian theo 1 số cách
nếu đặt t + min => độ lệch có thể tới u = max-min (nếu Ttran = max)
nếu đặt t + max => độ lệch có thể tới u = max-min (nếu Ttran = min)
nếu đặt t + u/2 => độ lệch có thể tới u/2
2. Đồng hồ
Đồng bộ với máy chủ tin cậy - phương pháp
Cristian (~ external synch)
Cristian nhận thấy: mặc dù hệ là asynch, thời gian
round trip của 1 message cụ thể thường đủ ngắn
Cristian đề xuất đồng bộ với máy chủ thời gian tin cậy
Nếu master có sự cố -
sẽ bình chọn master mới
2. Đồng hồ
Network time protocol - NTP
Các thuật toán Cristian, Berkeley: thường dùng trong mạng nội bộ - intranet
Với mạng Internet: thường dùng NTP
NTP: cung cấp dịch vụ thời gian, đồng bộ với múi giờ UTC
Hệ thống phân tán gồm nhiều máy chủ NTP
Do có thể mất kết nối trong thời gian dài =>
có các máy chủ dự phòng, kết nối dự phòng
Hệ nhiều máy chủ => đáp ứng số lượng lớn client
An ninh => sử dụng xác thực => đảm bảo dữ liệu
đến từ nút tin cậy, kiểm tra địa chỉ gửi
2. Đồng hồ
Network time protocol - NTP
Hệ thống phân tán gồm nhiều máy chủ NTP
Các server: tạo thành mạng đồng bộ
• primary (root): bậc 1
• secondary - bậc 2, và thấp hơn nữa
• Thời gian của các server bậc thấp hơn => chính xác hơn
Đồng bộ thời gian: 3 chế độ
• multicast: thường cho LAN tốc độ cao, máy chủ gửi message broadcast có thời gian
• procedure-call: thủ tục như thuật toán Crisstian
máy chủ nhận msg từ máy khác và trả lời msg + t
thường dùng khi cần độ chính xác cao hơn &
kh hỗ trợ broadcast
• symmetric: server với server cấp cao hơn, cần chính xác hơn
3. Logical time & logical clock
Nhiều khi không cần khớp thời gian thực tế mà chỉ cần khớp về thứ tự thời gian
=> logical clock
Đồng hồ Lamport
Quan hệ tương tự nhân quả: quan hệ xảy ra trước
sự kiện a xảy ra trước sự kiện b: a b nếu
(H1) trong cùng tiến trình và a xảy ra trước b
(H2) khác tiến trình: a là sự kiện gửi msg, b là sự kiện nhận msg
(H3) bắc cầu: nếu a b và b c thì a c
Với 2 sự kiện e, e' : e e' , khi đó ta có thể
tìm được chuỗi các sự kiện e1, e2, ..., en:
e1 = e, en = e'
và với ei , ei+1: xảy ra (H1) hoặc (H2)
3. Logical time & logical clock
Logical clock
Lamport đề xuất cơ chế biểu diễn quan hệ "xảy ra trước" bằng số - logical clock
Logical clock:
bộ đếm số nguyên chỉ tăng
mỗi tiến trình pi có 1 logical clock Li , dược dùng để gán nhãn thời gian timestamp
sự kiện e của tiến trình pi có nhãn thời gian Li (e), L(e): sự kiện xảy ra kh quan tâm ở
tiến trình nào
Để thể hiện quan hệ xảy ra trước => tiến trình cập nhật logical clock:
LC1: Li tăng trước khi thực hiện sự kiện ở tiến trình pi : Li = Li + 1
LC2:
• Khi tiến trình pi gửi msg m , nó gắn kèm nhãn thời gian t = Li
• Khi tiến trình pj nhận đc (m,t), nó tính clock: Lj = max{t, Lj } và áp dụng luật LC1
trước khi gán nhãn thời gian cho sự kiện e-nhận đc msg m: receive(m)
3. Logical time & logical clock
Logical clock
LC1: Li tăng trước khi thực hiện sự kiện ở tiến trình pi : Li = Li + 1
LC2:
• Khi tiến trình pi gửi msg m , nó gắn kèm nhãn thời gian t = Li
• Khi tiến trình pj nhận đc (m,t), nó tính clock: Lj = max{t, Lj } và áp dụng luật LC1
trước khi gán nhãn thời gian cho sự kiện e-nhận đc msg m: receive(m)
Có thể thấy nếu e e' L(e) < L(e')
ngược lại, L(e) < L(e') chưa chắc đã có e e'
3. Logical time & logical clock
Nhãn thời gian xếp thứ tự toàn cục (Totally ordered Timestamp)
Đồng hồ logical (Lampot) ở trên: có thể có 2 sự kiện ở 2 tiến trình khác nhau có
cùng giá trị
Đôi khi mong muốn thứ tự tổng thể khác nhau
Phương án: kết hợp số thứ tự tiến trình
tiến trình pi có clock Ti => nhãn thời gian toàn cục (Ti , i)
tiến trình pj có clock Tj => nhãn thời gian toàn cục (Tj , j)
So sánh 2 nhãn thời gian:
nếu:
hoặc và
3. Logical time & logical clock
Vector clock
Vector lock của tiến trình trong hệ N tiến trình là vector N phần tử
Tiến trình cập nhật clock theo các quy tắc:
VC1: ban đầu, tiến trình pi có clock Vi [j] = 0, j=1, .., N
VC2: trước khi pi gán nhãn thời gian, nó đặt Vi [i]= Vi [i]+1
VC3: tiến trình pi gửi kèm clock t=Vi trong mọi msg gửi đi: (m, t)
VC4: tiến trình nhận pj , khi nhận sẽ tính clock Vj trước khi gán nhãn cho sự kiện nhận:
Vj [k]= max{Vj [k], t [k]}
Có thể thấy
Vi [i] thể hiện số sự kiện mà tiến trình thứ i - pi đã gán nhãn
Vi [j] (i <> j) thể hiện số sự kiện mà tiến trình thứ j - pj đã gán nhãn - có thể ảnh hưởng
đến tiến trình pi
Vector clock
Có thể so sánh 2 vector clock:
V=V' V[i]=V'[i], i=1,..,n
V V' V[i]=V'[i], i=1,..,n
V < V' V V' và V V'
4. Trạng thái toàn cục - Global state
Với hệ thống phân tán: vấn đề xác định giá trị của các thông tin là cần thiết
không chỉ liên quan đến trạng thái của các tiến trình
mà còn liên quan đến trạng thái kênh truyền của hệ thống
ví dụ
Garbage collection
p1: 2 obj có ref (1 local, 1 remote-p2)
p2: 2 obj kh có ref ở p2
• 1 obj có ref trong msg đang truyền
• 1 obj kh có ref ở p2 cũng như p1
...
4. Trạng thái toàn cục - Global state
Trạng thái toàn cục và Lát cắt nhất quán
trạng thái toàn cục của hệ: có thể xem là tập hợp trạng thái của các tiến trình và
kênh truyền
về lý thuyết: tiến trình (và kênh truyền) có thể ghi nhận trạng thái riêng của
mình tại thời điểm t .
nếu có thể đồng bộ thống nhất thời gian tuyệt đối, chúng ta có thể thiết lập các tiến
trình cùng ghi nhận trạng thái riêng tại thời điểm t. Và tổng hợp ta có trạng thái toàn
cục tại thời điểm t
tuy nhiên kh đc do kh đồng bộ chính xác đồng hồ đc
4. Trạng thái toàn cục - Global state
Trạng thái toàn cục và Lát cắt nhất quán
Xét hệ phân tán có N tiến trình pi
có thể đặc trưng việc thực thi của tiến trình qua lịch sử chuỗi các sự kiện của nó
ta có thể xem xét một giai đoạn tiền sử - prefix của history
sự kiện: như trên, có thể là xử lý pi hoặc gửi, nhập msg => ghi nhận trong history(pi)
Trạng thái của tiến trình là trạng thái của pi ngay trước khi xảy ra sự kiện thứ k
kênh truyền có thể liên quan trạng thái hệ thống, tuy nhiên với việc ghi nhận sự kiện
gửi, và nhận tương ứng => ta có thể xác định msg m có thuộc trạng thái kênh truyền
Lịch sử toàn cục của cả hệ thống là hợp của lịch sử các tiến trình
4. Trạng thái toàn cục - Global state
Trạng thái toàn cục và Lát cắt nhất quán
Lát cắt của tiến trình - mô tả sự kiện cuối cùng ghi lại cho mỗi tiến trình
Lát cắt của hệ thống là tập con mô tả sự kiện cuối cùng
ghi lại cho mỗi tiến trình
Trạng thái toàn cục của hệ thống - tương ứng tập các tiền sử-prefix của lịch sử
từng tiến trình
Trạng thái si trong S (tương ứng lát cắt C) là tiến trình pi ngay sau khi xử lý sự
kiện cuối trong lát cắt
tập các sự kiện
gọi là ranh giới (frontier) của lát cắt C
4. Trạng thái toàn cục - Global state
Trạng thái toàn cục và Lát cắt nhất quán
Lát cắt nhất quán C: lát cắt mà
với sự kiện e, C chứa mọi sự kiện xảy ra
trước e:
Sự kiện toán cục nhất quán:
sự kiện ứng với lát cắt nhất quán
Ta có thể đặc trưng việc thực thi của hệ thống bằng chuỗi chuyển trạng thái toàn
cục
4. Trạng thái toàn cục - Global state
Coordination and agreement
Phối hợp và thỏa thuận
A. Loại trừ nhau
Hệ thống phân tán =>
Các tiến trình phối hợp xử lý
Các tiến trình truy cập tài nguyên chia sẻ chung => cần kiểm soát tránh xảy ra
đụng độ, mất nhất quán => thường áp dụng loại trừ nhau
Với hệ phân tán: loại trừ nhau phân tán - dựa trên truyền thông điệp
Giả định
các tiến trình truy cập tài nguyên chung => vào vùng loại trừ (critical section)
hệ thống là async, tiến trình không gặp sự cố, thông điệp đảm bảo sẽ gửi được
(và chỉ 1 lần)
ở mức app: cơ bản có 3 tác vụ:
enter: có thể phải chờ
1. Yêu cầu cơ bản đối với thuật toán loại trừ nhau
Yêu cầu cơ bản đối với thuật toán loại trừ nhau
ME1 (savety): tại 1 thời điểm, có nhiều nhất 1 tiến trình vào vùng loại trừ
ME2 (liveness): các tiến trình có yc sẽ đc vào vùng loại trừ
có thể ME3 (order): tiến trình yc trước sẽ được vào vùng loại trừ trước
Thuật toán:
Thuật toán tập trung, phi tập trung, phân tán
Có thể đánh giá so sánh theo:
chi phí tài nguyên: băng thông, số lượng thông điệp msg cần gửi
thời gian chờ của tiến trình từ khi enter đến khi exit
hiệu năng/khả năng thông qua - throughput: sync delay - thời gian từ khi tiến trình 1
thoát đến khi tiến trình tiếp theo vào vùng loại trừ
2. Thuật toán tập trung - tại server
Một server tập trung cấp quyền vào vùng loại trừ cho tiến trình
(client). Quyền cho tiến trình - qua token
Tiến trình cần truy cập:
gửi yêu cầu & chờ
Server
nếu kh có tiến trình khác => trả lời token cấp quyền
nếu có => đưa yc vào hàng đợi
Tiến trình có token
khi kết thúc => gửi token báo cho server
Server
có token => nếu hàng đợi có tiến trình => gửi token tới tiến trình chờ (FIFFO-lâu
nhất), đưa tiến trình khỏi hàng đợi
Một server tập trung cấp quyền vào vùng loại trừ cho tiến trình
(client). Quyền cho tiến trình - qua token
Nhận xét:
đáp ứng ME1, ME2
để tiến trình đi vào, ngay cả khi hàng chờ trống: tối thiểu cần 2 thông điệp
để tiến trình tiếp theo đi vào: tối thiểu 2 thông điệp
server có thể là điểm ngẽn
3. Thuật toán token ring
Thuật toán token ring
Một trong các thuật toán đơn giản nhất, không cần server tập trung
Các tiến trình lập thành vòng tròn logic
Mỗi tiến trình: kênh 1 chiều tới tiến trình tiếp theo
Token quyền vào vùng loại trừ lưu chuyển theo 1 chiều
Ban đầu: chưa có tiến trình vào vùng loại trừ - token free
Tiến trình nhận token
Đến tiến trình có yc vào:
chiếm token
thực hiện xong thì giải phóng token và chuyển tiếp
Thuật toán token ring
Nhận xét
Đáp ứng ME1, ME2
ME3: không
Khi không có tiến trình vào vùng tới hạn: truyền token liên tục => tốn băng thông
thời gian chờ: khi token truyền đến nó => giữa 0-N lần truyền tiếp
sync delay: token truyền tiếp => giữa 1-N
4. Thuật toán quảng bá multicast & logical clock
Ricart and Agrawala’s algorithm
Các nguyên tắc:
Khởi tạo: state = release ~ bên ngoài vùng
Để vào vùng tới hạn =>
• báo wanted
• gửi msg quảng bá tới tất cả với giá trị T
• chờ đến khi nhận N-1 trả lời => held
Khi nhận req từ pi:
• nếu cũng đang yc vào & clock nhỏ hơn =>
cho yc của tiến trình pi vào queue
• ngược lại: trả lời cho pi (đồng ý)
Thoát: trạng thái = released
& trả lời cho msg trong queue
Vd
p1, p2 muốn vào đồng thời, p3 không
timestamp của p1 = 41, của p2 = 34
=> p2 nhường, p1: lưu queue msg từ p2
p1 đi tiếp
Nhận xét
để đi vào critical: cần gửi 1 msg và nhận N-1 msg
=> cần N msg => tốn băng thông
5. Khả năng chịu lỗi fault tolerance
Hệ thống vận hành còn đúng không nếu:
thất lạc message
process crash
Các thuật toán trên
không chịu được lỗi thất lạc message
B. Bầu chọn - Election
Nhiều trường hợp:
cần có tiến trình đóng vai trò nào đó như điều phối, mà không xác định trước
tiến trình nào
hoặc vd trong loại trừ nhau: cần chọn tiến trình nào đó được đi tiếp
Mỗi tiến trình pi - có biến lưu giá trị bầu chọn - electedi
biến electedi :
• nhận giá trị P - là tiến trình được chọn khi kết thúc (có id lớn nhất)
• hoặc giá trị đặc biệt nếu chưa xác định tiến trình nào
2. Bầu chọn theo vòng - ring based election
Thuật toán thiết kế phù hợp cho tình huống các tiến trình xếp thành vòng kín
(logic):
tiến trình pi có kênh truyền tới tiến trình tiếp theo
các msg được truyền theo chiều kim đồng hồ
giả định không có sự cố, và hệ thống là asynch
Mục tiêu: bầu chọn tiến trình điều phối - coordinator (có id lớn nhất)
Vận hành
1. ban đầu: tất cả các tiến trình đánh dấu người không tham gia non-participant
2. tiến trình bất kỳ kêu gọi bầu chọn => nó đánh dấu là người tham gia participant
• nó đặt giá trị Id của chính nó vào election msg và chuyển tiếp theo vòng
3.
2. Bầu chọn theo vòng - ring based election
Vận hành
3. tiến trình nhận election msg:
• so sánh ID trong election msg với id của tiến trình,
(a) nếu id của nó nhỏ hơn => nó chuyển tiếp msg, đặt nó thành người tham gia
(b) nếu id của nó lớn hơn, và nó chưa tham gia non participant => nó thay id của nó
vào election msg, và đặt nó thành tham gia participant
• còn nếu nó đã là người tham gia => nó chỉ chuyển tiếp
(c) còn nếu id của nó = id trong election msg => nó là tiến trình được chọn
=> nó tạo elected msg, đặt id của nó vào, đặt thành non participant rồi chuyển msg
• tiến trình nhận elected msg:
Đặt biến electedi của nó = id trong msg - id của tiến trình được chọn (trừ chính tiến trình được chọn)
đặt trở thành non participant và chuyển tiếp msg
• quay lại id = idtrong elected msg => kết thúc bầu chọn
2. Bầu chọn theo vòng - ring based election
Ví dụ
Đánh giá: giả định 1 process bắt đầu cuộc bầu chọn
tình huống xấu nhất: process có id cao nhất là cuối cùng
• N-1 lần chuyển msg đi qua để tất cả tham gia => có id max
• N lần chuyển msg để đi đến process có id max =>
• nó trở thành đc chọn và gửi elected msg để thông báo => N lần chuyển
3. Bầu chọn trong môi trường không dây
Đặc điểm môi trường
ảnh hưởng bên ngoài => độ tin cậy không cao
Tiếp cận
Lựa chọn lãnh đạo tốt nhất trong phạm vi truyền thông
Vận hành
Một nút khởi đầu,
Gửi msg election đến tất cả nút láng giềng (nó biết)
Nút láng giềng: nhận msg
nếu là msg lần đầu => đánh dấu nút gửi là nút cha
trả lời báo nhận
gửi tiếp msg election tới các nút láng giềng (trừ nút cha)
3. Bầu chọn trong môi trường không dây
C. Điều khiển tương tranh
1. Giới thiệu
Giao tác - giao dịch - transaction
Mục đích của giao dịch: đảm bảo các đối tượng, dữ liệu (đc quản lý ở server) duy
trì tính nhất quán trong bối cảnh chúng được truy xuất bởi nhiều giao dịch đồng
thời
Giao dịch phân tán: đơn vị thực thi nhằm truy cập dữ liệu trên một hay nhiều
nút khác nhau.
Điều khiển tương tranh: quá trình kiểm soát cho phép nhiều giao dịch xảy ra
đồng thời mà vẫn đảm bảo dữ liệu nhất quán
1. Giới thiệu
Giao dịch
Thường server quản lý các object
Client: yêu cầu thực hiện giao dịch - các tác vụ được thực hiện như tác vụ nhỏ
nhất kh phân chia bởi server quản lý obj/tài nguyên đó.
Server phải đảm bảo
hoặc tất cả tác vụ của giao dịch được thực hiện thành công, và kết quả được lưu lại
(bộ nhớ dài hạn)
hoặc nếu có 1 số tác vụ gặp sự cố => các hậu quả cần bị loại bỏ - trở lại trạng thái như
trước khi thực hiện giao dịch
2. Thực thi đồng bộ
Client-server
Server thường thiết kế hỗ trợ muti thread => khả năng xử lý song song
Server phục vụ nhiều client đồng thời => các tác vụ có thể ảnh hưởng lẫn nhau
=> hệ quả không mong muốn
Các tác vụ (object method) cần hỗ trợ ngữ cảnh thực thi multi thread
Có thể cài đặt thực thi đồng bộ => cơ chế đảm bảo chỉ có nhiều nhất 1 thread
truy cập object tại 1thời điểm
Ngăn chặn:
Phương án lock tất cả từ đầu => tốn kém
Phương án lock theo trình tự => bất tiện
Phát hiện
Phát hiện vòng khép kín trong đồ thị wait-for
Timeout:
• nếu lock quá thời gian timeout => trans khác đang chờ được đi tiếp, trans có
timeout: abort
5. Điều khiển tương tranh tối ưu
Optimistic concurrency control
Giới thiệu
Cơ chế kiểm soát qua lock có nhược điểm
Một số vấn đề của cơ chế lock:
Điều khiển lock hạn chế việc truy cập đồng thời đến dữ liệu chia sẻ - ngay cả tác vụ
đọc, mặc dù kh làm mất nhất quán dữ liệu cũng phải yêu cầu lock để tránh bị trans
khác thực hiện ghi.
Sử dụng lock có thể dẫn tới deadlock
Tránh cascading lock => lock chỉ được nhả khi thực hiện xong trans
5. Điều khiển tương tranh tối ưu
Giới thiệu
Các tác giả Kung và Robinson (1981) đã đề xuất cơ chế điều khiển tương tranh
tối ưu:
Quan sát thực tế cho thấy: khả năng có nhiều (2) client đồng thời truy cập 1 đối tượng
là thấp
Giao dịch được thực hiện bình thường đến khi thực hiện commit
Nếu có mâu thuẫn thì sẽ thực hiện abort/hủy giao dịch nào đó. Client sẽ phải khởi
động lại giao dịch
5. Điều khiển tương tranh tối ưu
Các pha thực hiện của giao dịch
việc thực hiện giao dịch chia thành 3 giai đoạn: working - validating - update
working phase (thực hiện): giao dịch sẽ thao tác với bản sao của các đối tượng mà nó
sẽ cập nhật - phiên bản cập nhật mới nhất => khi abort sẽ không ảnh hưởng đến đối
tượng
• tác vụ read, nếu bản sao đã có => truy cập bản sao này, nếu kh thì truy cập phiên
bản mới nhất
• tác vụ write sẽ cập nhật vào bản sao
• nếu có vài trans truy cập => có vài bản sao tương ứng, duy trì bởi mỗi trans
• với mỗi trans: quản trị tập các đối tượng cần read và tập đối tượng cần write
5. Điều khiển tương tranh tối ưu
Các pha thực hiện của giao dịch
validation phase (phê chuẩn):
khi có yc kết thúc trans - close/commit => thực hiện kiểm tra xem các tác vụ thực hiện
trên các đối tượng/bản ghi có mâu thuẫn với các trans khác trên cùng đối tượng?
nếu không mâu thuẫn => trans được kết thúc thành công
nếu mâu thuẫn => cần thực hiện giải quyết mâu thuẫn, có thể cần hủy trans - abort
Giai đoạn validation & update thường ngắn (so với working), và để đơn giản hóa => thường
thiết lập tuần tự tác vụ validation + update - tại 1 thời điểm chỉ có nhiều nhất 1 trans thực hiện
validatation + update. Có thể áp dụng cơ chế loại trừ nhau để thực hiện.
5. Điều khiển tương tranh tối ưu
Về validating:
Backward validation: phê chuẩn trans Tv
Kiểm tra trans cần phê chuẩn (Tv ) với các trans bị overlap đã đến giai đoạn validation trước
đó
Kiểm tra
• Các tác vụ read của trans trước đó => kh ảnh hưởng đến các tác vụ write của Tv
• Đặt startTn - No. lớn nhất trong các trans đã kết thúc (commit) vào thời điểm Tv bắt đầu giai
đoạn working
• finishTn - No. lớn nhất trong các trans đã kết thúc vào thời điểm Tv bắt đầu giai đoạn
validation
5. Điều khiển tương tranh tối ưu
Về validating:
Backward validation:
Ví dụ: hình bên
startTv = T1
finishTv=T3
cần kiểm tra tập bản ghi read của Tv
với tập bản ghi write của T2 và T3
Kiểm tra tập dữ liệu read của Tv : có bị mâu thuẫn với các tập dữ liệu write nào của trans trước
(overlap) ? Nếu có => mâu thuẫn - fail validation
Nếu Tv chỉ có tác vụ write => kh cần kiểm tra
Tập bản ghi write của trans đã commit trước: cần lưu cho đến khi tất cả trans overlap được
phê chuẩn/validation
Khi phê chuẩn thành công Tv, giá trị startTv và tập bản ghi write của Tv đc ghi nhận, quản lý
bởi dịch vụ Quản lý giao dịch
6. Thứ tự nhãn thời gian - timestamp ordering
Điều khiển tương tranh sử dụng thứ tự nhãn thời gian
Trong giao dịch/trans: mỗi tác vụ đều được phê chuẩn khi thực hiện
Nếu phê chuẩn/validation thất bại => trans bị hủy abort => client sẽ pải gửi yc thực
hiện trans lại
Trans được gán nhãn thời gian duy nhất khi bắt đầu
Với điều kiện: tại mỗi thời điểm chỉ có 1 trans trên object ~ object chỉ có 1 bản
gốc thì quy tắc tránh xung đột với nhãn thời gian là:
yc ghi/write obj chỉ đc phê chuẩn nếu obj đó đã được truy cập, kết thúc tác vụ ghi bởi
các trans trước
yc đọc obj chỉ đc phê chuẩn nếu các tác vụ ghi của trans trước đã hoàn tất
Nhãn thời gian có thể gán dùng giá trị clock hoặc logical clock
Với điều kiện mỗi trans có bản sao obj riêng (tentative) thì có thể có nhiều trans
tương tranh trên 1 obj:
tác vụ ghi - thực hiện trên bản sao obj của trans => các trans khác kh "nhìn thấy" - cho đến khi
trans kết thúc thành công
quản lý obj: mỗi duy trì nhãn thời gian tác vụ ghi và tập các bản sao, mỗi bản sao - có nhãn thời
gian ghi riêng; mỗi obj cũng duy trì tập các nhãn thời gian tác vụ đọc
nhãn thời gian write khi được commit => phải nhỏ hơn nhãn thời gian tất cả các bản sao
(tentative version)
khi tác vụ ghi của trans đc chấp nhận => tạo 1 bản sao (tentative) của obj, gán nhãn thời gian =
nhãn thời gian của trans
tác vụ đọc của trans => điều hướng đọc giá trị phiên bản obj có giá trị nhãn thời gian ghi lớn
nhất & nhỏ hơn thời gian của trans đọc, nếu tác vụ đọc được chấp nhận => thêm nhãn thời
gian đọc vào tập các nhãn thời gian đọc của obj
Khi trans commit: giá trị bản sao gán cho giá trị gốc obj, và cập nhận nhãn thời gian write
commit của obj
Trong cơ chế thứ tự nhãn thời gian, kiểm tra theo các quy tắc sau