图片 2

twemproxy架构深入分析——解析twemproxy代码前编

又是可爱的新坑,后边的mysql协议,当作者在解读go-mysql包的时候,会重新讲到,至于Leetcode的更新会与go语言同步。关于那么些redis的新坑,方今筹划通过分析twemproxy源码来直接介绍redis的协议,达成手腕等等。下边先介绍一下大家的中流砥柱——twemproxy。

twemproxy背景

twemproxy是由twitter(照片墙)集团在2013年在github上开源轻量级的高速缓存服务器集群代理,这里的高速缓存服务器正是指redis以及memcache。我们珍视商量的是redis集群下的twemproxy,twemproxy提供了将redis包通过key举行切开,将相应的包发到多个服务器上,使得redis集群搭建成为也许。

 

那份代码在我眼里写得轻易而且优雅,是1份博古通今的就学linux
c语言的标准代码,里面用到的epoll模型,linux系统api,内部存款和储蓄器池调解以及连接池调节都以值得大家上学的。为啥说那么些方面他做得特别不错呢?我们清楚redis服务器是支撑高产出的,直连twemproxy与直连redis服务器差不离从不品质损失,可知twemproxy的epoll模型使用的神妙之处。那也是其连接池调治的克服。同时在内部存款和储蓄器池调解上他贯彻了0拷贝,即从互连网收发的多少不会通过转储直接通过指针在twemproxy中流转。那一个已经能够见见开垦者的代码功底,同时在落实地方用c语言完毕了面向对象的编制程序,他用结构体替代了类,用函数指针代替了类措施。

在业务量骤增的后天,单台高速缓存服务器已经不可能满意专门的学业的须要,
而相较于大体量SSD数据存款和储蓄方案,缓存具备速度和资金优势,但也设有数据安全性的挑战。为此搭建一个高速缓存服务器集群来展开遍布式存款和储蓄是拾贰分要求的。

看了这么多是或不是心动了呢?那就赶忙去下载吧! 和博主一同读书代码,一齐成人!!

当下主流的高速缓存服务器是redis和memchache。而twemproxy是永葆memcached和redis协议的轻量级代理中间件,能用来高速缓存服务器集群的搭建。为此,twemproxy是高速缓存服务器集群的着力零部件之1,也是产业界较为成熟的高速缓存服务器集群消除方案之1。

假如要设置twemproxy玩一玩的,请仔细阅读twemproxy的readme.md。

 

PS:要求安装autoconf贰.6九技巧初步精粹玩耍

twemproxy概述 

招待大家发言商讨!博主会努力恢复生机大家的!

 

twemproxy是搭建分布式缓存集群的首要器件之1。他能未来自客户端的redis包通过key分片发送到不相同的redis服务器,而不是发到单个redis服务器上。因此,能够使本来聚集到二个redis上的新闻被分散到多个redis上,那就使得 twemproxy能接济redis集群。

简单想到,因为twemproxy的分片功效,能够轻巧地对redis集群进行水平扩大(轻便地通晓成在三个作业中参预更多的redis服务器),同时对于代码稍加更换,大家就足以拿走能读写分离的redis集群,那大新秀巩固了redis集群的性质。那使得各大集团如豌豆荚、Ali、百度等都对此这份代码实行了修改,能使其知足分布式缓存集群的渴求。当然,twemproxy并不担负数据一致性的行事。

源码下载地址: 

 

twemproxy架构 

 

为了能越来越好地问询twemproxy的代码结构,大家就须求明白twemproxy的架构,理解与它交互的零件。上面正是相似twemproxy的架构图

图片 1图1
twemproxy架构图

图第11中学,client是客户端,这里的客户端可以是广大应用,如网页,也足以是有的亟需redis协理的服务器。LVS是Linux虚拟服务器,它至关心尊崇要用于负载均衡以及数额冗余,当然那三个层的负荷均衡以及数据冗余也足以经过别的手腕实现,如HAproxy等,当然也能够无需那1层,能够让客户端直连twemproxy。memchache和redis是twemproxy这段时间支持的三种高速缓存服务器,不过思量到高可用性和求实职能,一般会选择redis服务器。

我们可以看到在这种架构下,由于有着的通讯都以用redis大概memchache协议完毕。为此,client根本不清楚和它通讯的是高速缓存服务器照旧twemproxy,高速缓存服务器memchache或redis也不知情和它关系的的是client依旧twemproxy。

那般业务量一旦提高,大家只须要丰富适当的数量的高速缓存服务器和twemproxy服务器就足以满足工作要求。在这里面,大概不须要对本来的client端的代码大概原先的高速缓存服务器的配置做别的改造,就能够变成作业上的品位扩大体积,那样就大大提升了高速缓存服务器的可用性。同时,由于并非修改client端的代码,大家能够实行平整升级,即用户根本感知不到大家对作业开始展览了扩大体积,线上的client端不会因为大家的扩大体量而停下服务。同样地,大家能够对专门的工作举办缩容处理。由此在业务量大幅变动的时候,这种架构的灵活性和可用性是原本单一的高速缓存服务器集群不能够相比较的。

从这幅架构图上,大家也能先河所有人家表明twemproxy的特色,阅读源码文件夹下的《README.md》的features,至于她是哪些贯彻的,就须求大家去解读代码,那不是那一章要做到的任务。

图片 2

                                  图2
twemproxy特性

一.法斯特,即高速,据测试,直连twenproxy和直连redis比较差不多平素不品质损失,这已经很逆天了,最首要的是他还未曾进展读写分离就会落得那样的效能,确实fast

二.Lightweight,即轻量级,就自己个人而言,它代码量就是轻量级的,解压后独自一.八MB!!!!因为透明连接池,内部存款和储蓄器零拷贝以及epoll模型的采纳,使得它丰硕急忙和轻量级。

三.Enables pipelining of requests and responses,Keeps connection count
on the backend caching servers
low,即维持前端的连接数,缩短后端的连接数,这里根本得益于透明连接池的利用,前端首要指的是client和lvs,后端指的是redis和memchache,这么些受益极度醒目,既能够减弱了redis的连日负载,又有限匡助了维持了前者的意义。

四.Enables pipelining of requests and
responses,将要请求和回复管道化,这里本人的通晓是他将请求包和重作冯妇包一1对应起来后,使得它的呼吁和苏醒更鲜明。

5.Supports multiple server pools simultaneously,Shard data
automatically across multiple
servers,即它能够支撑四个高速缓存服务器,以及能对高速缓存服务器的多少实行共享,这是由此作者在如今讲到过twemproxy的分片功效来兑现的。

陆.Implements the complete memcached
ascii and redis protocol,它帮忙memchache和redis那多少个切磋,当然今后只协理在那之中绝大多数的情商而不是漫天,那几个会在后头开章节特地求证。

7.Supports multiple hashing modes including consistent hashing and
distribution.正是它协理广大哈希算法来哈希key,如crc3二,crc16,MD五等等。

八.Easy configuration of server pools through a YAML
file.它的安顿文件是由此YAML文件来陈设的,YAML文件好处是大致易懂,轻松学习布署。