【问题标题】:Redis availability and CAP theoremRedis 可用性和 CAP 定理
【发布时间】:2019-12-28 13:22:00
【问题描述】:

在 CAP 定理中,Redis 被指定为缺乏可用性(具有分区容错性和一致性)的数据库。

但有很多地方将 Redis 视为高可用性键值存储。

什么是对的?如果您能提供深入的答案,我将不胜感激。

【问题讨论】:

    标签: redis nosql high-availability key-value-store consistency


    【解决方案1】:

    我首先要说没有“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 在少数分区中变得不可用”,你说的少数分区是什么意思?
    • 假设发生网络分区,在一个分区中您有 1 个 Master 和 1 个 Sentinel,而在另一个分区中,您有 2 个 Slave 和 2 个 Sentinel。那么前者是少数派。
    • @Alex 希望它澄清。
    • 啊,我明白了,我通过您的链接阅读了“分区下的一致性”部分,看看您现在的意思,谢谢
    【解决方案2】:

    根据《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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多