面試寶典系列-Memcache集羣的實現和解決單點故障

memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。各個memcached不會互相通訊以共享信息。算法

那麼,怎樣進行分佈式呢?這徹底取決於客戶端的實現緩存

如上圖,有三個memcached節點,在set或者get時使用同一種算法計算key與節點的映射關係,而後將數據寫入到該節點(get時從該節點中查詢)服務器

比較簡單的算法是餘數分散法(取模),其缺點是當增長節點或者節點掛了,重組緩存時,全部緩存將失效,代價太大。(採用一致性hash算法,避免此問題)分佈式

magent是一個memcached代理軟件(memcached agent),又叫memagent。memcached

經過Magent緩存代理,防止單點現象,緩存代理也能夠作備份。代理

客戶端鏈接到緩存代理服務器,緩存代理服務器鏈接緩存服務器。緩存代理服務器能夠鏈接多臺Memcached機器,能夠將每臺Memcached機器進行數據同步。若是其中一臺Memcached機器down掉,數據不會丟失而且能夠保證數據的完整性。server

它提供的功能及特色有:
一、和每一個memcache server保持多個長鏈接,效果是減小memcache server保持的鏈接數量及建立銷燬鏈接的開銷。
二、支持memcache的binary協議命令,實現請求的轉發。
三、和memcache同樣,基於libevent的事件驅動來處理IO。
四、支持ketama 的一致性hash算法。
五、支持memcache backup集羣,當memcache集羣有機器掛了,memagent會將get請求轉向memcache backup集羣。(高穩定性)blog

   

相關文章
相關標籤/搜索