是否可能自己开发编排语言?开发编排引擎的最佳方法是什么?
关于编排的用途和应用程序,最好的信息来源是您引用的论文本身。
我们在Firefox上浏览网页,在Microsoft Office中键入文档。这些是“集中式”应用程序。此类软件坐落在一个地方并从那里工作。它们在您的计算机上工作,也在我的计算机上工作。
你去超市,拿起一件商品,在“众多”收银台之一结账。每个工作台的职员都有自己的条形码扫描仪和自己的刷卡读卡器。这些柜台上的每个收银机都连接到后面的一个服务器。在这个设置中,结帐软件分布在店员的柜台上,但整个应用程序仍然是集中式的。服务器管理库存并记录销售情况。这是“集中化”的“中心”。
然后你写一封电子邮件并发送它。假设你从Gmail帐户向我的Hotmail帐户发送电子邮件。有Gmail的服务器和Hotmail的服务器。现在有了“两个中心”,而不仅仅是一个。现在事情不再是集中式的了 - 我们有一个“分布式”系统。在这里,一个中心的失败不会瘫痪整个系统。如果Hotmail崩溃,Gmail仍然存在。
与从本地超市购买不同,从在线商店购买某些东西。比如eBay或者亚马逊。在这个例子中,有eBay的服务器,还有供应商提供给eBay的商品。供应商在自己的服务器上管理自己的库存,而不是在eBay的服务器上。还有将包裹送到买家的快递公司。买家也有自己的服务器。买家所做的在线支付是通过MasterCard另一个独立的服务器进行的。现在我们正在谈论一个真正大的分布式系统。
现在您正在进行在线购买,需要处理许多事情,这需要不止一堆服务器。必须有一个主要的操纵者来协调这些服务器之间的活动。账户必须扣除款项。必须发送电子邮件。必须通知仓库。必须安排快递。谁掌控这个复杂的舞蹈?这就是您的 orchestrator。
大多数时候,有许多不同的独立服务器,每个服务器由不同的实体拥有。然而,当所有这些实体需要共同合作创建业务流程、"用户交互会话"时,我们需要 orchestration。
通过一个主要的操纵服务器来协调一组服务器中的活动,即编排。实际上,orchestrator 本身就是一组服务器。因此,一个服务器集合指导另一个服务器集合。第二组服务器是实际工作正在进行的地方。例如,正在发送电子邮件、压缩图像、排序地址等等。第一组服务器(orchestrator)确保按照需要发生的顺序发生。
其中一个答案:队列。启动整个故事的活动是尝试进行在线购买。从那里开始,你所做的点击、所发送的命令都排队在这些 orchestration 服务器上。命令,例如 purchase-this-item
或 make-a-payment
然后 payment-received
都是排队并依次处理的。
编排系统在一个线程上接受这些命令,而在另一个线程上异步地将这些命令分发到各个工作服务器上。因此,purchase-this-item
命令被分派给 eBay 的服务器,而 make-a-payment
命令被分派给 MasterCard 的服务器。
工作服务器可能会产生更多的命令。MasterCard 服务器在验证您的卡号后,可能决定向您发送短信。因此,它向队列中添加了一个 send-sms
命令。该命令被分派到 Vodaphone 的服务器上。
这种排队和调度逻辑被称为“编排引擎”。从那里开始,事情可能会变得复杂。Vodaphone服务器可能离线。MasterCard可能会拒绝使用该卡。仓库服务器可能会返回一个“out-of-stock”响应。那么该响应将需要被路由到 eBay 的服务器,该服务器可以重新将“购买”命令排队到不同的仓库。还有服务器崩溃、磁盘故障、停电等问题。
编排旨在确保许多不同的组件,在不同的时间点、地理位置分布、一些并行、一些故障、一些缓慢、一些恶意、一些非法等各种情况下协同工作,以便让你通过互联网购买到该死的耳机。