我对这个话题有几个问题。例如,我找到了很多论文,如“Towards Dynamic Orchestration of Semantic Web Services”“Decentralized Orchestration of Composite Web Services”等等……但在实践中,我只发现了与 Bitztalk 或 ESB 相关的编排(我意思是大软件程序员)。
是否可以自己开发和编排语言?开发编排引擎的最佳方法是什么?
我对这个话题有几个问题。例如,我找到了很多论文,如“Towards Dynamic Orchestration of Semantic Web Services”“Decentralized Orchestration of Composite Web Services”等等……但在实践中,我只发现了与 Bitztalk 或 ESB 相关的编排(我意思是大软件程序员)。
是否可以自己开发和编排语言?开发编排引擎的最佳方法是什么?
也许有关编排的目的和应用的最佳信息来源是您引用的论文本身。
我们在 Firefox 上浏览网页,在 Microsoft Office 上键入文档。这些是集中式应用程序。这些类型的软件可以在一个地方放置和工作。他们在你的电脑上工作,他们在我的电脑上工作。
您去超市,取货并从众多收银台之一结账。每个办公桌的每个职员都有自己的条形码扫描仪和自己的刷卡器。这些柜台上的每个收银机都与某处密室中的一台服务器相连。在这种设置中,计费软件分布在店员的柜台上,但整个应用程序仍然是集中式的。服务器管理库存并记录销售额。它是集权的中心。
然后你写一封电子邮件并发送它。假设您从 Gmail 帐户向我的 Hotmail 帐户发送电子邮件。有Gmail的服务器,也有Hotmail的服务器。有两个中心,而不仅仅是一个。现在事情不再是中心化的——我们有一个分布式系统。在这里,一个中心的失败不会削弱整个系统。如果 Hotmail 出现故障,Gmail 仍然存在。
与其从当地超市购买,不如从网上商店购买东西。说 eBay 或亚马逊。在这个例子中,有 eBay 的服务器,也有 eBay 的供应商。供应商在他们自己的服务器上管理他们自己的库存,而不是在 eBay 的服务器上。还有快递公司将包裹送到买家手中。买家也有自己的服务器。买家通过万事达卡进行在线支付,这是另一个单独的服务器。现在我们谈论的是一个非常大的分布式系统。
既然您正在进行在线购买,那么就会发生很多事情,这需要的不仅仅是一堆服务器。必须有一个主 puppeteer 在这些服务器之间同步活动。必须扣除一个帐户。必须发送一封电子邮件。必须通知仓库。需要安排快递。谁控制了这种错综复杂的舞蹈?这是您的协调器。
大多数情况下,有许多不同且独立的服务器,每个服务器由不同的实体拥有。然而,当所有这些实体需要协同工作以创建业务流程、“用户交互会话”时,我们需要编排。
一组服务器之间的活动编排是通过一个主木偶服务器来实现的。实际上,编排器本身就是一组服务器。因此,一组服务器引导另一组服务器。第二组服务器是完成实际工作的地方。正在发送电子邮件。正在压缩图像。地址正在排序,等等。第一组服务器(编排器)确保事情按照它们需要发生的顺序发生。
一个答案:排队。开始整个故事的一项活动是尝试进行在线购买。从那里,你所做的点击,你发送的命令,都在这些编排服务器中排队。像purchase-this-item
ormake-a-payment
和 then这样的命令payment-received
都被排队,然后一个接一个地处理。
编排系统在一个线程上接受这些命令,在不同的线程上,编排服务器将它们异步分派到相应的工作服务器。因此,purchase-this-item
命令被分派到 eBay 的服务器,而make-a-payment
命令被分派到 MasterCard 的服务器。
工作服务器可能会产生更多命令。MasterCard 服务器在验证您的卡号后,可能会决定向您发送 SMS。因此它将send-sms
命令添加到队列中。该命令被分派到例如 Vodaphone 服务器。
这种排队和调度逻辑称为“编排引擎”。从那里开始,事情可能会变得复杂。Vodaphone 服务器可能处于脱机状态。万事达卡可能会拒绝该卡。仓库服务器可能会返回out-of-stock
响应。然后需要将该响应路由到 eBay 的服务器,该服务器可以将purchase
命令重新排队到某个不同的仓库。有服务器崩溃。磁盘故障。停电等等。
编排是为了确保这么多不同的组件,分布在不同的地理位置,在不同的时间点,有些是并行的,有些是错误的,有些是缓慢的,有些是恶意的,有些是非法的,......您通过互联网购买的耳机。