Twemproxy源码浅析
Twemproxy(又称为nutcracker)是一个支持Redis和Memcached协议的快速轻量级的代理服务器。它是由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补Redis和Memcached对集群管理的不足。
对于我这样一个C语言的初学者来说, Twemproxy既没有Nginx,linux内核等因为深入性能细节的晦涩编码方式,但又具备了一个高性能的系统级应用项目的编程方式,从中可以学习良好C语言项目的编程风格、范式,学习类Unix下的系统编程,还有对于一个常驻服务的健壮性考虑等等,是一个非常好的项目。接下来我将把自己这一段时间来对twemproxy的调研,学习,使用和测试和自己的一些思考和大家一起分享,交流。
代码分析,如下图所示twemproxy可以划分成如下模块:
主函数流程(main):处理daemon, pidfile, args, config等;
系统相关模块(os utils):主要是conf,core, log, signal, stats等;
数据结构相关模块(ds utils):主要array,queue,string,rbtree等;
协议相关(proto):主要是redis和memcache协议的实现;
哈希算法(hash): 主要包含crc, fnv, ketama, Jenkins, murmur等多种hash算法实现;
还有最核心的两个模块:
Event机制和请求处理实现;
Twemproxy作为一个开源项目,不到2W行代码包含了一个健壮的服务器端软件的必需,架构非常清晰, 尤其让我印象深刻的是它对日志的合理布局和多层次分级,以及详细的错误处理,能够让使用者受益无穷。也可以看出大公司开源出来的代码,非常重视日志和错误处理。