Nip*_*mal 7 high-availability consistency nosql redis key-value-store
在CAP定理中,Redis被指定为缺乏可用性(具有分区容错性和一致性)的数据库。
但是在很多地方,Redis 被认为是一种高可用的键值存储。
什么是对的?如果您能提供深入的答案,我将不胜感激。
Vik*_*wat 11
我首先要说没有“CA”类别。大多数系统在没有网络分区的情况下都是 CA。
CAP 定理适用于分布式数据存储,并在网络分区 (P) 发生时生效。它表示当 (P) 发生时,分布式数据存储必须在一致性 (C) 或可用性 (A) 之间进行选择。
即当 P 发生时,要么是 PA 要么是 PC。
RDBMS 曾经是 PC,但随着时间的推移,它们也开始支持 PA。
具体到 Redis,高可用性不仅仅是分区容错。Redis 采用 Master Slave 架构,如果 Master 出现故障,Redis Sentinels 会提升一个 Slave 为新的 Master,从而使整个解决方案具有高可用性。由于多种原因(例如内存不足),master 可能会失败(或变得不可用),这不一定是由于网络分区。
然后是网络分区 (P) 的情况,如果 (P) 发生,那么 Redis 在少数分区中变得不可用。这就是为什么从 CAP 的角度来看,Redis 是 CP,因为它在少数分区中变得不可用。请注意,它仍将在多数分区中可用。
您可以在此处阅读有关Redis 高可用性的更多信息。有关分区的详细信息,请参阅标题为“分区下的一致性”的段落。
Redis 也称为最终一致,因为当 (P) 发生时,少数分区仍然可用几秒钟,并且在此期间对少数分区所做的任何写入最终都会被丢弃。
小智 8
据《Redis Essentials》一书第170页\xef\xbc\x9a
\n\n\n由于Redis Sentinel和Redis Cluster都是分布式系统,因此使用CAP定理来分析它们是公平的。分布式系统中网络分区是不可避免的,所以要么保证一致性,要么保证可用性;也就是说,它应该是 CP 或 AP。
\n
\n\n理论上,Redis Sentinel 和 Redis Cluster 在网络分区下既不一致也不可用。但是,有一些配置可以最大程度地减少一致性和可用性问题。\n它们无法提供可用性,因为需要有法定人数就主选举达成一致,并且根据法定人数的决定,系统的一部分可能会变得不可用。
\n
\n\n它们无法在网络分区下提供一致性,例如,当两个或多个分区同时接受写入时。当网络修复并且分区连接时,其中一些写入将丢失(冲突不会自动解决,也不会向客户端公开)。
\n
希望这会对您有所帮助。在线书籍:\xef\xbc\x88https://subscription.packtpub.com/book/big_data_and_business_intelligence/9781784392451/9/ch09lvl1sec52/the-cap-theorem\xef\xbc\x89
\n