最新消息:比度技术-是关注互联网技术的个人博客,大部分内容来自互联网,以作为笔记查阅。

twemproxy源码框架分析

分布式存储 bidu 183浏览

1、redis缓存中间件

Redis作为高性能缓存,中间件主要有codis和twemproxy。(src:/twe/twemproxy-src.mhtml)

  • codis和codis-server(redis分支)配合使用,对以后redis升级扩展不利。
  • Twemproxy是一种代理分片机制,由Twitter开源。

Twemproxy作为代理,可接受来自多个程序的访问,

按照路由规则,转发给后台的各个Redis服务器,

再原路返回。该方案很好的解决了单个Redis实例

承载能力的问题。当然,Twemproxy本身也是单点,

需要用Keepalived做高可用方案。其实twemproxy不光实现了redis协议,还实现了memcached协议。

  • 在使用TwemProxy构建redis集群时,可以通过增加redis实例数来扩大redis的容量。在redis的实际部署过程中,根据实际需要的redis的内存量,来规划twemproxy群集中redis的实例数量,通过twemproxy提供该群集的统一的访问入口,这样即有效的扩充了redis server的内存总量,又避免了单个redis server内存过大导致的问题。

2、架构部署

3、外部交互数据流图

4、core_start流程

5、twemproxy内部模块

6、twemproxy内部交互

7、twemproxy透明链接池

8、twemproxy-server连接队列

9、twemprxoy尾队列

Proxy内部大量使用了尾队列,有关队列的代码主要在nc_queue.h中。

从代码注释中可以看到,这个文件只不过是从FreeBSD中拿过来的,队

列的定义和操作凑是通过宏来实现的。一个尾队列包含两个部分:一

个头head,一组元素elements,头我们简称为tqh(tail queue

header),元素我们简称为tqe(tail queue element)。

在尾队列的头当中,保存了指向队列第一个元素的

指针和指向最后一个元素的next指针的指针,

在每个元素当中,则保存了指向下一个元素的

next指针和指向上一个元素的next指针的指针

10、一致性hash算法

一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题。

可以参考: http://blog.csdn.net/cywosp/article/details/23397179/

11、twemproxyhash算法实现

Talos一致性hash算法(DIST_KETAMA):

1、求取活跃服务器数量nlive_server

2、分配hash槽数: ncontinuum = nlive_server * 160

3、根据server权重weight计算server应分配 hash槽数量

pointer_per_server 。

4、分配pointer_per_server个hash槽给server。

具体代码就是:

pool->continuum[continuum_index].index = server_index;

pool->continuum[continuum_index++].value = value;

12、其他hash算法

除了一致性hash(DIST_KETAMA:)算法

还有取模和随机两种算法

DIST_MODULA

DIST_RANDOM

13、twemproxy链接建立流程图

14、twemproxy内部数据流图

15、twemproxy性能

在性能方面:

1)单个Twemproxy后面挂多个Redis实例,其性能最多也只能达到单台Redis的性能。

2)多台Twemproxy配置一样,客户端分别连接多台Talos可提高性能。

16、twemproxy底层存储

Twemproxy本身没有存储功能,目前后台存储支持redis和memcached

可以扩展协议支持其他存储

 

转载请注明:比度技术-关注互联网技术的个人博客 » twemproxy源码框架分析