059 Memcached 分布式演算法

2021-10-21 17:11:43 字數 1778 閱讀 9820

單節點伺服器,以快取為例

高併發問題

網際網路公司的分布式高併發系統有什麼特點?

單機快取能扛起高併發嗎?

redis、memcached 的併發能力有多強?

海量資料對快取有什麼影響?(分片集群)

方式一:hash(key) % 集群節點數

搞**活動,臨時增加一台伺服器來提高集群效能,方便擴充套件集群嗎?

增加乙個節點後,有多大比例的資料快取命不中?

對系統會有什麼影響?(快取雪崩)

對程式設計師的影響

方式二:一致性 hash 演算法

集群的節點一定會均衡分布在環上嗎?

方式三:一致性 hash 演算法 + 虛擬節點

hash 演算法選擇

虛擬節點放到環上,具體是要做什麼?

fnv1_32_hash

public class fnv1_32_hash 

hash += hash << 13;

hash ^= hash >> 7;

hash += hash << 3;

hash ^= hash >> 17;

hash += hash << 5;

// 如果算出來的值為負數則取其絕對值

if (hash < 0)

return hash;}}

測試 string.hashcode() 和 以上演算法的均衡度
public class hashtest 

}

簡單實現乙個一致性演算法
public class consistencehash 

public consistencehash(int virtualnums)

/*** 新增服務節點

*/public void addserver(string node) }}

/*** 移除伺服器

*/public void removeserver(string node)

}realnodes.remove(node);

real2virtualmap.remove(node);

}/**

* 根據 key 查詢物理節點

*/public string getserver(string key)

return sortedmap.get(submap.firstkey());

}public static void main(string args) }}

Memcached 分布式快取

memcached是什麼?memcached 是乙個高效能的分布式記憶體物件快取系統,用於動態web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提供動態 資料庫驅動 的速度。memcached基於乙個儲存鍵 值對的hashmap。其守護程序 daemon 是用c寫...

分布式快取 Memcached

分布式快取出於如下考慮,首先是快取本身的水平線性擴充套件問題,其次是快取大併發下的本身的效能問題,再次避免快取的單點故障問題 多副本和副本一致性 分布式快取的核心技術包括首先是記憶體本身的管理問題,包括了記憶體的分配,管理和 機制。其次是分布式管理和分布式演算法,其次是快取鍵值管理和路由。原文 什麼...

Memcached 分布式快取

memcached 是乙個高效能的分布式 記憶體物件快取系統,用於動態web應用以減輕 資料庫負載。它基於乙個 儲存鍵 值對的 hashmap 其守護程序 daemon 是用 c寫的,但是 客戶端可以用任何語言來編寫,並通過memcached協議與守護程序通訊。memcached 通過在記憶體中快取...