18
Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications File : chord_sigcomm.pdf Mục lục : 1.Giới thiệu 2. Hoạt động của hệ thống 3. Các đặc điểm của hệ thống 4. Giao thức cơ sở của Chord 4.1. Giới thiệu 4.2. Consist hashing 4.3. Vị trí của key 4.4. Khi có node tham gia 5. Khi có node tham gia đồng thời ( tương tranh) và lỗi ở các node 5.1. Sự ổn định của hệ thống 5.2. Khi xảy ra lỗi và trùng lặp 6. Kết quả mô phỏng và kinh nghiệm có được 6.1. Mô phỏng giao thức 6.2. Phân tải Load balance 6.3. Độ dài đường dẫn ( path length) 6.4. Tham gia đồng thời, lỗi 6.5. Đánh giá trong khi hệ thống chạy ổn định 6.6. Kết quả có được 7. Công việc cần làm sắp tới – Future work 8. Tổng kết 1.Giới thiệu - Hệ thống và các ứng dụng peer-to-peer là các hệ thông phân tán không cần bộ xử lý trung tâm, các phần mềm được chạy trên các node và thực hiện các chức năng của nó. Các đặc điểm của ứng dụng peer- 2-peer như : lưu trữ bản dự phòng, lâu dài, lựa chọn điểm gần, tìm kiếm, xác thực, phân cấp tên. Thực tế với nhiều đặc điểm tốt, lõi (core)của hầu hết các hệ thống peer-2-peer đều dựa trên xác định vị trí dữ liệu. 1

[Dich]Chord A Scalable P2P Lookup Service For Internet Application

Embed Size (px)

Citation preview

Page 1: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications

File : chord_sigcomm.pdfMục lục : 1.Giới thiệu 2. Hoạt động của hệ thống3. Các đặc điểm của hệ thống4. Giao thức cơ sở của Chord

4.1. Giới thiệu4.2. Consist hashing4.3. Vị trí của key4.4. Khi có node tham gia

5. Khi có node tham gia đồng thời ( tương tranh) và lỗi ở các node5.1. Sự ổn định của hệ thống5.2. Khi xảy ra lỗi và trùng lặp

6. Kết quả mô phỏng và kinh nghiệm có được6.1. Mô phỏng giao thức6.2. Phân tải Load balance 6.3. Độ dài đường dẫn ( path length)6.4. Tham gia đồng thời, lỗi6.5. Đánh giá trong khi hệ thống chạy ổn định6.6. Kết quả có được

7. Công việc cần làm sắp tới – Future work8. Tổng kết

1.Giới thiệu - Hệ thống và các ứng dụng peer-to-peer là các hệ thông phân tán không cần bộ xử lý trung tâm, các phần mềm được chạy trên các node và thực hiện các chức năng của nó. Các đặc điểm của ứng dụng peer-2-peer như : lưu trữ bản dự phòng, lâu dài, lựa chọn điểm gần, tìm kiếm, xác thực, phân cấp tên. Thực tế với nhiều đặc điểm tốt, lõi (core)của hầu hết các hệ thống peer-2-peer đều dựa trên xác định vị trí dữ liệu.- Giao thức Chord hỗ trợ duy nhất một hoạt động : đưa ra 1 key, nó sẽ ánh xạ key đó vào 1 node. Tùy thuộc vào ứng dụng sử dụng Chord ( văn bản, hình ảnh, media..), node đó sẽ lưu trữ một giá trị kết hợp với key. Chord sử dụng kí thuật consistent hashing để cấp key cho các node. Consistent hashing dùng để cần bằng tải, mỗi node sẽ nhận được số lượng key gần ngang nhau, vào làm cả việc chuyển số lượng key khi có node tham gia hay rời khỏi hệ thống.- Kĩ thuật consistent hashing đầu tiên sẽ nhận biết các node trong hệ thống, tạo ra sự cân chỉnh về số lượng các node. Mỗi node trong Chord cần được "routing" để biết thông tin về một vài node khác. Vì bảng định tuyến là phân tán, 1 node sẽ sử dụng hàm băm để giao tiếp với các node khác. Khi mạng được thiết lập, 1 hệ thống gồm N-node, trong đó mỗi node chứa thống tin về O(log N) node xung quanh nó, và tìm kiếm các node khác thông qua O(log N) thông điệp tới các node đó. Chord duy trì thông tin định tuyến khi các node tham gia/rời khỏi hệ thống. Với một hệ thống có tần suất cao, một node cũng chỉ cần gửi không quá O(log2 N) thông điệp để định tuyến.

1

Page 2: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

- 3 đặc điểm khi đánh giá giao thức Chord là : đơn giản, chính xác, và có thể thực hiện được.

2. Hoạt động của hệ thống- Chord ánh xạ các key vào các node, tên và ví trí được "direct" key và value. Một value có thể là 1 address, 1 văn bản, hoặc 1 mục dữ liệu. Chord có thể thực hiện chức năng này bằng cách lưu các cặp key/value ở các node mà được ánh xạ key. Ở đây giả sử dịch vụ Chord dựa trên việc ánh xạ key vào các value.

- Dịch vụ DNS ánh xạ host name sang địa chỉ IP ( xem thêm trang 2 tài liệu + tài liệu số 15 trong phần tham khảo)

3. Các đặc điểm hệ thống- Chord được thiết kế dựa trên các vấn đề sau : - Load Balance ( phân tải) : Chord sử dụng bảng băm phân tán, phân tải trên các node, một node sẽ không chứa quá nhiều kay.- Decẻntralization (phân quyền): Chord là phân tán hoàn toàn, không node nào quan trọng hơn node nào, việc này cải thiện được sự vững chắc của hệ thống.- Scalability ( đánh giá) : giá của việc tìm kiếm tăng lên theo Log của số node : Log(n)- Availability (tiện dụng) : Chord tự điều chỉnh các bảng định tuyến khi có node tham gia và rời khỏi mạng- Flexible naming ( định nghĩa tên linh hoạt) : Chord không ràng buộc về cấu trúc của key mà nó tìm kiếm, không gian key là phẳng bằng việc gán cho key một cái tên và tìm kiếm. ( ví dụ phẳng tức là đưa tất cả các loại key về thành 1 kiểu như id , khi tìm thì chỉ cần tìm id của key)

- Phần mềm Chord tạo ra một liên kết giữa client và server của ứng dụng. Ứng dụng tương tác với Chord qua 2 đường : 1. Chord cung cấp các thuật toán lookup(key)

2

Page 3: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

2. phần mềm Chord nhận biết sự thay đổi của key khi node phản ứng ( ví dụ khi có 1 node tham gia vào mạng, nó sẽ được node bên cạnh chuyển cho một số lượng key lưu giữ)

- Một số ứng dụng ví dụ được tạo một nền tảng tốt từ Chord: ( xem chi tiết thêm trong tài liệu): 1. Cooperative Mirroring2. Time-Shared Storage3. Distributed Indexes4. Large-Scale Combinatorial Search

4. Giao thức cơ sở của Chord4.1. Giới thiệu- Chord cung cấp tính toán phân tán rất nhanh với hàm băm ánh xạ key vào node. Với hệ thống có tần suất cao, khi node N tham gia ( hoặc rời khỏi ) mạng, chỉ có O(1/N) giao tác thực hiện để sắp xếp lại ví trí các key và node trong mạng.- Chord là giao thức peer-2-peer có cấu trúc nên các node có thể biết được và tìm kiếm thông tin của node khác. Tuy nhiên cần có số thông điệp định tuyến gửi đi nhỏ để cân bằng tải cho hệ thống. Trong một mạng N-node, mỗi node chưa thông tin về O(log N) node khác, theo đánh giá chỉ cần O(log N) thông điệp gửi đi.- Chord cũng cần cập nhật thông tin định tuyến khi một node tham gia/rời khỏi hệ thống; để xứ lý một node tham gia/ rời khỏi hệ thống cần O(log2 N) thông điệp.

Hình minh họa : mang Chord vòng tròn với các Node, các key được các node lưu giữ

4.2. Consistent Hashing

3

Page 4: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

