Twemproxy分析】的更多相关文章

twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数. 由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补Redis和Memcached对集群(cluster)管理指出的不足. 项目地址:https://github.com/twitter/twemproxy 安装 Ubuntu下安装如下步骤: 1.apt-get install automake 2.apt-get install libtool 3…
在这篇文章开始前,大家要做好一个小小的心理准备,由于twemproxy代码是一份优秀的c语言,为此,在twemproxy的代码中会大篇幅使用c指针.但是不论是普通类型的指针还是函数指针,都可以让我们这些c语言使用者大饱眼福,生出一种"原来还可以这样写!!!"的快感.这篇文章旨在帮助大家探索出twemproxy接收流程的代码逻辑框架,有些具体的实现需要我们在未来抽空去探索或者大家自行探索. 数据结构 在探索twemproxy接收流程之前,我们必须对一些我们可能会用到的数据结构进行说明,以…
twemproxy是twitter开源的redis/memcached 代理,数据分片提供取模,一致性哈希等手段,维护和后端server的长连接,自动踢除server,恢复server,提供专门的状态监控端口供外部工具获取状态监控信息.代码写的比较漂亮,学习了一些Nginx的东西,比如每个请求的处理分为多个阶段,IO模型方面,采用单线程收发包,基于epoll事件驱动模型.文档中提到的Zero Copy技术,通过将消息指针在3个队列之间流转实现比较巧妙.本文主要分析twemproxy的核心部分,即…
twemproxy源码中关于守护进程的创建实现得比较标准,先贴出代码来,然后结合一些资料来分析和列举一些实现守护进程的常用方法,不过不得不说twemproxy的实现确实是不错的,注释都写在了代码中,直接上代码吧: static rstatus_t nc_daemonize(int dump_core) { rstatus_t status; pid_t pid, sid; int fd; /* * 先fork出一个子进程,把主进程关闭了 */ pid = fork(); switch (pid)…
最近工作中需要写一个一致性哈希的代理,在网上找到了twemproxy,结合网上资料先学习一下源码. 一.Twemproxy简介 Twemproxy是memcache与redis的代理,由twitter公司开发并且目前已经开源.研究这个对于理解网络通信有很大的帮助. 亮点有以下: 1.twemproxy自己创建并维护和后端server(即reids实例)的长连接,保证长连接对于来自不同client但去向同一server的复用. 2.自动识别异常状态的server,保证之后的请求不会被转发到该异常s…
twemproxy背景 在业务量剧增的今天,单台高速缓存服务器已经无法满足业务的需求, 而相较于大容量SSD数据存储方案,缓存具备速度和成本优势,但也存在数据安全性的挑战.为此搭建一个高速缓存服务器集群来进行分布式存储是十分必要的. 目前主流的高速缓存服务器是redis和memchache.而twemproxy是支持memcached和redis协议的轻量级代理中间件,能用于高速缓存服务器集群的搭建.为此,twemproxy是高速缓存服务器集群的核心组件之一,也是业界较为成熟的高速缓存服务器集群…
转贴请注明原帖位置:http://www.cnblogs.com/basecn/p/4288456.html 测试Twemproxy集群,双主双活 向twemproxy集群做写操作时,发现key的分布不太理想.在测试节点故障时,也发现一些和预想不太一样的地方. 1.Key的一致性Hash 当尝试以a001,a002这样有规律且的key值写入的时候,在4节点的集群环境中,key主要分布在其中的2台节点,另外两台分配极少.对于一些应用来说,key值可能根据一定规则生成,所以有被定向分配的可能. 解决…
评注:提到HAProxy业务层proxy, twemproxy存储的proxy. 其中还提到了ketama算法的实现源码 转自:http://www.cnblogs.com/basecn/p/4288456.html 测试Twemproxy集群,双主双活 向twemproxy集群做写操作时,发现key的分布不太理想.在测试节点故障时,也发现一些和预想不太一样的地方. 1.Key的一致性Hash 当尝试以a001,a002这样有规律且的key值写入的时候,在4节点的集群环境中,key主要分布在其中…
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和memcached更为接近的是redis.它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存.在我们团队的项目中,一开始用的是memcached,后来用redis替代. 相比memcached: 1.redis具有持久化机…
本篇将去探索twemproxy源码的主干流程,想来对于想要开始啃这份优秀源码生肉的童鞋会有不小的帮助.这里我们首先要找到 twemproxy正确的打开方式--twemproxy的文件结构,接着介绍twemproxy程序代码框架,最后介绍twemproxy程序的主干流程.主干流程是本章节的重中之重.这次主要是为了能将这份代码较为复杂的流程进行一些简单的模块分解和流程分解,以方便我们后面的阅读. twemproxy的文件结构 当然接下来首先要上一幅图,就是twemproxy的文件结构图 图1 文件结…