天天看點

建構高可用的緩存叢集的開源解決方案

很多應用都通過使用緩存來避免所有的請求都查詢資料庫,以加快系統的響應速度,memcached是常用的緩存伺服器(現在比較流行的還有redis),它一個高性能的分布式記憶體對象緩存系統,旨在通過緩存資料庫查詢結果,減少資料庫的通路次數。但是在運作多個memcached伺服器時,往往還需要考慮其它的問題,比如緩存一緻性、緩存失效等,緩存一緻性是指要保證多個memcached伺服器中資料的一緻,緩存失效的後果相對來說比較嚴重,當在大并發通路的場景下,如果memcached緩存失效,所有請求會在同一瞬間并發通路資料庫,可能會導緻資料庫當機。為了保證緩存系統的穩定和高可用,很多公司都研發了相應的系統。本文彙總了twitter、facebook、youtube在緩存方面的解決方案,供讀者參考。

twitter的redis/memcached代理服務:twemproxy

twemproxy是一個使用c語言編寫的redis 和 memcache 代理伺服器,通過引入一個代理層,将應用程式後端的多台redis或memcached執行個體進行統一管理,使應用程式隻需要在twemproxy上進行操作,而不用關心後面具體有多少個真實的redis或memcached執行個體。當某個節點宕掉時,twemproxy可以自動将它從叢集中剔除,而當它恢複服務時,twemproxy也會自動連接配接。由于是代理,是以twemproxy會有微小的性能損失。

facebook的memcached協定路由器:mcrouter

mcrouter是一個使用c++(主要語言,使用了大量的c++ 11特性)開發的基于memcached協定的路由器,它是facebook和instagram緩存架構的核心元件,在高峰時期可以處理近50億請求。mcrouter中用戶端可以共享連接配接池,這樣能減少連接配接的數量。mcrouter可以根據key字首把用戶端配置設定到不同的memcached池中,允許以主機、池或者叢集為機關設定任何請求的速率的閥值,同時也支援限制請求的速度以減緩請求的發送速度,以保障服務品質。

youtube的mysql中間件:vitess

緩存層存在的初衷是減少應用與資料庫的互動,以提高響應時間,與其将緩存與資料庫分離,不如直接将緩存嵌入資料庫中。vitess是youtube的開源分布式mysql工具集,主要使用go語言編寫,已經用于youtube生産環境。vitess支援行級緩存,并與memcached進行了內建,可以有效提高帶主鍵查詢的速率,查詢隻有在memcached中查詢不到時才會進入資料庫查詢,而當資料被修改或者資料庫表結構發生變化時,緩存資料會被删除。