我有一些數據要存儲在 memcached 中(使用 PHP libmemcached 客戶端:https://www.php.net/manual/en/intro.memcached.php)。它在我的網絡應用程序中出現得非常頻繁。為了減少單個 memcached 節點的流量,我在密鑰末尾附加了一個 1 到 10 之間的隨機數,希望客戶端不會將所有密鑰存儲在單個節點上。我曾假設分配密鑰的過程是隨機的,但在 15 個節點中,至少有一半的密鑰進入了同一個節點。這讓我覺得對于它如何決定將哪個節點用于給定密鑰,有一些更具確定性的東西。有誰知道它是怎么做到的?
1 回答

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
它使用哈希。以最簡單的形式,想象一下,如果您在密鑰上運行像 MD5 這樣的哈希函數,您可以使用第一個字節來確定它應該去哪個服務器。
這很重要,因為如果 2 個服務器與多個 memcached 服務器通信,它們需要可靠地為相同的密鑰選擇相同的服務器。隨機是不好的,因為這意味著客戶端可能會嘗試get()
從存儲該項目的不同服務器進行訪問。
如果您有 15 個節點,并且超過一半的項目存儲在 1 個節點中,則您是:1. 極度不走運或 2. 某些配置不正確并且您的某些服務器標記為離線。
底層哈希比簡單的“md5”更復雜,它使用“一致性哈?!彼惴?。這意味著如果您有 15 個節點并丟失 1 個,大多數密鑰仍將解析到同一臺服務器。關于“一致性哈?!钡奈恼潞荛L,因此應該很容易獲得技術細節。
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消