高速缓存系统进展跟踪
kv 缓存
codis 和 twemproxy 是 proxy, 前者解决了 redis 无法水平扩展的问题,后者同时解决了 redis 和 memcached 无法水平扩展的问题。这两个项目都已经多年不更新。现在 redis 支持 cluster 模式,水平扩展不再是问题。
很明显,有了 kubernetes 之后,不再需要单独维护一个巨大无比的支持多租户的缓存集群,把缓存做成 operator 直接部署在用户侧即可,不仅实现简单,还实现了天然的隔离。如果担心用户应用影响 kubernetes 集群的稳定性,可以为缓存等基础服务单独准备一个 kubernetes 集群,实现基础服务与业务系统的分离。
redis cluster 的设计
Redis cluster 实现了两个功能:
- 自动将数据分散到多个 redis 实例;
- 部分 redis 实例故障时,整体依旧可用。
通过以下方式实现上述功能:
- redis 实例启动两个 tcp 端口,6379 服务于客户端,6379+10000 用于 redis 间通信
- key 在多个 redis 实例间分配,hash slot 容量为 16384(2^14),哈希算法 CRC16
- 多 key 操作的目标必须在同一个 slot 中,写入 key 时用 hashtag 保证,{hashtag}key
- 每个 redis 实例通过 master-slave 的方式保证高可用
- redis cluster 非强一致性,数据异步同步,存在丢失的可能性(master 宕机/集群分裂等)
- redis clsuter 支持 reshard,但是不支持自动 reshard @2020-01-04 21:00:36
- 通过手动 faileover 的方式升级
- 支持 salve 自动迁移,保证每个 master 的副本数
更多细节: