我们有微服务,每个微服务都生成事件,这些事件由事件源存储库存储。我们使用Cassandra存储事件数据。
您可能知道,事件的顺序很重要。
当我们从运行在不同机器上的不同服务生成这些事件时,如何管理这些事件之间的时间(时间戳)不同步,从而导致事件顺序不匹配。
您可能知道,事件的顺序很重要。
在某些情况下-但您要注意不要混淆时间,顺序和相关性。
当我们从运行在不同机器上的不同服务生成这些事件时,如何管理这些事件之间的时间(时间戳)不同步,从而导致事件顺序不匹配。
放弃在不同地方发生的事件具有“顺序”的想法。 There is no now。
商业世界中race conditions的Udi Dahan:
时间上的微秒差异不应改变核心业务行为。
如果您的微服务边界是正确的,那么在两个不同的服务中大约同时发生的事件是重合的-它们没有一个正确的顺序,因为(类推)它们在不同的光锥中。唯一固有的顺序是在单个聚合事件历史记录中的顺序。
真正有意义的是跟踪原因;记录簿中的这些更改是对该记录簿中那些更改的反应。
此的一种简单形式是跟踪happens-before,这是vector clocks之类的想法开始出现的位置。
在我所看到的大多数讨论中,此信息将作为记录的事件的元数据传递。
通常通过vector clocks完成此操作:
向量时钟是一种用于在分布式系统中生成事件的部分排序并检测因果关系违规的算法。
保护写入,即在进行另一次写入之前确保微服务实例与所有相关事件保持最新。
在这种情况下,请查看lightweight transactions,可用于在Cassandra中实现optimistic locking。This talk by Christopher Batey是一个很好的开始。