Chương 3. 2B Cải tiến hiệu năng của Chord
3.5. Giải pháp dùng nhân bản đối xứng cải tiến
3.5.1. Mục tiêu
Nhân bản đối xứng nh m tăng cường tính sẵn sàng củằ a d li u và tránh bottle-neck. ữ ệ
3.5.2. Cơ chế làm việc
Giải pháp này dựa trên cơ chế nhân bản đối xứng
3.5.2.1. 23BNhân bản đối x ng ứ
Ý tưởng chính của nhân bản đối xứng là mỗi ID i trong hệ ố th ng c n có liên kết ầ với ID f khác. Nếu ID i liên kết với ID f thì node chịu trách nhiệm cho item i cũng chịu trách nhiệm cho cả item i và item j. Tương tự, node chịu trách nhiệm cho item j cũng sẽ chịu trách nhi m cho item i. ệ
Mỗi ID trong hệ thống liên kết với một tập f các ID khác thỏa mãn: nếu ID i liên kết với tập ID r1, ...,rf , thì ID rx, với 1 ≤ x ≤ f , cũng liên kết với các ID r1, ...,rf.
Nói cách khác, không gian ID được chia thành N/f lớp tương được sao cho ID trong mỗi lớp này liên kế ới nhau. Để đơn giản, người ta thường sử dụt v ng các l p v i ớ ớ module m với m = N/f với N là kích thước của không gian ID.
Cho F = {1, ..., f }, khi đó ID i sẽ liên kết với các ID f được xác định bởi công thức r : I x F → I:
r(i, x) = i ⊕ (x − 1) + N/f
3.5.2.2. 24BCơ chế nhân bản đối xứng cải tiến
Ý tưởng cải tiến ở đ ây là các key được tìm kiếm với tần suất khác nhau sẽ được nhân b n vả ới hệ ố s nhân bản khác nhau.
Các item trong hệ thống được nhân bả ởn các mức khác nhau. Mọi node trong hệ thống đều được nhân bản với hệ số cơ bản (gi ng nhân bảố n đối x ng). Các node ứ được tìm kiếm nhiều hơn s ẽ được nhân b n v i h số bổả ớ ệ xung, các node này sẽ được
nhân bản trong mộ ố ớt s l p khác. Đối v i các node được nhân b n them thì nhân b n là ớ ả ả không đối xứng, node này không nhân bản các item của các node trong các lớp nó được nhân bản bổ xung.
Các node trong các lớp liên kết với ID i được xác định như sau:
fk: rk(i, x) = i ⊕ (x − 1) + N/f + (k-1).N/f Với N/f < N/k or f > k
k = 1 là mức nhân bản cơ ở s .
k > 1 nhân bản bổ xung trong đó k được tính từ proxy dựa trên tần suất tìm kiếm Quá trình duy trì
Thuật toán join
Khi một node n join vào hệ thống, nó sẽ kích hoạ ự kiện JoinReplication, sự t s kiện này gửi thông điệp RetrieveItems t i successor ớ để lấy v các item n c n l u. ề ầ ư Thông đ ệi p bao gồm các thông tin về các item nằm trong giải (pred,n], trong đó pred là ID của predecessor và là ID cn ủa nó.
Khi successor nhận được thông đ ệi p RetrieveItems, nó khởi tạo một mạng hai chiều rỗng ( f , N). Sau đó, các item liên kết với một ID trong giải xác định được sao từ b ng ả HashTable cục bộ tới mảng vừa tạo và được gửi trở ạ l i trong thông đ ệi p Replicate tới node vừa join vào mạng. Khi nhận được thông đ ệp Replicate, node mới join vào i mạng sẽ sao các item trong mảng vào bảng HashTable cục bộ. Node mới lúc này sẽ sẵn sàng nhận truy vấn tìm kiếm từ các node khác trong hệ thống.
Thuật toán leave
Thuật toán leave làm việc tương tự như thuật toán join. Khi một node muốn leave khỏi hệ thống, nó sẽ kích hoạt sự kiện LeaveReplication, sự kiện này sử dụng sự kiện RetrieveItems để sao các item mà nó chịu trách nhiệm và gửi chúng trong thông đ ệi p Replicate tới node successor.
Để chèn một item, node mu n chèn th c hi n quá trình chèn song song tới các ố ự ệ node chịu trách nhiệm cho item.
event n.JoinReplication() from m
sendto succ.RetrieveItems(pred, n, n) end event
event n.LeaveReplication() from m
sendto n.RetrieveItems(pred, n, succ) end event
event n.RetrieveItems(start, end, p) from m for r := 1 to f do
[
items r] := ặ i := start while i 6= end do
i := i ⊕ 1
[ [
items r][i] := localHashTable r][i] end while
end for
sendto p.Replicate(items, start, end) end event
event n.Replicate(items, start, end) from m for r := 1 to f do
i := start while i 6= end do
i := i ⊕ 1
[ [
localHashTable r][i] := items r][i] end while
end for end event
Thuật toán 3.7. Quá trình tìm kiếm và chèn trong giải pháp nhân bản đối xứng
event n.InsertItem(key, value) from app for r := 1 to f do
replicaKey := key ⊕ (r − 1)Nf
n.Lookup(replicaKey,AddItem(replicaKey, value, r))
end for end event
procedure n.AddItem(key, value, r) [
localHashTable key][r] := value end procedure
event n.LookupItem(key, r) from app replicaKey := key ⊕ (r − 1)Nf
Lookup(replicaKey,GetItem(replicaKey, )) r end event
procedure n.GetItem(key, r)
return localHashTable r[ ][key] end procedure
Thuật toán 3.8. Join và leave trong trường hợp nhân bản đối xứng
Thuật toán xử lý failure
event n.FailureReplication( f ailed, predFailed, ) r from m s := predFailed ⊕ (r − 1)Nf
e := f ailed ⊕ (r − 1)Nf
sendto n.StartBulkOwn((s, e], RetrieveItems(s, e, succ)) end event
Thuật toán 3.9. Xử lý failure trong nhân bản đối xứng
event n.StartBulkOwn( , I msg) from m
sendto n.BulkOwn( , , , I I n msg) Local message to itself ⊲ end event
event n.BulkOwn( , , I R next, msg) from m
MS := R ∩ (u M( ), n] ⊲ (u M) is same as pred if MS 6= ặ then
end if
limit := n lnext := next sentsucc :=false
for i := M downto 1 do ⊲ Node has M unique pointers J := (u i( ), limit]
if I ∩ J 6= ặ then
K := (u(i − 1), u i( )]
sendto u i( ).BulkOwn(I ∩ J, I ∩ K, lnext, msg) I := I − J ⊲ Same as I := I − (I ∩ J)
limit := u i( ) lnext := u i( ) if i = 1 then
sentsucc :=true end if
end if end for
J := (n, u(1)]
if I ∩ J 6= ặ and sentsucc = false and next 6= u(1) then sendto u(1).BulkOwn(ặ, I ∩ J, limit, msg) end if
end event
Thuật toán 3.10. Thuật toán bulk owner operation