Moxi是一个 memcached/membase 的代理,支持多线程、支持文本和二进制协议和libevent,可动态配置池的参数。moxi会在本地缓存,使得moxi相当于memcache server的前端cache,能减少网络请求开销。采用C语言开发并在BSD协议下授权。
moxi - memcached + integrated proxy.
Features
* Open-source, same BSD license as memcached.
* Written in C.
* Based on the latest memcached server code for its high-performance connection and protocol handling.
* Uses the libmemcached for its rich hashing features (consistent hashing, etc).
* Uses libevent for both upstream (client) and downstream connection handling.
* Test suites
* Protocol support
* Optimizations
* Lots of statistics tracked.
* Live reconfiguration
* Simplified deployment
* Features inherited from memcached
1、moxi基于最新的memcached代码,我简单的浏览moxi,发现它里面就有memcached的代码文件。所以,它对后面的memcached支持binaray和text两种协议,对前面的client目前只支持text协议,以后也会支持binaray协议。
2、moxi极力吸取已有工作成果,基于memcached开发,自然也是基于libevent、多线程模型,而一致性hash它使用的libmemcached客户端库。
3、对于并发的gets请求,moxi会做合并来减少和memcache server的交互,这个效果依赖于它对请求的get key做管道处理,所以在事件回调时能检测到需要合并的请求。
4、对热点访问的cache(可以人工通过前缀key指定),moxi会在本地缓存,使得moxi相当于memcache server的前端cache,能减少network hops。不过这种热点cache项相对要少很多,而且为保证能正确失效,热点cache需要被复制到moxi集群的每个节点。这个功能在特定场景下还是很实用的,毕竟加个proxy,cache访问的效率还是会低一些,这对热点cache会有效率上的提升。
5、可以配置请求的超时时间,如果超时就返回失败。如果直接操作memcache server,因为没有超时机制,在一些情况下会hang住很长时间(比如网络问题、memcache server处理大数据量的缓慢等)。
6、超时处理。可以配置请求的超时时间,如果超时就返回失败。如果直接操作memcache server,因为没有超时机制,在一些情况下会hang住很长时间(比如网络问题、memcache server处理大数据量的缓慢等)。
7、故障处理。memcache server不能访问时,Moxi会重试多次,如果失败就返回给client失败。Moxi支持动态的迁移memcache server配置。特别的,moxi可以做到将已有的一台memcache server的数据迁移到新的机器上,当新机器数据准备就绪,moxi就将它替换旧memcache server来提供服务。这个功能对memcache server的自动化运维很有帮助。
最新版本:
项目主页:http://code.google.com/p/moxi/