redis cluster
架构
- redis集群两两之间互相通信,并将16384个哈希槽分配给每个节点(程序或者手动分配,非一致性hash)。
- 当需要在 Redis 集群中set一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽。
- redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
特点
优点
- 部署简单。redis自身支持,无需其他节点。
- 支持高可用。
缺点
- 客户端需要定制。需实现redis集群协议。
- server节点两两通信,集群规模受限
- 建议支持200master节点,每个节点10G,最多2T空间,如果业务要求不能用满,空间会更少
- 弥补方式:多集群分片。
槽迁移
- 槽迁移整体流程。
- 迁移key的过程。
- 槽迁移过程中,如果请求源节点,而key被迁移到目标节点会返回ASK错误,客户端这一次请求转向目标节点。
- 槽迁移结束,如果请求源节点发现对应的槽已迁移,返回MOVED错误,客户端之后这个槽的请求都转向目标节点。
容错机制
- 集群模式。
codis
架构
- 基于redis 2.8.13开发,在redis和client中间插入Proxy层,内存维护槽位(key分组)和Redis实例映射关系,zk持久化映射关系。
特点
优点
- 分布式逻辑和存储逻辑分离。客户端无需关注服务端部署,client和server可各自升级,proxy扩容方便。
- 支持pinpline等redis cluster不支持的命令。
- 大规模生产使用过,可靠。redis cluster待考验。
- 集群可以支持1024个master server节点,容量是cluster架构的五倍以上。
缺点
- 部署复杂。服务节点较多,除了redis还需proxy和zk。
- 性能略微受损。proxy-server低于1ms的rt
参考
客户端分片
架构
- redis节点之间互不通信,client直连多台redis(主从),在客户端做hash。
特点
优点
- 架构简单,可靠。
- 支持原生的redis命令。
缺点
- 分布式逻辑和存储逻辑耦合在客户端。