0%

Twemproxy小试

由于用redis太多,而在程序中实现pre-hashing的方法导致扩展比较麻烦,每次要新的redis进来都需要重新改下代码。于是就测试了一下twitter开源出来的twemproxy。 项目地址为:https://github.com/twitter/twemproxy 安装方式很简单,配置文件也十分简单易懂。就是hash函数和distribution 这2个部分不知道怎么选。 distribution的hash算法用的是一致性hash的ketama算法。但是前面的hash函数部分不是特别明白具体的,因为一开始选用的fnv1a_64哈希算法,导致我在2个redis后端的时候100个set居然都在一台服务器上,有点不是特别靠谱,所以选用了murmur哈希算法。具体的算法如下 哈希算法:

  • one_at_a_time
  • md5
  • crc16
  • crc32
  • fnv1_64
  • fnv1a_64
  • fnv1_32
  • fnv1a_32
  • hsieh
  • murmur
  • jenkins

distribution 算法:

  • ketama

  • modula

  • random

    具体的配置文件如下

    redistest1: 
    listen: 0.0.0.0:21121 #使用哪个端口启动Twemproxy 
    redis: true #是否是Redis的proxy 
    hash: murmur #指定具体的hash函数 
    distribution: ketama #具体的hash算法 
    auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点 
    timeout: 400 #超时时间(毫秒) 
    server_retry_timeout: 1000 #重试的时间(毫秒) 
    server_failure_limit: 2 #结点故障多少次就算摘除掉 
    servers: #下面表示所有的Redis节点(IP:端口号:权重) 
    - 10.10.10.232:6379:1 
    - 10.10.10.233:6379:1 
    - 10.10.10.234:6379:1 

    总共做了如下测试,只是使用了ruby的redis gem进行简单的set操作。虚拟机配置也不高,仅作为参考使用。 仅做了单进程,10进程,100进程的测试。 下面这个是使用gnuplot画的简单的图

    set xlabel 'concurrent'; 
    set ylabel 'finish time'; 
    plot  "/home/timo/temp/1.dat" using 1:3 title "twemproxy+3 redis" with lines, "/home/timo/temp/1.dat" using 1:2 title "1 redis" with lines 

  • 本文作者: Timo
  • 本文链接: 3495.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!