redis 具备Cluster功能后,Redis从一个单纯的NoSQL内存数据库变成了分布式NoSQL数据库,CAP模型也从CP变成了AP。也就是说,通过自动分片和冗余数据,Redis具有了真正的分布式能力。某个结点挂了,因为数据在其他结点上有备份,所以其他结点可以继续提供服务,保证了Availability。然而,也正因为这一点,Redis无法保证曾经的强一致性了。这也是CAP理论要求的,三者只能取其二。
5.1. redis cluster设计目标
在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:
1、性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P,而非Proxy方式,客户端重定向,异步复制,即Master与slave之间使用异步replication,且不存在操作的merge(即操作不能跨多个nodes,不存在merge层)等设计。牺牲了部分的一致性。
2、水平扩展:集群的最重要能力当然是扩展,redis cluster 文档描述可以线性扩展到1000结点。
3、数据一致性:一定程度上保证writes的安全性,需要客户端容忍一定程度的数据丢失。集群将会尽可能(best-effort)保存客户端write操作的数据;通常在failover期间,会有短暂时间内的数据丢失(因为异步replication引起)ÿ