用于检测异步分布式流程以便以后重建流程的良好模式/实践?

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

要回复问题请先登录注册