Theo một đánh giá tổng hợp về các thuật toán định tuyến dựa trên bảng băm phân tán trong các kiến trúc mạng khác nhau như hình tròn (với giao thức Chord), hình cây, hình hộp (với giao thức CAN)…xét về tính linh hoạt trong việc định tuyến, khả năng phục hồi trạng thái cũng như khả năng chịu lỗi, kiến trúc hình tròn đều được đánh giá cao. Vì vậy, kiến trúc Chord thường được sử dụng như là mạng phủ để thực hiện các cài đặt cải tiến việc tìm kiếm trên mạng ngang hàng có cấu trúc.
Mô hình mạng Chord:
Chord được mô tả dưới dạng một vòng tròn và không gian định danh phân bố đều trên vòng tròn tăng dần theo chiều kim đồng hồ. Nếu gọi N là số bit định danh của không gian khóa thì mạng Chord có thế chứa tối đa 2N nút. Mỗi nút trên Chord có một định danh id và có khả năng duy trì liên kết hai chiều với các nút đứng liền trước và liền sau nó theo chiều kim đồng hồ, tạo thành một mạch liên kết vòng. Nút liền trước được gọi là Successor(id), và nút liền sau được gọi là Predecessor(id). Thêm vào đó, mỗi nút sẽ lưu một bảng định tuyến gọi là Finger Table, cho phép nút đó định tuyến tới các nút ở xa. Mỗi dòng trong bảng Finger Table sẽ lưu thông tin về một nút ở xa, gọi là một entry. Không gian định danh của mạng sử dụng bao nhiêu bit thì Finger Table có bấy nhiêu
Hình 12. Mô hình mạng Chord
Hình trên minh hoạ cho một mạng Chord có 3 nút là 0, 1, 3 và các bảng Finger Table ứng với mỗi nút, N = 3 bit nên Finger Table có 3 entry. Các trường trong mỗi entry trong bảng Finger Table của nút n được định nghĩa trong bảng dưới:
Hình 13: Định nghĩa các trường trong bảng định tuyến của Chord
Trong đó các giá trị tại dòng i của bảng được coi như là finger thứ i của nút n. Thông tin lưu trong bảng cũng bao gồm cả IP và Port của các nút tương ứng. Nút đầu
tiên trong bảng Finger Table của n chính là Successor của n, hay còn được gọi là Immediate Successor.
Từ bảng Finger Table ở trên ta có thể thấy rằng:
+ Mỗi nút chỉ cần lưu trữ thông tin của một số nút nhất định trong bảng định tuyến của mình.
+ Nút biết thông tin về các nút gần nó nhiều hơn là các nút ở xa.
+ Bằng cách định tuyến thông qua bảng Finger Table, một nút n có thể xác định được vị trí của bất kỳ khóa nào trên mạng.
Ánh xạ khóa vào một nút trong Chord
Chord ánh xạ các khóa vào các nút, thường theo cặp (khoá, giá trị). Một giá trị có thể là một địa chỉ, một văn bản, hoặc một 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 (khoá, giá trị) ở các nút mà khoá được ánh xạ. Một nút sẽ chịu trách nhiệm lưu giữ một khóa k nếu nút đó là nút có định danh id nhỏ nhất thỏa mãn điều kiện id >= k. Một nút khi lưu giữ khóa k cũng sẽ được gọi là Successor của k, ký hiệu là Successor(k).
Hình dưới minh hoạ việc lưu khoá trong mạng Chord: nút 0 lưu khoá 6, nút 1 lưu khoá 1 và nút 3 lưu khoá 2.
Tìm kiếm trong mạng Chord
Khi một nút n cần tìm kiếm một khóa có định danh id, nút n sẽ tìm nút chịu trách nhiệm lưu giữ id đó. Nếu nút n ở xa so với vị trí của nút lưu giữ id, n có thể nhờ vào thông tin trong bảng Finger Table để định tuyến đến các nút xa hơn, từ đó dần dần tìm ra nút chịu trách nhiệm lưu giữ id.
Một ví dụ được chỉ ra trong hình 12, giả sử nút 3 muốn tìm successor của ID = 1 (hoặc còn có thể coi là khóa) . ID =1 thuộc khoảng [7, 3). Nút 3 kiểm tra entry thứ 3 trong bảng định tuyến của nó, là 0. Bởi vì 0 nằm ngay trước 1 trên vòng tròn, nút 3 sẽ hỏi nút 0 để tìm successor của 1. Tiếp theo, nút 0 sẽ tìm trong bảng định tuyến của nó và suy ra successor của 1 chính là nút 1, và trả lời nút 3 rằng nút 1 chính là successor của khóa ID = 1.
Tham gia và ổn định mạng
Trong một mạng động thì các nút thường xuyên tham gia hay rời mạng nên để có thể xác định được vị trí của các khóa lưu trong mạng Chord thì mạng này cần thỏa mãn các điểm sau.
+ Mỗi successor của một nút phải được duy trì.
+ Với mỗi khóa k, nút successor(k) có trách nhiệm quản lý k.
Khi tham gia vào một mạng Chord, một nút n cần chọn cho nó một định danh id và báo cho các nút bên cạnh biết sự tham gia của nó. Các nút Successor và Predecessor sẽ cần phải cập nhật thông tin về nút mới tham gia vào mạng và nút n cũng sẽ khởi tạo bảng định tuyến cho riêng mình. Để mạng vẫn định tuyến đúng sau khi có sự tham gia của nút n thì các nút cần thường xuyên chạy thuật toán ổn định mạng để cập nhật thông tin về các nút bên cạnh (hay nút láng giềng). Một số nút có lưu thông tin về n trong bảng Finger Table thì cần cập nhật các entry liên quan trọng Finger Table. Cuối cùng, nút Successor của n sẽ chuyển một phần khóa k mà bây giờ n là Successor(k) cho n lưu giữ.
Khi một nút chuẩn bị rời khỏi mạng, nó cần thông báo cho các nút bên cạnh biết để ổn định lại mạng. Nút đó cũng sẽ chuyển các khóa nó lưu giữ cho nút Successor của mình.