twemproxy explore

本文介绍了Twitter开源项目Twemproxy(Nutcracker),作为Redis和Memcache的高效代理服务器,支持自动故障转移、HashTag等功能。此外还对比了其他几种代理方案,并详细讲解了Twemproxy的安装配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。同时在一定程度上变得可以控制。 搜索了不少的开源代理项目,知乎实现的python分片客户端。node的代理中间层,还有各种restfull的开源代理。

  • RedBrige

    • C + epoll实现的一个小的webserver
    • redis自身执行lua脚本的功能来执行redis命令
    • 访问时在url中带上lua脚本文件的名字,直接调用执行该lua脚本
    • 本质是通过http协议远程执行lua脚本
  • Webdis

    • libevent, http-parser...实现的小型web服务器
    • C 语言实现,通过unix-socket,TCP调用redis命令。
    • 访问方法: /cmd/key/arg0,arg1,... 实质是对redis命令的简单变换
  • redis-proxy

    • 使用node写的redis代理层。
    • 支持主从节点的失败处理(可以仔细研究)
    • 测试后发现性能为原生的1/3
  • twemproxy

    • 支持失败节点自动删除

      • 可以设置重新连接该节点的时间
      • 可以设置连接多少次之后删除该节点
      • 该方式适合作为cache存储
    • 支持设置HashTag

      • 通过HashTag可以自己设定将两个KEYhash到同一个实例上去。
    • 减少与redis的直接连接数

      • 保持与redis的长连接
      • 可设置代理与后台每个redis连接的数目
    • 自动分片到后端多个redis实例上

      • 多种hash算法(部分还没有研究明白)
      • 可以设置后端实例的权重
    • 避免单点问题

      • 可以平行部署多个代理层.client自动选择可用的一个
    • 支持redis pipelining request

    • 支持状态监控

      • 可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串
      • 可设置监控信息刷新间隔时间
    • 高吞吐量

      • 连接复用,内存复用。
      • 将多个连接请求,组成reids pipelining统一向redis请求。

另外可以修改redis的源代码,抽取出redis中的前半部分,作为一个中间代理层。最终都是通过linux下的epoll 事件机制提高并发效率,其中nutcraker本身也是使用epoll的事件机制。并且在性能测试上的表现非常出色。

配置部署建议: 编译时候打开logging模块。

redis部署知识: AOF;一种记录redis写操作的文件,用于恢复redis数据。


那么说一下搭建环境的方法:https://github.com/twitter/twemproxy

To build nutcracker from distribution tarball:

$ ./configure
$ make
$ sudo make install

To build nutcracker from distribution tarball in debug mode:

$ CFLAGS="-ggdb3 -O0" ./configure --enable-debug=full
$ make
$ sudo make install

To build nutcracker from source with debug logs enabled and assertions disabled:

$ git clone git@github.com:twitter/twemproxy.git
$ cd twemproxy
$ autoreconf -fvi
$ ./configure --enable-debug=log
$ make
$ src/nutcracker -h

我使用的是第一种方法(需要下载他的nutcracker包),原因是服务器基本包缺的太多。

 

 ---------------------------------------------------------------------------

安装完需要配置(我只配置了本地36一台机子,#后边是注释)

 

redis1: #服务器池成员名字

 

  listen: 192.168.6.36:19999 #twemproxy启动端口

 

  hash: fnv1a_64 #具体的hash函数

 

  distribution: ketama #hash算法-如何分布key,关系到均匀分布key的算法,影响命中key等性能,这里是ketama算法

 

  auto_eject_hosts: true #是否在节点无法响应的时候临时找出,区分save data的slave和cache data的slave

 

  redis: true #是否是redis的proxy

 

  server_retry_timeout: 2000 #重试时间ms

 

  server_failure_limit: 1 #节点故障多少次后摘除

 

  servers: # redis节点(ip:端口号:权重)

 

   - 192.168.6.36:6379:1

 

-----------------------------------------------------------------------------------

 

 安装配置完成后,可以用nutcracker -t来检查配置文件

                                        nutcracker -d后天启动服务

                                        nucracker -D和nucracker stat查看代理状态

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值