最近我和我们的一位架构师进行了一次交谈,他总结了自己对SOA的应用:“只有在需要异步操作时我们才会使用服务,否则我们直接访问数据存储。”
我思考了这个陈述,它似乎相当合理,因为服务在发布-订阅模型中工作得很好,但我想知道在什么其他情况下你应该考虑使用SOA?
最近我和我们的一位架构师进行了一次交谈,他总结了自己对SOA的应用:“只有在需要异步操作时我们才会使用服务,否则我们直接访问数据存储。”
我思考了这个陈述,它似乎相当合理,因为服务在发布-订阅模型中工作得很好,但我想知道在什么其他情况下你应该考虑使用SOA?
另一个使用服务的情况是当您想要集成异构技术堆栈时。
换句话说,如果您的数据库是postgres,但您的代码是Java、Perl、Python和C++,您可以编写存储过程,并让每种编程语言调用这些存储过程。如果您正在使用没有存储过程的数据库,或者您想要切换这些功能,或者您只想在端口80上运行,您可以将SQL调用包装在面向服务的层中(思考websphere),现在任何人都可以调用它 - 此外,您还可以将身份验证和授权逻辑(连接到LDAP等)放在SOA层中。
您还可以使用该SOA层来构建逻辑例程,以便对那个管理发票或为客户创建报表的旧COBOL框进行“操作”。
因此,如果您有多个遗留系统要互连-例如将销售系统与仓储系统连接到订单预测系统-SOA可能是实现该目标的一种方式。(您还可以使用“服务总线”创建事件驱动系统作为更好的编排变更的方式。)
只是我在说话。
有许多场景可以从使用服务中受益,其中一些场景已被行业大师(如SOA的Thomas Erl)所规范。
我认为你应该寻找以下内容:
你的同事对谨慎持保留态度是正确的。采用Web服务会引入许多部署和支持变量。
另一个场景可能是集成场景,您希望许多单独的组件或系统彼此通信。
SOA可以作为一种隐藏子系统实现细节的方式。例如,如果您的客户需要产品信息,将产品数据库或库存子系统封装成通用服务,并仅公开客户所需的功能和数据子集可能是一个好主意。然后,如果您需要替换或升级该子系统,您将能够对用户和客户面向软件界面进行透明更改。
整合不同的技术来访问相同的资源;在这些不同的技术上实现一定程度的事务隔离;将一个业务逻辑写在一个地方以保持一致(这样当需要更改该逻辑时就不会出现噩梦)...
如果要在组织内部以及可能扩展到其他组织的系统中使用SOA。
对于可能会发生变化的产品,这也是不错的选择,您可以替换其中的一些小部分。
最终,您将拥有许多乐高积木,可以将它们组合在一起。