redis一致性哈希集群客户端实现

redis一致性哈希多集群客户端实现

背景

  • 业务方使用单一redis集群,存在容量不够的问题,需要进行redis的扩容。
  • 增加server后,需要保证相同的key落到相同的集群上。
  • 业务方是多个client,需要保证集群的变更不影响不同client之间对于同一个key的一致性。
  • 缩容也是同理。

方案

redis-cluster(> 3.0)

  • 去中心化设计,每个master对等,感知所有slot的hash环的拓扑,节点间利用Gossip协议通信,进行选主等操作,主从进行数据同步,实现最终一致性。
  • smartClient,能够进行redirect,更新hash map等。
  • rebalancing,当发生增加或删除节点时,会发生rebalancing,redis-cluster利用一主多从特点,迁移slot的同时,读写分离和进行migrating,redirecting。比如:增加master节点B,需要将master节点A的slot:8迁移到B,则将A设置为IMPORTING状态,将B设置为MIGRATING状态,开始迁移slot新节点,此时,如果有query请求slot:8到A,如果key存在则直接返回,否则,redirect到B,client收到moved指令,继续请求B。当然,还有ask模式,详细参考reference中redis-cluster。

优点:
缺点:

codis,类codis,bdrp2.0

  • proxy模式,client直接与proxy交互,proxy实现redis所有协议。
  • slot路由信息,存放在proxy自身或者第三方组件如etcd,zk等。
  • configServer,进行路由信息,和各个组件实例的配置server。
  • 感知后端redis实例,一般是用sentinal进行感知,通知configServer,proxy再更新路由。
  • smartClient。

优点:
缺点:

SMS-redis-cluster-proxy

refrence:
https://github.com/xetorthio/jedis/wiki/AdvancedUsage
https://redis.io/topics/cluster-spec
https://blog.csdn.net/u011535541/article/details/78834565
https://brandur.org/redis-cluster
https://www.imooc.com/article/3930
https://yangzhe1991.org/blog/2015/04/redis-cluster/
https://www.cnblogs.com/me115/p/9043420.html

你可能感兴趣的