- Kĩ thuật Content hashing cấp cho mỗi node và key m-bit định danh dựa trên cơ sở hàm băm SHA-1. Việc định danh một node bằng cách băm địa chỉ IP node đó ( khách với CAN sẽ lấy ID ngẫu nhiên), định danh key bắng cách băm key đó. Chiều dài định danh m cần đủ lớn để khi băm tránh xảy ra 2 key hoặc node có giá trị giống nhau.- Khi một key được cấp thành công cho 1 node thì node đó được gọi là successor(k)- Content hashing được thiết kế để khi có node tham gia hay rời khỏi mạng thì sự đổ vỡ mạng là ít nhất. Khi node n tham gia vào mạng, nó quản lý các key trong vùng của nó, và khi nó rời khỏi mạng thì các key được cấp lại cho các node khác .9:21 AM 4/19/2008 : thêm vào phần consistent hashing phần trước đinh lý 1 : để duy trì việc mapping sử dụng consistent hashing khi node n tham gia vào mạng,một phần key trước đó được cấp cho successor của n trở thành key được cấp cho n. Khi n rời khỏi mạng, tất cả các key được cấp lại cho successor của n ( là node tiếp theo trong mạng sau n). Không có thay đổi nào khác trong việc cấp key cho các node cần tìm.

Ví dụ : vòng chord ở firgure 2 : successor(6) = 0. Khi node 7 join vào mạng ( thì lúc này successor(7) = 0) thì nó sẽ giữ key 6 lấy từ node 0. ( tức là node 7 join vào mạng thì giờ đây successor(7) = 0 còn successor(6) = 7). Node 0 đang giữ key 6 thì bây giờ node 7 giữ key 6.

Note : kĩ thuật consistent hashing chủ yếu là việc thực hiện hàm FindSuccessor để đưa key vào node thích hợp lưu trữ.

Định lý 1 : với mạng N node và K key : 1. Mỗi node chịu trách nhiều gần như nhiều nhất chỉ là (1 + epsilon)K / N key2. Khi một node (N + 1) join vào mạng tỷ lệ chịu trách nhiệm key O(K/N) thay đổi ( chỉ từ khi node join hay leaving khỏi mạng)(Chi tiết chứng minh Định lý trong tài liệu)

4.3. Đánh giá vị trí key được cấp ( cấp key cho node)- Kĩ thuật content hashing cho phép chỉ cần một lượng nhỏ thông tin định tuyến trong 1 môi trường phân tán. Mỗi node chỉ cần biết node successor của nó trong mạng. Các truy vấn giúp định danh các node thông qua các node successor này, đây là node mà query map tới. Giao thức Chord chủ

4

Page 5: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

yếu duy trì các pointer successor này, để chắc chắn trong việc tìm kiếm và giải quyết các vấn đề. Tuy nhiên cũng có thể phải cần tất cả N node tìm node mapping thích hợp. Để giải quyết tiến trình này, Chord duy trì thông tin định tuyến thường xuyên.

Figure 3(b) : Finger tables and key locations for a net with nodes 0, 1, and 3, and keys 1, 2, and 6.

- m là số bit của key/node định danh. Mỗi node n duy trì bảng định tuyến với m entry ( bản ghi - dòng), gọi là finger table. entry thứ i trong bảng chứa định danh của node đầu tiên, s, là success n trong ít nhất 2^(i-1) node trong ring. Ví dụ : s = successor( n + 2^(i-1) ) với 1 <= m. Chúng ta gọi node s trong dòng thứ i của bảng định tuyến của node n là n.finger[i].node ( xem Table1). 10:49 AM 4/15/2008 note: n.finger[i].node = s: node s the i th finger of node n : s là địa chỉ ánh xạ tới của entry thứ i trong bảng định tuyến của node n

5

Page 6: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

1 entry trong bảng định tuyến bao gồm cả định danh Chord và địa chỉ IP ( và số cổng) của node thích hợp. Node đầu tiền ( entry đầu tiên ? ) trong bảng định tuyến của n là node successor đầu tiền ( ? ) trong ring. ( hay gọi là successor hơn là first finger).- Trong Figure3(b), finger table của node1successor của các node định danh ( 1 + 2^0) mode 2^3 = 2, (1 + 2^1) mode 2^3 = 3, (1 + 2^2) mode 2^3 = 5. successor(2) = 3, đây la first node sau node 2.Hình Table1 có 2 điểm quan trọng.1. mỗi node lưu giữ thông tin về một lượng nhỏ các node khác, và biết rõ các node ở gần( bên cạnh) hơn các node ở xa. 2. một bảng định tuyến thông thường không chứa đủ thông tin để phát hiện successor của key k. ( cái này thì mới cần định tuyến chứ không thì tìm để làm gì) :)Important : Một node sẽ được gọi là successor(k) khi node đó là node có ID nhỏ nhất và ID lớn hơn k.Ví dụ trong Figure 2 : Node 0 là node nhỏ nhất có ID > 6 → node 0 sẽ chịu trách nhiệm lưu giữ key (ID) 6Nếu node n không biết successor(k), nó có thể tìm node với ID lớn hơn nó và gần với k hơn. Node này sẽ biết nhiều hơn thông qua các node định danh ( ID) khác trong ring. Node n tìm trong bảng định tuyến node j mà id gần trước k nhất, và hỏi j node đó có biết node có ID mà chứa k không. Bằng cách lặp lại như trên, node n học được và biết được node với ID mà chứa key k.Ví dụ : trong Figure 3(b) : Node 3 không biết successor(1). Node 3 sẽ hỏi node 0 để biết successor(1), sau đó node 0 sẽ gửi lại thông tin cho node 3.

