定义
SOA定义了一种可通过服务接口复用软件组件并实现其互操作的方法。SOA中的每项服务都包含执行完整的独立业务功能所需的代码和数据(解耦),这些服务是独立的、可重用的,并且可以跨系统和组织交互。
组件
服务
消息
协议
ESB(企业服务总线)
定义
EBS(Enterprise Service Bus)一个中央的、可重用的基础设施组件,被用于协调和组织分布式系统中的各个服务之间的通信和交互。
作用
- 服务选择:ESB为不同的服务提供了一个统一的接口。通过ESB,可以通过连接到不同的服务,使得在系统中进行通信更加容易。
- 协议转换:在SOA中,很有可能会出现各种协议(例如SOAP、REST等),ESB可以将来自不同服务的消息转换成统一的协议格式。这样就能避免不同协议之间的通信困难。
- 消息路由:ESB可以帮助确定消息的目的地,它能够根据预定义的规则和条件选择正确的服务,并将消息传递给它。
- 消息转换:ESB能够转换消息的格式,使得来自一个服务的消息可以被其他服务识别和使用。这能够降低服务之间的相关耦合度。
优缺点
优点
- 灵活性:服务之间的松耦合设计使得应用程序易于扩展和维护。
- 可重用性:服务可以在多个应用中重复使用,降低了开发成本。
- 拓展性:可以轻松添加新服务;可以对现有服务进行拓展(如负载均衡,微服务)
- 易于集成:通过标准化接口,SOA 可以更容易地与其他系统集成。
缺点
- 性能损失:服务之间的通信可能导致性能损失。
- 复杂性:SOA 架构可能会增加系统的复杂性,特别是在大型应用中。
- 网络依赖:SOA 架构依赖于网络,网络不稳定可能导致服务不可用。
SOA与微服务
区别
服务粒度
- SOA:面向服务架构中的服务通常具有较大的粒度,它们可能包含多个功能模块。SOA服务通常关注业务功能的整合和重用。
- 微服务:微服务架构中的服务粒度更小,每个服务通常只负责一个特定的功能。微服务关注单一职责原则,使得服务更加轻量化和独立。
服务独立性:
- SOA:SOA服务可能共享相同的数据存储、基础设施和资源。这可能导致服务之间的耦合度较高。
- 微服务:微服务架构强调服务的独立性,每个服务都有自己的数据存储、基础设施和资源。这有助于降低服务之间的耦合度,提高系统的可维护性和可扩展性。
通信
- SOA:服务必须共享一种称为企业服务总线 (ESB) 的通用通信机制。SOA通过EBS管理和协调服务。但是存在单点故障的问题,即当某一服务速度变慢,可能整个系统受影响。
- 微服务:在微服务架构中,每个服务都是独立开发的,具有自己的通信协议。
通信协议:
- SOA:SOA通常使用复杂的通信协议,如SOAP(Simple Object Access Protocol)和WS-*(Web Services)规范。基于ESB通信机制,当某一服务速度变慢,可能整个系统受影响。
- 微服务:微服务架构倾向于使用轻量级的通信协议,如RESTful API和gRPC。
部署和运维:
- SOA:SOA服务通常部署在集中式的应用服务器上,这可能导致部署和运维的复杂性较高。
- 微服务:微服务架构支持独立部署和运维,每个服务可以单独进行扩展、更新和维护。这有助于提高系统的敏捷性和可靠性。
技术栈:
- SOA:SOA服务通常使用统一的技术栈和平台,这可能限制了技术的多样性和灵活性。
- 微服务:微服务架构允许每个服务使用不同的技术栈和平台,这有助于提高技术的多样性和灵活性。
从 SOA 迁移到微服务
DevOps 可用于实现从 SOA 架构过渡到微服务