本篇介绍下分布式Redis集群方案:Codis 的相关内容。

Codis是由豌豆荚于2014年11月开源的一种Redis集群解决方案。

组成

Codis是一个代理中间件,使用Go语言开发。其分为四个部分:

1. Codis Proxy (codis-proxy)
2. Codis Dashboard (codis-config)
3. Codis Redis (codis-server)
4. ZooKeeper/Etcd

优劣

Codis和Twemproxy最大的区别有两个:

  1. Codis支持动态水平扩展,对Client完全透明不影响服务的情况下可以完成增减redis实例的操作
  2. Codis是用Go语言写的并支持多线程而Twemproxy用C并只用单线程

第2条又意味着:Codis在多核机器上的性能会好于Twemproxy,Codis的最坏响应时间可能会因为GC的STW而变大,不过Go1.5发布后会显著降低STW的时间;如果只用一个CPU的话Go语言的性能不如C,因此在一些短连接而非长连接的场景中,整个系统的瓶颈可能变成Accept新Tcp连接的速度,这时Codis的性能可能会差于Twemproxy。

  1. 虽然Redis是单线程的,但Codis Proxy是多线程的(严格来说是goroutine), 启动的线程数是CPU的核数,是可以充分利用起多核的性能的

使用注意事项

官方的建议是单个集合的总容量不要超过1M,否则在迁移的时候会有卡顿感