Distributed hash table 分佈式哈希表
Chord protocol 和弦協議
MIT 2001 年發表的一種 DHT 演算法
Understanding Distributed Hash Tables: An In-Depth Guide to Chord | by Sutanu Dutta | Medium
Key lookup in Chord with finger table | by Jing Yang | Medium
存在一個環
有 2^m 個 ID 可用
每一個 ID 代表一個伺服器 N
每一個 Key 會儲存在最接近的 N,按照 ID,順時針
Client 會隨意連接上其中一個 N,詢問某一個 Key 放在哪一個伺服器
原始方法是一直尋找 N 的 Successor,直至到達儲存 K 的 N
O(n),太慢
Chord 協議在每一個 N 之中儲存了一個表,去儲存更加多的 Successor
這個表稱為 Finger Table
Successor(k) 會返回 k 儲存在順時針最接近的 N
Finger Table 的第 i 個 row 會包含 Successor((n + 2^{i - 1}) mod 2^m)
注意 i start from 1 (according to ppt, I find some website start with 0)
例如第 1 個 row,Successor((n + 2^{1 - 1}) mod 2^m) = Successor(n + 1),即係 N 的下一格
例如第 2 個 row,Successor((n + 2^{2 - 1}) mod 2^m) = Successor(n + 2)
例如第 3 個 row,Successor((n + 2^{3 - 1}) mod 2^m) = Successor(n + 4)
例如第 4 個 row,Successor((n + 2^{4 - 1}) mod 2^m) = Successor(n + 8)
尋找在 Finger Table 中最近 K 的 N,直至到達儲存 K 的 N
Example
m = 4, 2^4 = 16 個 ID, 假設全部 ID 都被使用,16 個伺服器
Client 連接 N2,尋找 K7
Finger Table in N2:
1 N3
2 N4
3 N6
4 N10
N6 最近 K7 (7 - 6 > 7 - 4 > 7 - 3)
Go N6
Finger Table in N6:
1 N7
2 N8
3 N10
4 N14
N7 最近 K7
Go N7
Found K7
注意他是一個 Circle 環
所以如果 Client 連接 N8,尋找 K1
Finger Table in N8:
1 N9
2 N10
3 N12
4 N16
N16 會是最近 K1,請考慮循環兜圈的距離
這樣的搜尋方式等於二分搜索
O(log n)