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

时间:2017-11-03 05:45:18

标签: hash microservices stateless revision-history

我有一个带有很多无状态微服务的应用程序,它将它们的变量上下文传递给另一个。当我开始使用具有相同上下文的几个服务链然后等待它们完成时,我遇到了一个案例。每个服务都可以修改其变量上下文,但是在完成所有链之后,我必须合并它们的变量上下文并确保没有冲突。

以下示例中说明了这一点: incorrect example correct example

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

我看到的另一个解决方案是找到一些哈希函数,它允许通过现有哈希值和新数据计算修改历史记录的哈希值,还可以通过了解哈希值来检查一个历史数据是否是另一个历史数据的前缀只要。但我无法找到这样的功能。

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

2 个答案:

答案 0 :(得分:1)

您需要的是Version clocks,这是一个古老的想法,可用于合并并行数据修改和检测冲突。

  

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

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

答案 1 :(得分:0)

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

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

稍后您甚至可以扩展处理队列的工作人员。