“Redis专场:Codis 集群演化与 Redis 异步迁移,阿里巴巴”
在本次分享中,王乃峥作为Codis的作者之一,讲述了 Codis 集群的发展历程以及它如何应对Redis的异步迁移挑战。 Codis 是一个针对Redis的分布式解决方案,旨在解决Redis在大规模场景下的水平扩展、高可用等问题。
Codis 集群演化的背景与挑战主要体现在以下几个方面:
1. 早期采用Redis+Twemproxy的方式,从2012年到2015年,但这种方式存在扩展性不足的问题。
2. RedisCluster虽然在2010年就已经存在,但在2015年前,其平滑扩容和兼容性等方面存在局限。
3. Codis从2015年开始逐渐成熟,提供了兼容所有语言客户端的访问方式,保证了高性能,支持Pipeline,可处理百万级QPS,并且支持从GB到TB的水平扩展能力。
对比RedisCluster和Codis,我们可以看到:
- 扩容缩容:两者都支持,但Codis支持平滑扩容,而RedisCluster不支持。
- Pipeline:Codis支持,而RedisCluster不支持。
- Database和Password:Codis提供,RedisCluster则没有。
- MGET/MSET和PUB/SUB:RedisCluster基于SLOT,Codis不支持。
- Transaction:两者都不支持跨SLOT操作。
在架构设计上,Codis的优势在于其简单、模块化、稳定、扩展性强和易于维护的架构,但也存在组件多、部署复杂、中间件性能损失以及部分功能牺牲的劣势。
Codis的一些关键特性包括:
- 高吞吐:通过指令流水线和优化GC来提高效率。
- 并发多连接:支持单连接的Redis和多连接的SSD(如RocksDB)。
- 多DB支持:默认提供16个数据库,实现访问控制。
- 读写分离:为了优化跨机房的性能,牺牲一致性,写操作在主节点,读操作优先选择同IP,其次同DC,最后跨DC。
- 高可用: Codis确保系统的稳定运行,是其核心目标。
未来规划中, Codis将继续兼容Redis,升级到Redis-4.2版本,最小化改动,同时兼容分片策略,调整SLOT数量和分片算法。此外,还将完善Codis本身的功能,并加强与Kubernetes(K8S)的集成,提升自动化程度。
Codis作为一款强大的Redis分布式解决方案,通过不断演进和优化,旨在提供更高效、稳定和易用的服务,以适应日益增长的数据存储和处理需求。