简要说明:我正在寻找让分布式业务流程发出跟踪信息的最佳方法,这样我就可以重建多应用程序,异步流程,同时保持流程的层次结构和业务顺序不变,而不需要消费者数据以深入了解流程,或者每个应用程序都知道他们是更大流程的一部分。
我们有几个业务流程跨多个分布式应用程序异步运行。我们希望每个应用程序以标准格式发出应用程序跟踪/日志记录数据,这将允许以正确的顺序重建任何这些进程的任何给定实例,即使这些进程的某些部分是异步的和/或并行发生,一个客户可以访问原始数据,但没有关于流程中实际步骤的智能,这当然会随着时间的推移而改变。
我们已经有一个服务总线类型的应用程序,可以收集和转发这些数据。我只是想确定一个很好的方法来对这些事件进行包装,以便按正确的顺序将所有部分重新组合在一起。
例如,假设这是Process#1
因此,如果每个应用程序使用其应用程序编号发出事件,只需按时间戳或序列ID对这些事件进行排序可能会显示步骤
这会丢失层次结构,并使得5在此过程中出现的时间早于4,这在时钟上是正确的,但对业务来说是错误的。我真正想要的是一个看起来像这样的痕迹:
其他要求:
我认为我有一个可行的解决方案,但想得到反馈和/或看看这是否是一个我已经解决的问题。我的想法是让每个应用程序采用一个新的可选“X-Trace-Hierarchy”标题(它们都是自定义Web应用程序,几乎所有RESTful)代表以点分隔的整数列表,如大纲中所示。如果应用程序收到此标头,它会在其工作时附加自己的层次结构,包括调用子应用程序。应用程序中的步骤作为兄弟姐妹添加到层次结构中,每次递增1,并且对外部服务的调用将作为子项添加。因此,上述流程的传入X-Trace-Hierarchy
标头如下所示:
X-Trace-Hierarchy: (not sent, will default to 1)
X-Trace-Hierarchy: 2
X-Trace-Hierarchy: 2.1
X-Trace-Hierarchy: 2.1.1
X-Trace-Hierarchy: 3
现在,如果我为给定的会话获得一堆跟踪步骤,我可以明确地重建逻辑顺序,无论它们发生的实际时间顺序如何,并且没有任何期望或知道什么那个顺序应该是。实际上,对App 3的调用不属于此过程,将产生:
X-Trace-Hierarchy: (not sent, will default to 1)
X-Trace-Hierarchy: 1.1
所以每次生成的层次结构总是从该进程实例所采取的特定步骤流出,并且每次都可能不同,但它将允许相对“哑”的客户端从该数据重建任何任意进程。
是的,这需要更新每个应用以使用X-Trace-Hierarchy
,并且它假定有保证的发送事件的传递,但我很好。否则我无法想到这种方法的问题,也没有更好的方法来做到这一点。但是,如果可以的话,互联网,请告诉我。