Professional Documents
Culture Documents
2 - Lamport Algorithm
2 - Lamport Algorithm
1
— Bởi vì tổng số thứ tự này có thể không
được giám sát, dẫn tới cần một cơ chế để
tạo ra một thứ tự có thể xảy ra trong hệ
thống (chứ không phải là một trong đó
thực sự xảy ra trong hệ thống).Cơ chế này
được gọi là một chiếc đồng hồ luận lý.
— Có thể theo dõi bằng cách đặt đồng hồ
vector gán nhãn thời gian
2
7.2 Mô hình một hệ thống phân tán
3
7.2 Mô hình một hệ thống phân tán
— Sơ đồ sau mô tả các cấu trúc liên kết của một hệ
thống phân phối với ba quy trình và bốn kênh.
— Một kênh kết nối hai quá trình. Do đó, cấu trúc liên
kết của một hệ thống phân phối có thể được xem
như là một đồ thị có hướng, trong đó đỉnh đại diện
cho các quá trình và các cạnh đại diện cho các kênh
— Quan sát thấy một kênh hai chiều có thể chỉ đơn
giản là được mô hình hoá như hai kênh một chiều.
4
5
7.2 Mô hình một hệ thống phân tán
— Sơ đồ chuyển trạng thái cho hai quá
trình. Quá trình P1 đầu tiên gửi một mã
thông báo đến P2 và sau đó nhận được
một mã thông báo từ P2.
— Quá trình P2 đầu tiên nhận được một
mã thông báo từ P1 và sau đó gửi lại
cho P1.
— Các s1 là tình trạng ban đầu cho P1, và
t1 là trạng thái ban đầu cho P2.
6
7
7.3 Mô hình của một tính toán phân tán
8
7.3.1 Mô hình xen kẽ
9
7.3.1 Mô hình xen kẽ
— Ví dụ: xét một hệ thống: một máy chủ
ngân hàng và khách hàng. Khách
hàng sẽ gửi hai thông điệp yêu cầu
đến máy chủ ngân hàng truy vấn các
khoản tiết kiệm và tài khoản kiểm tra
Khi nhận được phản ứng, nó cho biết
thêm lên tổng số dư.
— Trong mô hình xen kẽ có thể được
biểu diễn như sau:
10
7.3.1 Mô hình xen kẽ
P1 gửi đến P2 " kiểm tra chính xác thông tin của tôi là gì“
P1 gửi đến P2 "số dư tiết kiệm của tôi là gì"
P2 nhận được từ P1 " kiểm tra chính xác thông tin của tôi là gì “
P1 đặt tổng số 0
P2 nhận được từ P1 "số dư tiết kiệm của tôi là gì"
P2 gửi "kiểm tra số dư = 40" về P1
P1 nhận được "kiểm tra số dư = 40" từ P2
P1 đặt ra tổng số đến 40 (tổng số + kiểm tra)
P2 sẽ gửi "số dư tiết kiệm = 70" về P1
P1 nhận được "số dư tiết kiệm = 70" từ P2
P1 đặt ra tổng số tới 110 (tổng số + Tiết kiệm)
11
7.3.2 Mô hình xảy ra ngẫu nhiên
(Nhãn thời gian Lamport)
— Để cài đặt một sự kiện trong một quá trình.
Ta có nếu sự kiện e xảy ra trước khi sự
kiện f trong một quá trình, sau đó e được
cài đặt trước f.
— Nếu e là sự kiện gửi các thông điệp và f là
sự kiện nhận được của cùng một thông
điệp, sau đó chúng ta có thể cài đặt e trước
f. Kết hợp hai ý tưởng này, chúng ta có
được định nghĩa sau đây.
12
7.3.2 Mô hình xảy ra ngẫu nhiên
(Nhãn thời gian Lamport)
Định nghĩa 7.1 (Mối quan hệ xảy ra ngẫu nhiên)
— Mối quan hệ xảy ra ngẫu nhiên (→) là mối quan
hệ nhỏ nhất thỏa mãn:
1. Nếu e xảy ra trước khi f trong quá trình
đó thì e → f.
2. Nếu e là sự kiện gửi các thông điệp và e
là nhận được sự kiện của cùng một thông điệp
thì e → f.
3. Nếu ở đó tồn tại một g sự kiện (e → g) và
(g → f) thì (e →f)
13
7.3.2 Mô hình xảy ra ngẫu nhiên
(Nhãn thời gian Lamport)
— Hình 7.3 Minh họa thường được gọi là
sơ đồ không gian - thời gian, sơ đồ quá
trình thời gian, hoặc xảy ra ngẫu nhiên
trong quá trình thời gian, e→f khi và
chỉ khi nó có chứa một con đường
hướng từ sự kiện e đến sự kiện f.
14
7.3.2 Mô hình xảy ra ngẫu nhiên
(Nhãn thời gian Lamport)
Hình 7.3
15
7.4 Đồng hồ luận lý (logic)
16
7.4 Đồng hồ logic
— Như chúng ta biết, chỉ có hai loại thông tin
để có thể được xác định trong một hệ thống
được phân tán là thứ tự gửi và nhận của các
sự kiện. Trên cơ sở của những nhận xét
này, chúng ta nhận được định nghĩa sau
đây:
Một đồng hồ luận lý C là một tập hợp các sự
kiện từ E đến N (tập hợp của số tự nhiên) với
các ràng buộc sau đây:
17
7.4 Đồng hồ logic
18
7.4 Đồng hồ logic
Ví dụ : Về đồng hồ logic
— 1 public class LamportClock
— 2 in t c;
— 3 public LamportClock () {
— 4 c = 1;
— 5 }
— 6 public int getValue () {
— 7 return c;
— 8 }
— 9 public void tick () { / / on internal
events
19
7.4 Đồng hồ logic
— 10 c = c + 1;
— 11 }
— 12 public void sendAction () {
— 13 / / include c in message
— 14 c = c + 1;
— 15 }
— 16 public void receiveAction (int sr c , int
sent Value ) {
— 17 c = Util.max(c, sentValue) + 1;
— 18 }
— 19
20
7.5 Đồng hồ Vector (Vector clock)
21
7.5 Vector Clock
22
7.5 Vector Clock
23
7.5 Vector Clock
24
7.5 Vector Clock
25
7.5 Vector Clock
26
7.5 Vector Clock
27
7.6 Đồng hồ phụ thuộc trực tiếp
(Direct Dependency Clock)
— Nhược điểm của thuật toán Vector Clock là yêu
cầu độ phức tạp O(n) cho mỗi thông điệp gửi đi.
— Dependency clock yêu cầu chỉ một số nguyên
duy nhất gắn theo thông điệp khi truyền đi.
— Sử dụng thuật toán Lamport cho việc thực thi
28
7.6 Direct Dependency Clock
• Khởi tạo:
• Khi nhận
29
7.6 Direct Dependency Clock
public class DirectClock {
public int[] clock;
int myId;
public DirectClock(int numProc, int id) {
myId = id;
clock = new int[numProc];
for (int i = 0; i < numProc; i++) clock[i] = 0;
clock[myId] = 1;
}
public int getValue(int i) {
return clock[i];
}
public void tick() {
clock[myId]++;
}
public void sendAction() {
// sentValue = clock[myId];
tick();
}
public void receiveAction(int sender, int sentValue) {
clock[sender] = Util.max(clock[sender], sentValue);
clock[myId] = Util.max(clock[myId], sentValue) + 1;
}
} 30
7.6 Direct Dependency Clock
31
32