【问题标题】:Is two phase commit an implementation of linearizability?两阶段提交是线性化的实现吗?
【发布时间】:2020-02-29 01:35:55
【问题描述】:

据我了解,两阶段提交的大多数实现都要求系统的所有节点在本地提交之前就值达成一致,并且只有在它们都在本地提交之后才能响应客户端 - 这是对 2PC 的正确理解吗? ?

这是否使 2PC 成为可线性化顺序一致性模型的实现?

我在想,因为返回给客户端的值永远不会过时,而且它是实时发生的,这意味着它是真正可线性化的,对吧?

我从来没有听说过 2PC 被描述为可线性化,所以我认为这里有些东西我误解了。

【问题讨论】:

    标签: distributed-computing distributed consistency


    【解决方案1】:

    不必如此,并且有许多更好的算法可以在崩溃故障中幸存下来(2PC 没有)。也就是说,您可以使用两阶段提交来帮助实现线性化或强序列化。

    “返回给客户端的值永远不会过时,并且是实时发生的”语句完全忽略了缓存和队列的存在,它们很容易让您从过去读取或写入未来,所以请注意为此。

    【讨论】:

    • 所以我对 2PC 的解释过于简单化了,现实世界的实现可能包含一些细微差别,这些细微差别会使它们无法线性化,对吧?我假设的 2PC 是否经常不存在于现实世界的系统中?
    • 2PC 比 raft/paxos/... 的容忍度更低(不处理任何类型的故障)和更慢(需要所有各方的回复,而不是例如多数)...但它更简单.我不知道任何使用 2pc 的实际生产就绪系统。仅仅一个丢弃的数据包可以使整个系统死锁,需要不安全的手动重启,这一事实就足以在现实世界的系统中永不使用。
    • 好吧,oracle声称有2PC实现,那么这不是真正的2PC吗? docs.oracle.com/cd/B28359_01/server.111/b28310/…
    • 我敢打赌它不能处理丢包或服务器崩溃。在文档中找不到任何有关失败的信息。出于营销/业务原因,通常最好实现众所周知但无用的功能,以防有人在选择产品时将其列入需求清单。
    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2011-11-24
    • 2013-05-21
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多