我有一个实时程序,该程序对服务A进行网络调用以执行有状态操作,而对服务B进行网络调用以记录该操作的历史记录。唯一的问题是:
我有一些想法,没有一个是理想的:
有什么解决方案可以使日志的完整镜像满足100%正确性的要求?
答案 0 :(得分:1)
您没有提到所有服务都在通信的协议,因此,我假设使用HTTP。
就像您说的那样,所有可能的解决方案似乎都不适合您。
对于服务而言,在状态检查之前或之后更改状态太容易了,就像您说的那样,此后的任何补救措施也很容易失败。
我认为在您概述了两阶段提交的情况下,这是不可能的。即使您确实拥有所有服务,也很难仅使用HTTP来实现此目的。
我同意
在所有选项中,此选项都有其分支。这完全取决于您对“实时”的要求。每当有人这样说时,我会问“你是什么意思?”没有什么是“实时”的,一切都需要一些时间来处理。总是有一段时间,某人或某事要求完成某件事才真正完成!毫秒秒和分钟之间的差异只是一个问题或要求,您还需要投入多少钱。
因此,您说通过HTTP调用您的服务(简称为X)再次通过HTTP分别成功调用了两个服务A和B。如果您同时有多个对X的调用,则无法(或至少很难做到)确保对A的调用顺序与对B的调用顺序相同。但这又取决于您的要求和要求系统正在运行以及如何运行,也许每天只有一个电话打给您的系统?
我个人建议使用队列,并转向事件驱动的体系结构。即使使用了最终一致的系统,您也可以使其运行在热状态并获得所需的“实时”,这只会使您付出更多!
我希望这对您有用。听到您对我的建议的想法,我非常感兴趣。