twemproxy explore
twemproxy,也叫nutcraker。是一個twtter開源的一個redis和memcache代理服務器。 redis作為一個高效的緩存服務器,非常具有應用價值。但是當使用比較多的時候,就希望可以通過某種方式 統一進行管理。避免每個應用每個客戶端管理連接的松散性。同時在一定程度上變得可以控制。 搜索了不少的開源代理項目,知乎實現的python分片客戶端。node的代理中間層,還有各種restfull的開源代理。
-
RedBrige
- C + epoll實現的一個小的webserver
- redis自身執行lua腳本的功能來執行redis命令
- 訪問時在url中帶上lua腳本文件的名字,直接調用執行該lua腳本
- 本質是通過http協議遠程執行lua腳本
-
Webdis
- libevent, http-parser...實現的小型web服務器
- C 語言實現,通過unix-socket,TCP調用redis命令。
- 訪問方法:
/cmd/key/arg0,arg1,...
實質是對redis命令的簡單變換
-
redis-proxy
- 使用node寫的redis代理層。
- 支持主從節點的失敗處理(可以仔細研究)
- 測試后發現性能為原生的1/3
-
twemproxy
-
支持失敗節點自動刪除
- 可以設置重新連接該節點的時間
- 可以設置連接多少次之后刪除該節點
- 該方式適合作為cache存儲
-
支持設置HashTag
- 通過HashTag可以自己設定將兩個KEYhash到同一個實例上去。
-
減少與redis的直接連接數
- 保持與redis的長連接
- 可設置代理與后台每個redis連接的數目
-
自動分片到后端多個redis實例上
- 多種hash算法(部分還沒有研究明白)
- 可以設置后端實例的權重
-
避免單點問題
- 可以平行部署多個代理層.client自動選擇可用的一個
-
支持redis pipelining request
-
支持狀態監控
- 可設置狀態監控ip和端口,訪問ip和端口可以得到一個json格式的狀態信息串
- 可設置監控信息刷新間隔時間
-
高吞吐量
- 連接復用,內存復用。
- 將多個連接請求,組成reids pipelining統一向redis請求。
-
另外可以修改redis的源代碼,抽取出redis中的前半部分,作為一個中間代理層。最終都是通過linux下的epoll 事件機制提高並發效率,其中nutcraker本身也是使用epoll的事件機制。並且在性能測試上的表現非常出色。
配置部署建議: 編譯時候打開logging模塊。
redis部署知識: AOF;一種記錄redis寫操作的文件,用於恢復redis數據。
轉自:http://cloudaice.com/twemproxy-explore/