- Figure 4 : giả mã tìm node successor của một node định danh id. - n.foo() : hàm foo()- n.bar : gọi thuộc tính bar . (Tức là có ngoặc thì là hàm, không có ngoặc là thuộc tính)

6

Page 7: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

- find_successor(id) hoạt động bằng cách tìm node là predecessor của ID đó, rồi trả về successor của node predecessor. Như vậy ID sẽ thuộc khoảng 2 node : predecessor và successor ( là khoảng chịu trách nhiệm của node successor)- Khi node n thực hiện find_predecessor, nó liên lạc với các node trong Chord ring theo id. Nếu node n liên lạc với node n' mà id thuộc khoảng n' and the successor của n', thì find_predecessor dừng vào trả về n'. Sau đó n hỏi n' . Thuật toán luôn hướng theo id của node trước đó.- Một ví dụ được chỉ trong Figure3(b).Gia sử node 3 muốn tìm successor của ID (hoặc còn có thể coi là key) 1. ID 1 thuộc khoảng [7, 3), tức là 3.finger[3].interval. node 3 kiểm tra entry thứ 3 trong bảng định tuyến của nó, là 0. Bởi vì 0 trước 1, node 3 sẽ hỏi node 0 để tìm successor của 1. Quay trờ lại, node 0 sẽ suy ra từ bảng định tuyển rằng successor của 1 chính là node 1, và trả về node 1 cho node 3.- finger pointer( việc tìm kiếm theo pointer) được lặp lại 2 lần quanh vòng ring vì mỗi mỗi bước lặp trong find_predecessor chia đôi khoảng cách tới định danh tìm kiếm ( ? ). -> định lý 2

- Định lý 2 : Số lượng node cần liên lạc để tìm successor trong 1 mạng N-node là O(log N)(Chi tiết chứng minh Định lý trong tài liệu)

4.4. Khi có node tham gia- Trong 1 mạng động , thường xuyên có sự thay đổi với các node tham gia và rời khỏi bất kì lúc nào. Để có thể xác định được vị trí của các key ở trong mạng, Chord cần thỏa mãn 2 điểm sau :

7

Predecessor của id

Successor của id

id

Page 8: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

1. Mỗi successor của 1 node phải đc duy trì đúng2. Với mỗi key k, node successor(k) có trách nhiệm quản lý k.

- Việc thông tin trong bảng định tuyến cũng cần xác định chính xác. Cần phải duy trì mạng khi có 1 node đơn lẻ tham gia vào. ( nhiều node join vào sẽ được trình bày trong phần 5). Khi 1 node bị lỗi mạng cũng cần phải xử lý.

- Định lý 3 : khi 1 node tham gia/rời khỏi trong 1 mạng N-node sẽ cần sử dụng O(log2 N) thông điệp để thiết lập lại mạng và bảng định tuyến trong toàn mạng.

- Cơ chế khi 1 node join hay rời khỏi mạng là mỗi node duy trì 1 predecessor pointer ( con trỏ trỏ đến node trước đó) : chứa địa chỉ IP và định danh id trong mạng- Chord cần thực hiện 3 bước khi 1 node n tham gia vào mạng :

1. Khởi tạo predecessor và bảng định tuyến cho node n2. Cập nhật bảng định tuyến và predecessor lại cho các node trong mạng để cập nhật thêm

node n3. Báo cho phần mềm sử dụng để trao đổi kết hợp lưu các key mà node n chịu trách nhiệm

