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

  具体的配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
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画的简单的图

1
2
3
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