6g下載網
當前位置: 主頁 > 軟件教程 > 云計算 >

如何優化facebook在memcache節點和集群層次

時間: 2016-01-13 23:23 來源: 本站整理

分享到:

下面給大家介紹如何優化facebook在memcache節點和集群層次,希望能給大家提供幫助。

memcache是facebook的重要基礎設施, 有數據為證: 緩存了T級記錄, 支持每秒G級別訪問次數, 單頁面經常訪問上千次memcache。 facebook從memcache節點、集群、region、跨region等各層次對memcache做了大量優化和改造, 本文簡單介紹facebook在memcache節點和集群層次做的一些優化工作。

降低延遲的方法:

并行請求。根據數據依賴關系構建DAG, 無依賴的數據批量發送到memache服務端, 根據統計平均每個請求包括24個key。

通訊優化。get操作使用UDP,刪除和更新操作使用TCP, 響應時間降低20%。

流量控制。通過滑動窗口控制單個客戶端發出的并發請求數目,避免服務器過載。

降低負載的方法:

Lease, 用于解決 memcache應用過程常見的兩個問題: (1)stale sets, 由于并發更新請求發生亂序, 導致memcache中存儲了舊的數據; (2)thundering herds(驚群), 讀寫率特別高的鍵值, 寫操作失效memcache時,大量讀操作不命中,導致后端壓力激增。 lease的原理是, memcache讀不命中時,返回一個64位token給客戶端, 只有當token有效時, 才允許客戶端加載數據到memcache。 服務端接收到delete請求時(寫操作之前應用一般會發送delete請求去失效memcache),則失效鍵值對應的所有token, 從而避免讀不命中的客戶端加載老數據到緩存。 memcache服務器限制每個鍵值10s內只產生一個token, token產生后10s內, 其他客戶端若讀不到鍵值,則等待一小段時間之后,再次重試。 由于新的value很快就加載到緩存中, 重試一次讀到最新value的概率非常大, 這就徹底避免了thundering herds問題。 根據facebook的實測結果, 在某些場景下有lease能將數據庫的qps從17K降低到1.3K。 此外, 刪除鍵值時,只在數據上做一個已刪除標志,讓數據在緩存中保留一段時間。由于很多應用能夠容忍讀取舊數據,保留已刪除數據可進一步提高效率。

memcache pool。 memcache劃分成為不同pool, 以應對應用負載的多樣性。

復制。 pool內部實現復制, 提高性能, 復制由客戶端控制。

處理節點失敗的策略:

保留大約1%節點組成一個Gutter集群, 當memcache服務端無響應時, 轉而將數據緩存到gutter集群中。 采用gutter而不是rehash到其他節點的原因是避免負載不均(例如一個key承擔了20%致其他節點級聯失敗。

單機memcached優化技術:

使用可擴展哈希,已經貢獻到社區。

多線程, 已經貢獻到社區。

每個線程獨立監聽一個UDP端口,避免沖突。

Adaptive Slab Allocator。 允許多個Slab之間相互替換內存。

優化之后的memcached性能驚人, 32字節GET達到1.8M次每秒( Xeon X5650 ,2.67GHZ, 12cores, 12hyperthreads, intel 82574L 千兆以太網, memcached服務器開了24個線程)。

參考資料:

《scaling memcache at facebook》

(責任編輯:6g下載網)
標簽:Facebook memcache

分享到:

------分隔線----------------------------
? 35选7福利彩票