Redis技能——Codis

其实codis原理和官方cluster基本一致,但是:
  1. codis是选用了一系列已证明靠谱的方案来构建(如zk选主/存放元数据;采用无状态proxy,而不是smart client等)
  2. 为方便运维提供了一系列工具/接口
  3. 再加上公司内部的一定规模应用

所以大家用它更多。

作者:CafeBabe
链接:https://www.zhihu.com/question/30857837/answer/169207128
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

redis cluster的原理,是基于分片。一个 Redis cluster集群包含 16384 个哈希槽, 任意一个key都可以通过 CRC16(key) % 16384 这个公式计算出应当属于哪个槽。每个槽应当落在哪个节点上,也是事先定好。这样,进行任一操作时,首先会根据key计算出对应的节点,然后操作相应的节点就可以了。

所以说,其实cluster跟单点相比,只是多了一个给key计算sharding值的过程,并没有增加多少复杂度,个人认为完全可以放心使用。像增删节点、重启这些对redis本身的操作,和client端对数据的操作,是两套流程,可以做到互不干扰。关于节点故障,一是有slave,二是即便这一个节点完全挂掉,也只是落在这个节点上的数据不可用,不会有类似“雪崩”这样的问题影响整个集群。数据的恢复之类的逻辑,也与单点完全一致,是独立于集群其他部分的。

redis cluster的整个设计是比较简单的,并没有引入太多新问题,大部分操作都可以按照单点的操作流程进行操作。至于cluster最终的易用性,其实很大程度上取决client端的代码可靠性,而jedis现在的代码也已经很完善了,用起来也比较方便。

关于运维,可以看一下搜狐的cacheCloud, 对cluster的管理现在也比较完善了。

所以,个人觉得,目前cluster完全可以取代codis,tweemproxy在生产环境使用。

codis中的各个组件:

1. 先看 ServerGroup 和 Slot。

一个 Proxy 可以对应多个 ServerGroup;

ServerGroup 是一组 Codis Server,一个 ServerGroup 只有一个 Master(Codis Server),而且虽然有多个 Codis Server,Proxy 只访问 ServerGroup 中的 Master,Slave 可用作故障切换;

Slot 是一个逻辑概念,一共 1024 个,使用 crc32(key) % 1024 计算 Slot id,而且一个(或多个) Slot 属于一个 ServerGroup,1024 个 Slot 一起分用多个 ServerGroup 资源;

当 Slot 所在 ServerGroup 内存不够的时候可以把此 Slot 迁移到另一个内存使用少的 ServerGroup,实现扩容的目的,而当所有 ServerGroup 内存不够的时候增加新的 ServerGroup 即可。

ServerGroup 数据结构:

[_K[1]X4KE_{$HXH0@P]`9O

Slot 数据结构:

29AS3XNMNY`_`CGTZHM@IQN

28D99C1F-2BE6-470B-8638-892224C22669

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值