Redis中的代理Sharding

典型的代理分区方案有Twitter 开源的Twemproxy 和国内的豌豆荚开源的Codis。

Twemproxy

two-em-proxy

https://github.com/twitter/twemproxy

Twemproxy 的优点:比较稳定,可用性高。

不足:

1、出现故障不能自动转移,架构复杂,需要借助其他组件(LVS/HAProxy + Keepalived)实现HA

2、扩缩容需要修改配置,不能实现平滑地扩缩容(需要重新分布数据)。

Codis

https://github.com/CodisLabs/codis

Codis 是一个代理中间件,用Go 语言开发的。

功能:客户端连接Codis 跟连接Redis 没有区别。

 CodisTewmproxyRedis Cluster
重新分片不需要重启YesNoYes
pipelineYesYes 
多key 操作的hash tags {}YesYesYes
重新分片时的多key 操作Yes-No
客户端支持所有所有支持cluster 协议的客户

分片原理:Codis 把所有的key 分成了N 个槽(例如1024),每个槽对应一个分组,一个分组对应于一个或者一组Redis 实例。Codis 对key 进行CRC32 运算,得到一个32 位的数字,然后模以N(槽的个数),得到余数,这个就是key 对应的槽,槽后面就
是Redis 的实例。比如4 个槽:

Codis 的槽位映射关系是保存在Proxy 中的,如果要解决单点的问题,Codis 也要做集群部署,多个Codis 节点怎么同步槽和实例的关系呢?需要运行一个Zookeepe(r 或者etcd/本地文件)。

在新增节点的时候,可以为节点指定特定的槽位。Codis 也提供了自动均衡策略。

Codis 不支持事务,其他的一些命令也不支持。

不支持的命令

https://github.com/CodisLabs/codis/blob/release3.2/doc/unsupported_cmds.md

获取数据原理(mget):在Redis 中的各个实例里获取到符合的key,然后再汇总到Codis 中。

Codis 是第三方提供的分布式解决方案,在官方的集群功能稳定之前,Codis 也得到了大量的应用。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值