V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
petelin
V2EX  ›  问与答

有没有学术大佬, 判断一下我对 CAP 的应用是不是对的

  •  1
     
  •   petelin · 2019-10-09 17:56:14 +08:00 · 980 次点击
    这是一个创建于 1632 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

    按照论文里的证明的定义, CAP 描述的是一个非常简陋且特殊的分布式系统.

    那么

    • 单机数据库可以用 CAP 来分析吗? 比如单机 MySQL 可以说是 CA 的吗?
    • 在一个读写主库, 只读从库的 MySQL 集群里, 如果发生了分区那么
      • 依然允许读写从库 -> 肯定不一致, 但是因为从库没办法给出正确的信息(只有老数据)所以他也是"不可用的"
      • 不允许写数据了 -> 那么他是一致的, 但是不可用. (这种没任何价值)

    求教我这种理解是对的吗?

    5 条回复    2019-10-09 18:30:58 +08:00
    misaka19000
        1
    misaka19000  
       2019-10-09 17:59:32 +08:00   ❤️ 1
    依然允许读写从库 -> 肯定不一致, 但是因为从库没办法给出正确的信息(只有老数据)所以他也是"不可用的"

    这里可用啊,只是不一致,符合 AP
    petelin
        2
    petelin  
    OP
       2019-10-09 18:09:19 +08:00
    @misaka19000 从我读文章到的意思,
    > A(可用) 指的是客户端能够访问的节点一定要给出正确的结果

    访问从库给出的是旧的数据所以不是论文里描述的 A.
    我能理解你说的可用是整个系统没挂, 但是这个和论文里说的不是一回事
    petelin
        3
    petelin  
    OP
       2019-10-09 18:11:47 +08:00
    typo
    依然允许读写从库 改为 依然允许读写主库
    misaka19000
        4
    misaka19000  
       2019-10-09 18:15:10 +08:00
    > A(可用) 指的是客户端能够访问的节点一定要给出正确的结果

    这个是在论文的哪部分表达的呢?
    petelin
        5
    petelin  
    OP
       2019-10-09 18:30:58 +08:00
    @misaka19000 定义是
    every request received by a non-failing node in the system must result in a response

    这里说的就不够清楚然后你看他证明的时候
    如果有一个 CAP 都满足的系统, 那么我们先写 V1 到 G1,因为 A 所以成功了, 我们在访问 G2, G2 按照一致性应该给出 v1 这个值, 然而他给出来的是 V0 所以自相矛盾.

    ----------
    啊 我发现自己犯的错误了, 给出来 V0 并不适合不满足 A, 而是因为在一致性的前提他给出来 V0 是错误的.

    多谢多谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3174 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:25 · PVG 20:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.