如何确保仅从一侧修改变量

How to ensure that the variable was modified from only one side

我有一个包含很多无状态微服务的应用程序,这些微服务将它们的变量上下文相互传递。我有一个案例,我并行启动几个具有相同上下文的服务链,然后等待它们完成。每个服务都可以修改它的变量上下文,但是在所有链完成后我必须合并它们的变量上下文并确保没有冲突。

在下面的示例中进行了说明:

可以通过存储变量修改的整个历史来解决这个问题,但这是一个巨大的数据开销,我想避免。

我看到的另一个解决方案是找到一些散列函数,它可以通过现有散列和新数据计算修改历史的散列,还可以通过知道来检查一个历史数据是否是另一个历史数据的前缀只有他们的哈希值。但是我找不到这样的功能。

我正在寻找具有尽可能少的数据开销的任何适用算法。

实际上,存储变量修改的整个历史听起来并不太糟糕。例如,您可以将修改信息放入一个队列,然后,有一个服务可以一次处理一批元素并将结果放在一个地方。

这是一种常见的做法,例如,在并行工作量很大并且您无法通过锁定仅同步访问一个地方的情况下。

以后您甚至可以扩展处理队列的工作线程。

你需要的是Version clocks,一个可以用来合并并行数据修改和检测冲突的老想法。

It's possible to solve this problem by storing the whole history of variable modifications, but it's a huge data overhead which I'd like to avoid.

使用矢量时钟,您不会保留整个历史记录,而是为每个 variable 和节点保留一个计数器(因此每个 variable 都有一个计数器向量)。