少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          1、twemproxy explore

                當(dāng)我們有大量 Redis 或 Memcached 的時候,通常只能通過客戶端的一些數(shù)據(jù)分配算法(比如一致性哈希),來實(shí)現(xiàn)集群存儲的特性。雖然Redis 2.6版本已經(jīng)發(fā)布Redis Cluster,但還不是很成熟適用正式生產(chǎn)環(huán)境。 Redis 的 Cluster 方案還沒有正式推出之前,我們通過 Proxy 的方式來實(shí)現(xiàn)集群存儲。

                 Twitter,世界最大的Redis集群之一部署在Twitter用于為用戶提供時間軸數(shù)據(jù)。Twitter Open Source部門提供了Twemproxy。

               Twemproxy,也叫nutcraker。是一個twtter開源的一個redis和memcache代理服務(wù)器。 redis作為一個高效的緩存服務(wù)器,非常具有應(yīng)用價值。但是當(dāng)使用比較多的時候,就希望可以通過某種方式 統(tǒng)一進(jìn)行管理。避免每個應(yīng)用每個客戶端管理連接的松散性。同時在一定程度上變得可以控制。

                Twemproxy是一個快速的單線程代理程序,支持Memcached ASCII協(xié)議和更新的Redis協(xié)議:

               它全部用C寫成,使用Apache 2.0 License授權(quán)。項(xiàng)目在Linux上可以工作,而在OSX上無法編譯,因?yàn)樗蕾嚵薳poll API.

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

          2、twemproxy特性:

            • 支持失敗節(jié)點(diǎn)自動刪除

              • 可以設(shè)置重新連接該節(jié)點(diǎn)的時間
              • 可以設(shè)置連接多少次之后刪除該節(jié)點(diǎn)
              • 該方式適合作為cache存儲
            • 支持設(shè)置HashTag

              • 通過HashTag可以自己設(shè)定將兩個KEYhash到同一個實(shí)例上去。
            • 減少與redis的直接連接數(shù)

              • 保持與redis的長連接
              • 可設(shè)置代理與后臺每個redis連接的數(shù)目
            • 自動分片到后端多個redis實(shí)例上

              • 多種hash算法:能夠使用不同的策略和散列函數(shù)支持一致性hash。
              • 可以設(shè)置后端實(shí)例的權(quán)重
            • 避免單點(diǎn)問題

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

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

            • 支持狀態(tài)監(jiān)控

              • 可設(shè)置狀態(tài)監(jiān)控ip和端口,訪問ip和端口可以得到一個json格式的狀態(tài)信息串
              • 可設(shè)置監(jiān)控信息刷新間隔時間
            • 高吞吐量

              • 連接復(fù)用,內(nèi)存復(fù)用。
              • 將多個連接請求,組成reids pipelining統(tǒng)一向redis請求。

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

          3、twemproxy問題與不足


          Twemproxy 由于其自身原理限制,有一些不足之處,如: 
          • 不支持針對多個值的操作,比如取sets的子交并補(bǔ)等(MGET 和 DEL 除外)
          • 不支持Redis的事務(wù)操作
          • 出錯提示還不夠完善
          • 也不支持select操作

          4、安裝與配置 

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

          通過上面的命令就算安裝好了,然后是具體的配置,下面是一個典型的配置 
              redis1:  
                listen: 127.0.0.1:6379 #使用哪個端口啟動Twemproxy  
                redis: true #是否是Redis的proxy  
                hash: fnv1a_64 #指定具體的hash函數(shù)  
                distribution: ketama #具體的hash算法  
                auto_eject_hosts: true #是否在結(jié)點(diǎn)無法響應(yīng)的時候臨時摘除結(jié)點(diǎn)  
                timeout: 400 #超時時間(毫秒)  
                server_retry_timeout: 2000 #重試的時間(毫秒)  
                server_failure_limit: 1 #結(jié)點(diǎn)故障多少次就算摘除掉  
                servers: #下面表示所有的Redis節(jié)點(diǎn)(IP:端口號:權(quán)重)  
                 - 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 實(shí)例,它們都可以進(jìn)行讀寫,這樣你的應(yīng)用程序就可以完全避免所謂的單點(diǎn)故障。


          http://blog.csdn.net/hguisu/article/details/9174459/
          posted on 2015-11-03 19:30 abin 閱讀(1006) 評論(0)  編輯  收藏 所屬分類: twemproxy

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 石棉县| 毕节市| 定日县| 舒城县| 江北区| 高青县| 花莲县| 棋牌| 镇远县| 平顶山市| 门头沟区| 迁西县| 许昌县| 长治市| 赤壁市| 曲沃县| 泌阳县| 湖口县| 确山县| 邵东县| 昌乐县| 龙川县| 海口市| 临沧市| 西藏| 碌曲县| 筠连县| 吴江市| 柏乡县| 会东县| 望城县| 宜黄县| 介休市| 原平市| 灌阳县| 屏东市| 长子县| 长葛市| 扶沟县| 贵港市| 申扎县|