用户发送写请求。然后,有人发送对该资源的读取请求。读请求在写请求之前到达,因此读请求数据是陈旧的,但尚无法得知它是陈旧的。同样,您也可能有两个对同一资源的写请求,但后来的写请求首先到达。
当发生类似竞争的情况时,如何在分布式系统中提供强大的一致性?
什么是一致性?您说两次写入“乱序”到达,但是确定该顺序的是什么?建立该顺序的是您保持一致性的基础。
简单的依据是世代号;因此,任何对象O都会以版本N进行扩充。检索O时,也会检索N。写入时,将写入O.N。如果在写入O.N时对象位于O.N + 1,则该对象已过期并产生错误。 O的多个版本在一段时间内仍然可用。
当然,您不能在任何分布广泛的系统中随便复制该对象,因为O的两个断开连接的所有者可能允许不同的操作,这些操作无法统一。例如,Etcd在有限的时间内就解决了这一问题。区块链可以更广泛地解决它。