- Giả sử rằng node n mới học được xác định các node đã có trong mạng Chord như node n'. Node n sứ dụng n' khởi tạo trạng thái và để thêm n vào mạng Chord ( do node n khi muốn tham gia vào mạng Chord cần phải biết được một node nào đó đã ở trong mạng Chord)

- Có thể giảm bớt lưu lượng tin truyền trong mạng bằng cách node n khi mới join vào mạng sẽ copy lại bảng Finger Table của node n’ đã biết, như thế sẽ biết thêm một số thông tin trong bảng FingerTable.

Figure 5(a) : Bảng Finger Table và các key lưu giữ khi node 6 Join vào mạng đã có 3 node 0, 1, 3. Các Entry thay đổi thể hiện bằng màu đen.

8

Page 9: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

Hình 5(b) : Bảng Finger Table và các key lưu giữ khi node 3 Leave khỏi mạng đã có 4 node 0, 1, 3, 6. Các Entry thay đổi thể hiện bằng màu đen.

+ Initializing fingers and predecessor : Node n biết được về node predecessor của nó và bảng định tuyến bằng cách hỏi n', sử dụng init_finger_table trong Figure 6. Thực hiện find_successor với mỗi entry trong bảng định tuyến, có m entry nên việc này tốn thời gian O(m logN). Để giảm bớt thời gian, n kiểm tra xem node trong entry i có phải là node trong entry i + 1 luôn không . Việc này xảy ra khi finger[i].interval không gồm 1 node nào, như vậy finger[i].node >= finger[i+1].start. Ví dụ : trong Finger Table của node 6 trong Figure 3(b) : Entry 0: start = 7; Khoảng [7,0) Finger[0].node = 0 ; ( node 0 không thuộc [4,5)Entry 1: start = 0; Khoảng [0,2) vì Finger[0].node > finger[1].start nên

Finger[1].node = 0 luôn.Entry 2: start = 2; Khoảng [2,6) gọi hàm FindSuccessor(2) bình thường → node 3

+ Updating fingers of existing nodes : node n sẽ cần có trong bảng định tuyến của một số node để được định tuyến trong mạngTrong Figure 5(a) : khi node 6 join vào mạng, node 6 sẽ trở thành finger[2].node trong Finger Table của node 0, 1 và trở thành finger[0].node, finger[1].node trong Finger Table của node 3.Figure 6 mô tả việc này. Trong 2 hàm update_others và update_finger_tableImportant : Node n mới join vào sẽ trở thành finger[i].node ( node successor trong entry i) của node p nếu(1) id của p nhỏ hơn n ít nhất n – 2i-1 (2) entry thứ i trong Finger Table của p succeed n.

9

Page 10: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

Node nào đủ 2 điều kiện trên sẽ là predecessor( n – 2i-1 ) . Node đó sẽ update entry thứ i trong FingerTable thành n ( node mới join vào mạng).

Ví dụ trong Figure 5(a) với node 6 mới join vào mạng : Thực hiện hàm : update_others() : Với i = 0 :

// tim node p mà 6 sẽ là finger[0] của pp = find_predecessor ( 6 -1 ) = 3→ 3. update_finger_table(6,0) →node 3 thực hiện update finger[0].node = 6Hàm update_finger_table :If( 6 thuộc khoảng [3, 0) )

3.finger[0].node = 6;1 = predecessor; // node 1 là node pre của node 31.update_finger_table (6, 0); → 1 thực hiện update finger[0].node = 6

Nhưng vì 6 không thuộc khoảng [1, 3) nên dừng.Với i = 1 :

// tìm node p mà 6 sẽ là finger[1] của pp = find_predecessor(6 – 2) = 3→ 3. update_finger_table(6,1) → node 3 thực hiện update finger[1].node = 6Hàm update_finger_table :

