Memcache Hash演算法值得探索的內容

2021-09-02 02:24:04 字數 974 閱讀 8787

集團內部很多團隊都使用memcache來提高應用效能,最近的一次工作匯報中提及了memcache的hash演算法需要研究來滿足一些需求,同時提高memcache的利用效率。討論了一下最後自己總結了這麼幾點是對hash演算法需要著重考慮的。

問題:儲存資料如何均勻分散。如何把資料盡可能的散開儲存,這樣對於memcache的可擴充套件性才會有充分利用,試想如果演算法每次都會把資料定向到某幾台機器,那麼就會導致集群機器之間利用率的不均衡,無法發揮出集群效應。

增減機器減小對原有資料訪問的影響。由於業務量的增長勢必需要對後端的伺服器有所擴容,但是增加或者減少機器如何盡可能小的影響已有的快取資料,這點直接影響業務處理以及應用的效率。

提高memcache效率。memcache在壓力測試下也會暴露出對於網路資源的消耗問題,畢竟也是網路間的socket資料互動。

解決的一些思路和方法:

consistent hashing是一種比較好的解決思路。可以參看一下:

其中主要兩個亮點就是稀釋節點以及環狀分割槽段管理。稀釋節點就是將原來的節點再複製幾十倍,使得離散度更高,資料更加分散。環狀分割槽段管理,就能夠將資料分割槽管理,在加入和減少節點時對資料產生影響最低,最好的模擬就是解放前的地下工作者單線聯絡,如果**不會涉及到所有的地下黨同志。

儲存到memcache中的資料型別:

1. 一次寫入多次讀,很少更新。這種資料系統啟動以後構建,在非命中情況下不採用從後備資料來源中獲取資料來填充memcache。(也是提高效率,同時防止一些攻擊性的請求)

2. 多次寫入多次讀取。這類資料往往是在執行期被構建,非命中下會從後備資料來源中獲取,或者是某一種計算結果的快取。

對於第一類資料來說,增加機器需要重新構建,如果採用分割槽分段,那麼只需要構建某一部分的資料,或者是移動資料。對於第二類資料,增加機器如果採用簡單的hash演算法也問題不大,最多儲存多份,命中率降低,但是如果採用分割槽,也可以降低命中率下降的情況。

這裡只是丟擲問題,後續如何解決請各位看官各抒己見了。當然這裡自己也會考慮這方面的實現和設計。

Memcache Hash演算法值得探索的內容

集團內部很多團隊都使用memcache來提高應用效能,最近的一次工作匯報中提及了memcache的hash演算法需要研究來滿足一些需求,同時提高memcache的利用效率。討論了一下最後自己總結了這麼幾點是對hash演算法需要著重考慮的。問題 1.儲存資料如何均勻分散。如何把資料盡可能的散開儲存,這...

Memcache Hash演算法值得探索的內容

集團內部很多團隊都使用memcache來提高應用效能,最近的一次工作匯報中提及了memcache的hash演算法需要研究來滿足一些需求,同時提高memcache的利用效率。討論了一下最後自己總結了這麼幾點是對hash演算法需要著重考慮的。問題 1.儲存資料如何均勻分散。如何把資料盡可能的散開儲存,這...

Memcache Hash演算法值得探索的內容

集團內部很多團隊都使用memcache來提高應用效能,最近的一次工作匯報中提及了memcache的hash演算法需要研究來滿足一些需求,同時提高memcache的利用效率。討論了一下最後自己總結了這麼幾點是對hash演算法需要著重考慮的。問題 1.儲存資料如何均勻分散。如何把資料盡可能的散開儲存,這...