【发布时间】:2019-12-28 13:22:00
【问题描述】:
【问题讨论】:
标签: redis nosql high-availability key-value-store consistency
【问题讨论】:
标签: redis nosql high-availability key-value-store consistency
我首先要说没有“CA”类别。大多数系统在没有网络分区的情况下都是 CA。
CAP 定理适用于分布式数据存储,并在网络分区 (P) 发生时生效。它表示当 (P) 发生时,分布式数据存储必须在一致性 (C) 或可用性 (A) 之间进行选择。
即当 P 发生时,它将是 PA 或 PC。
RDBMS 曾经是 PC,但随着时间的推移,它们也开始支持 PA。
具体到 Redis,高可用性不仅仅是分区容错。 Redis 具有 Master Slave 架构,如果 Master 失败,Redis Sentinel 会将 Slave 提升为新的 Master,从而使整个解决方案具有高可用性。由于多种原因(例如内存不足),主服务器可能会失败(或变得不可用),这不一定是由于网络分区。
然后是网络分区(P)的情况,如果(P)发生,那么Redis在少数分区中变得不可用。这就是为什么从 CAP 的角度来看,Redis 是 CP,因为它在少数分区中变得不可用。请注意,它在多数分区中仍然可用。
您可以阅读有关Redis High Availability here 的更多信息。有关分区的详细信息,请参阅标题为“分区下的一致性”的段落。
Redis 也被称为最终一致,因为当 (P) 发生时,少数分区仍然可用几秒钟,并且在此期间对少数分区所做的任何写入最终都会被丢弃。
【讨论】:
根据《Redis Essentials》一书第170页:
由于 Redis Sentinel 和 Redis Cluster 是分布式系统,使用 CAP 定理分析它们是公平的。网络分区在分布式系统中是不可避免的,因此它应该确保一致性或可用性;也就是说,它应该是CP或AP。
理论上,Redis Sentinel 和 Redis Cluster 在网络分区下既不一致也不可用。但是,有一些配置可以最大限度地减少一致性和可用性问题。 它们无法提供可用性,因为有一个法定人数需要就主选举达成一致,并且根据法定人数的决定,系统的一部分可能会变得不可用。
它们无法在网络分区下提供一致性,例如,当两个或多个分区同时接受写入时。当网络恢复并加入分区时,其中一些写入将丢失(冲突不会自动解决,也不会暴露给客户端)。
希望对你有所帮助。在线书籍:(https://subscription.packtpub.com/book/big_data_and_business_intelligence/9781784392451/9/ch09lvl1sec52/the-cap-theorem)
【讨论】: