实践中的顺序一致性

2020-07-19 00:29:18

在前端表现为异步Web请求,在后端表现为服务对服务通信,在系统编程中表现为SMP和线程安全。

考虑到第四维编程的无处不在,在构建块上进行扩展是有价值的。

其中一个块以一致性模型的形式出现:管理对共享资源的并发访问的特定规则。

随着对顺序一致性的关注,我想向您展示如何在分布式系统实践中使用此模型。

与一位前同事和朋友的一次谈话,围绕这个主题,影响了他写了一篇关于顺序一致性的很好的解释。

在上面引用的文章中,它解释说,在顺序一致性中,处理器可以查看任何交织中的其他处理器的写入,只要这些交织保持相同的顺序。

无效交错是由于Proc-1的写入不符合Proc-1的程序顺序造成的。

虽然对于两个处理器来说,提供的顺序一致性定义很容易遵循,但是当我们对分布式系统建模时,它会变得更加有趣。

在我们的分布式系统中,两个进程将向共享寄存器发出写入,另外两个进程将观察这些写入,然后发出读取。

Proc-1 proc-2 W(X)W(Y)W(Z)proc-3观察到:W(X),W(Z),W(Y),R()=>;y proc-4观察到:W(Y),W(X),W(Z),R()=>;z。

这里我们注意到proc-3和proc-4在共享寄存器的值上不一致,但这在顺序一致性上是合法的。

为了使顺序一致性在分布式系统中有用,必须提供另一种机制来确保所有进程都能看到相同的操作交织。

本幻灯片显示,所有写入都通过事务处理器馈送,以创建一个一致的顺序操作交错。

由于网络延迟,每个处理器可能会落后,看到比其他处理器更旧或更新的写入。

在设计分布式系统的实践中,顺序一致性需要某种机制来获得跨进程对共享寄存器的一致读取。

当提到分布式系统的顺序一致性时,通常表示的是处理器在观察更改之后,但最终以定义良好的总顺序看到所有更改的能力。

必须存在辅助机制,无论是专用进程、矢量时钟还是栅栏ID,以强制每个进程看到完全有序的事件序列。