Redis 代理服務Twemproxy

來源:互聯網
上載者:User

標籤:

1、twemproxy explore

     當我們有大量 Redis 或 Memcached 的時候,通常只能通過用戶端的一些資料分配演算法(比如一致性雜湊),來實現叢集儲存的特性。雖然Redis 2.6版本已經發布Redis Cluster,但還不是很成熟適用正式生產環境。 Redis 的 Cluster 方案還沒有正式推出之前,我們通過 Proxy 的方式來實現叢集儲存。

       Twitter,世界最大的Redis叢集之一部署在Twitter用於為使用者提供時間軸資料。Twitter Open Source部門提供了Twemproxy。

     Twemproxy,也叫nutcraker。是一個twtter開源的一個redis和memcacheProxy 伺服器。 redis作為一個高效的快取服務器,非常具有應用價值。但是當使用比較多的時候,就希望可以通過某種方式 統一進行管理。避免每個應用每個用戶端管理串連的鬆散性。同時在一定程度上變得可以控制。

  Twemproxy是一個快速的單線程代理程式,支援Memcached ASCII協議和更新的Redis協議:

     它全部用C寫成,使用Apache 2.0 License授權。項目在Linux上可以工作,而在OSX上無法編譯,因為它依賴了epoll API.

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

2、twemproxy特性:

    • 支援失敗節點自動刪除

      • 可以設定重新串連該節點的時間
      • 可以設定串連多少次之後刪除該節點
      • 該方式適合作為cache儲存
    • 支援設定HashTag

      • 通過HashTag可以自己設定將兩個KEYhash到同一個執行個體上去。
    • 減少與redis的直接連接數

      • 保持與redis的長串連
      • 可設定代理與後台每個redis串連的數目
    • 自動分區到後端多個redis執行個體上

      • 多種hash演算法:能夠使用不同的策略和散列函數支援一致性hash。
      • 可以設定後端執行個體的權重
    • 避免單點問題

      • 可以平行部署多個代理層.client自動選擇可用的一個
    • 支援redis pipelining request

           支援要求的流式與批處理,降低來回的消耗

    • 支援狀態監控

      • 可設定狀態監控ip和連接埠,訪問ip和連接埠可以得到一個json格式的狀態資訊串
      • 可設定監控資訊重新整理間隔時間
    • 高輸送量

      • 串連複用,記憶體複用。
      • 將多個串連請求,組成reids pipelining統一向redis請求。

     另外可以修改redis的原始碼,抽取出redis中的前半部分,作為一個中間代理層。最終都是通過linux下的epoll 事件機制提高並發效率,其中nutcraker本身也是使用epoll的事件機制。並且在效能測試上的表現非常出色。

 

3、twemproxy問題與不足

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

  • 也不支援select操作

 

 具體的安裝步驟可用查看github:https://github.com/twitter/twemproxyTwemproxy 的安裝,主要命令如下: 
  1. apt-get install automake  
  2. apt-get install libtool  
  3. git clone git://github.com/twitter/twemproxy.git  
  4. cd twemproxy  
  5. autoreconf -fvi  
  6. ./configure --enable-debug=log  
  7. make  
  8. src/nutcracker -h  

通過上面的命令就算安裝好了,然後是具體的配置,下面是一個典型的配置 
  •   listen: 127.0.0.1:6379 #使用哪個連接埠啟動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: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 執行個體,它們都可以進行讀寫,這樣你的應用程式就可以完全避免所謂的單點故障。

Redis 代理服務Twemproxy

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.