If ( 6 thuộc khoảng [3,0)3.finger[1] = 6;1 = predecessor; // node 1 là node pre của node 31.update_finger_table (6, 0); → 1 thực hiện update finger[0].node = 6Nhưng vì 6 không thuộc khoảng [1, 3) nên dừng.

Với i = 2 : // tìm node p mà 6 sẽ là finger[2] của pP = find_predecessor( 6 – 4) = 1→ 1. update_finger_table(6, 2) → node 1 thực hiện update finger[2].node = 6

Hàm update_finger_table : 1.update_finger_table(6, 2)

If( 6 thuộc khoảng [1, 0)1.finger[2].node = 60 = predecessor; // predecessor của node 1 là node 0 0.update_finger_table(6,2) → node 0 thực hiện update finger[2] = 6

+ Tranffering keys : sau khi 1 node đã đc định tuyến trong mạng, coi như nó đã tham gia vào mạng, việc tiếp theo nữa là node n có thể là 1 node successor, vì vậy n chỉ cần liên lạc với 1 node để có thể chịu trách nhiệm quản lý quản lý 1 key.

10

Page 11: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

Figure 6 : Giả mã Join

5. Khi có node tham gia đồng thời ( tương tranh) và lỗi ở các node5.1 Sự ổn định- Một mạng bất biến sẽ tạo ra được sự ổn định hơn các mạng thường xuyên có các node mới tham gia, nhưng sẽ khó mở rộng thành mạng lớn. Giao thức cơ bản để tạo ra sự ổn định của Chord là giữ các successor pointer của node, để có thể đảm bảo việc tìm kiếm trong mạng. các successor pointer này sau đó dùng để xác nhận và điều chỉnh lại finger table để tìm kiếm thông tin.- Khi một node join vào vùng nào đó của ring thì sẽ cần O(log N) bước để thiết lập lại sự ổn định.- Figure 7 thể hiện giả mã về join và ổn định lại mạng. Khi node n start, nó gọi n.join(n'), ( n' phải ở trong mạng Chord trước đó rồi). Hàm join hỏi n' để tìm successor của n.

11

Page 12: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

- Các node gọi phương thức stabilize ( để node n được chú ý đến trong mạng). Khi node n gọi n.stabilize, nó hỏi successor của n cho successor của node trước đó p ( predecessor), và quyết định có nên thay p bằng n's successor không. Phương thức stabilize cũng thay đổi node predecesor của node n.- Một ví dụ đơn giản là, giả sử node n tham gia vào hệ thống, và id của nó có được ở giữa Np và Ns ( node p và node s). node n sẽ nhận ns là successor của nó. node Ns khi đó sẽ lấy n làm predecessor. Khi Np gọi hàm stabilize, nó sẽ hỏi Ns để chuyển predecessor của Ns ( giờ là node n), Np sẽ nhận node n làm successor. Cuối cùng Np sẽ thông báo với n, và n sẽ nhận Np làm predecessor. Vậy là các predecessor và successor đã được đặt lại đúng. (Tham khảo hình của Bách trong slide về node tham gia)- Khi mà successor pointer được xác định đúng, hàm find_predecessor được gọi. Node mới tham gia vẫn chưa được định tuyến ( finger). Sau đó phải gọi thêm fix_finger để điều chỉnh lại các entry trong bảng định tuyến.- Đinh lý 4 và 5 show các vấn đề của tham gia đồng thời :

Đinh lý 4 : mỗi node có thể đưa ra thành công 1 truy vấn, nó có thể được dùng sau đó.Định lý 5 : Ở một thời điểm sau khi có sự tham gia cuối cùng tất cả các successor pointer đều

được xác định đúng.Định lý 6 : Trong một mạng ổn định, và có sự thay đổi khi node N tham gia vào (và không

có sự xác định successor pointer), việc đánh giá thiết lập lại sẽ mất O(log N) thời gian. ( tương

12

Page 13: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

đương O(log N) bước.)

5.2 . Khi xảy ra lỗi và trùng lặp- Khi một node n bị lỗi, node mà trong bảng định tuyến chứa n cần tìm được successor của n(để thay thế n vì n đã ko còn trong mạng) . Các query không tới n không được xử lý khi hệ thống đang stablize ổn định lại.

- Chord luôn duy trì 1 tập các node gọi là "successor list", các node r gần nhất với các successor trong Chord ring. Nếu node n thông báo rằng successor của nó bị lỗi, nó thay đổi nó bằng entry đầu tiên trong successor list của nó .n có thể chuyển việc tìm kiếm key bị lỗi lúc trước là successor sang successor mới. Sau đó stabilize sẽ làm công việc điều chỉnh đúng finger table và successor list.

13

Page 14: [Dich]Chord A Scalable P2P Lookup Service For Internet Application

- Sau khi 1 node bị lỗi, nhưng trước khi hệ thống ổn định xong, các node khác có thể gửi các thông điệp yêu cầu node bị lỗi ( trong quá trình sử dụng hàm find_successor để tìm key). Chord đặt 1 timeout để giải quyết vấn đề này

14