3
SOA服务组合实际上在实践中有效吗?
SOA主要服务设计原则之一是服务可组合性原则(https://en.wikipedia.org/wiki/Service_composability_principle)。 这个想法是,通过使用现有服务作为构建模块来组合新服务,可以迅速开发新服务。类似于实现新方法时如何调用对象的现有方法。这就是SOA可以大大提高生产力的地方。 实际上有人真的这样做吗?我已经在书面文本中看到了无休止的重复,但是我自己还没有在现实世界中工作的经验。本书的大部分内容都没有提及事务处理,这在我看来是实现可组合服务的最大障碍。 首先,在组成任何非平凡的服务之前,您确实确实需要解决交易问题。当然,如果该示例具有服务“ findCurrentTime()”和“ writeLogMessage()”,则很容易不必担心事务,但是在具有诸如“ depositMoney()”和“ withdrawMoney()”之类的真实示例时则不必担心。 我知道两个选择: 使用WS-Atomic Transaction或类似工具实施真实交易 实施基于补偿的解决方案,使用“ cancelA()”或类似方法补偿对A的调用,如果对B的调用失败 这两个问题似乎都非常棘手/对我来说几乎无法使用: WS-原子交易 一个很大的复杂性,大多数的建议,我发现只是警告“疼痛的屁股,不这样做” 支持是有限的,例如,如果您使用开源ESB,则主要替代产品ServiceMix,Mule或WSO2不支持它 赔偿金 对我来说,实施赔偿处理似乎很复杂。如果服务A成功并且我们从未从服务B得到答案并且不知道它是失败还是成功,我们该怎么办?手动处理这种逻辑(作为合成服务的实现者)使我想裂开手腕-这是某些工具应该为我完成的工作! 我也看不到如何在非平凡的服务中使用补偿方法。假设您的服务A是“ depositMoney()”,并且成功,其他一些操作很快将钱转移到其他地方,然后我们收到“ compensateDepositMoney()”,我们现在该怎么办?好像一大罐蠕虫。 在我看来,服务组合是SOA的一项基本原则,如果您不能(方便地)组合服务,那么您真的无法获得SOA的好处。现实是什么?90%的SOA用户在没有实际服务组合的情况下使用“ crispled SOA”?还是大多数用户实际上使用服务组合,而我却夸大了它的难度?