编排与消息驱动架构

Posted

技术标签:

【中文标题】编排与消息驱动架构【英文标题】:Orchestration vs Message Driven Architecture 【发布时间】:2010-11-18 21:21:15 【问题描述】:

编排引擎与消息驱动系统的职责是什么。

如果我必须构建一个系统,该系统必须将不同的独立组件(不需要暴露 Web 服务端点的跨技术/平台组件)串在一起,那么要选择哪个工具集?

还有更好的选择吗?

【问题讨论】:

【参考方案1】:

将 openESB 与 netbeans 编辑器或任何其他提供标准方式或编排流程的开源 BPEL 引擎一起使用。如果您认为性能比标准化更重要,您可以尝试一些专有的 ESB 或 BPM 工具,例如 Jboss jBPM 或 mule ESB 等。

请注意,如果您的组件不是 Web 服务,则 BPEL 只能用于使用 Web 服务,那么您可能必须使用像 Mule 这样的 ESB,它可以支持大约 200 多种带有扩展的协议。

【讨论】:

【参考方案2】:

在决定是否应该使用编排或消息导向工作流时,您面临的一个大问题是,您认为是否有必要定期更改编排工作流。如果您认为业务流程需要灵活,因为它可能会发生变化,那么采用规范消息格式并使用编排,这将最大限度地减少服务之间关系变化的影响。如果您认为工作流程稳定,您可以采用消息驱动的工作流程。就我个人而言,我认为编排是总体上更好的方法,但它确实需要更多的软件基础架构,而使用 Apache Camel 等工具,投资是时间与增加长期灵活性的回报。

【讨论】:

【参考方案3】:

虽然这个问题被标记为 Java,但如果你真的必须走这条路,恐怕我见过的最好的工具是 Microsoft's BizTalk Server。

当我不得不对这类产品进行评估时(这是几年前的事了),它的主要特点是:

Visual Studio 作为开发环境 很好的可视化工具来描述工作流和转换 用于连接参与者的可扩展连接器架构 具有出色实时报告功能的强大工作流引擎

最终我们选择保持简单并采用消息传递路线,尽管这确实需要您控制所有参与者,但情况可能并非如此。

【讨论】:

【参考方案4】:

我建议您首先通过网络将单个独立组件公开为服务(我不明白您是否已经为此提供了网络服务)。 之后..最佳选择取决于您的系统工作负载/复杂性。

基本上,您可以在服务编排和编排之间进行选择。使用 BPM/BPEL/ESB 制作的服务编排是一种架构选择,其中单个组件(服务编排器/服务编排器)知道需要执行哪些步骤,并负责以正确的顺序调用服务(在编排器本身上配置) .它还处理事务管理(如果需要)。

相反的是编排,实际上构成整个系统的每个服务都知道在收到特定消息时如何采取行动。实际上,这是各个组件之间的协议问题。服务编排它是一种去中心化的方法来解决服务组合问题。

如果您有很多服务、复杂的规则等等...使用 jBPM 之类的服务编排器或类似的东西可能会更容易。

【讨论】:

以上是关于编排与消息驱动架构的主要内容,如果未能解决你的问题,请参考以下文章

软件架构入门-分层架构、事件驱动、微服务架构和云原生架构

EDA 事件驱动架构与 EventBridge 二三事

阿里云 EventBridge 事件驱动架构实践

EDA 事件驱动架构与 EventBridge 二三事

阿里云 EventBridge 事件驱动架构实践

ONAP — 编排的核心:模型驱动