Twemproxy:推ter 開源的 Redis 代理

jopen 11年前發布 | 22K 次閱讀 Redis NoSQL數據庫

  在去年的 QCon London2012 大會上,推ter 發表了題為 《Timelines @ 推ter》的演講,里面提到以 Redis 作為其 timeline 的主要存儲,目前目測全球范圍內,推ter 可能是 Redis 的最大用戶了(或者是新浪微博?)。

  而今天我們要說的這個 Twemproxy,是 推ter 開源出來的 Redis 和 Memcached 代理。

  功能介紹

  我們知道,無論是 Memcached 還是當前的 Redis,其本身都不具備分布式集群特性,當我們有大量 Redis 或 Memcached 的時候,通常只能通過客戶端的一些數據分配算法(比如一致性哈希),來實現集群存儲的特性。

  而Twemproxy 通過引入一個代理層,可以將其后端的多臺 Redis 或 Memcached 實例進行統一管理與分配,使應用程序只需要在 Twemproxy 上進行操作,而不用關心后面具體有多少個真實的 Redis 或 Memcached 存儲。

  在 Redis 的 Cluster 方案還沒有正式推出之前,通過 Proxy 的方式來實現存儲集群可能是最好的選擇了。更何況 Twemproxy 是通過 推ter 自身得到了充分檢驗的產品。

  性能

  根據 Redis 作者的測試結果,在大多數情況下,Twemproxy 的性能相當不錯,直接操作 Redis 相比,最多只有 20% 的性能損失。這對于它帶來的好處來說真的是微不足道了。唯一可能還有待改進的是其 MGET 操作的效率,其性能只有直接操作 Redis 的 50%。

  安裝與配置

  Twemproxy 的安裝有點小麻煩,主要命令如下:

apt-get install automake  
apt-get install libtool  
git clone git://github.com/推ter/twemproxy.git       cd twemproxy  
autoreconf -fvi  
./configure --enable-debug=log  
make  
src/nutcracker -h

  通過上面的命令就算安裝好了,然后是具體的配置,下面是一個典型的配置

    redis1:  
      listen: 0.0.0.0:9999 #使用哪個端口啟動 Twemproxy  
      redis: true #是否是 Redis 的 proxy  
      hash: fnv1a_64 #指定具體的 hash 函數  
      distribution: ketama #具體的 hash 算法  
      auto_eject_hosts: true #是否在結點無法響應的時候臨時摘除結點  
      timeout: 400 #超時時間(毫秒)  
      server_retry_timeout: 2000 #重試的時間(毫秒)  
      server_failure_limit: 1 #結點故障多少次就算摘除掉  
      servers: #下面表示所有的 Redis 節點(IP:端口號:權重)  
       - 127.0.0.1:6379:1 - 127.0.0.1:6380:1 - 127.0.0.1:6381:1 - 127.0.0.1:6382:1  

    redis2:  
      listen: 0.0.0.0:10000  
      redis: true  
      hash: fnv1a_64  
      distribution: ketama  
      auto_eject_hosts: false  
      timeout: 400  
      servers:  
       - 127.0.0.1:6379:1 - 127.0.0.1:6380:1 - 127.0.0.1:6381:1 - 127.0.0.1:6382:1

  你可以同時開啟多個 Twemproxy 實例,它們都可以進行讀寫,這樣你的應用程序就可以完全避免所謂的單點故障。

  問題與不足

  Twemproxy 由于其自身原理限制,有一些不足之處,如:

  • 不支持針對多個值的操作,比如取 sets 的子交并補等(MGET 和 DEL 除外)
  • 不支持 Redis 的事務操作
  • 出錯提示還不夠完善

  更多

  關于 Twemproxy 的介紹可以看這里:http://antirez.com/news/44

  Twemproxy 項目地址:https://github.com/推ter/twemproxy

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!