SOA架构和微服务架构的区别
什么是SOA架构
企业范围内的应用程序或者服务开发的方法,目的是复用组件和服务。在SOA架构中每个服务(service)都会提供独立的代码和数据来实现特定的企业业务功能(business function)。各个服务之间是松藕荷的,提供接口通过企业总线(ESB)进行集成;从而减少服务更新导致的大量的集成工作;在这种架构下,如果服务出现问题仍会影响到关联的服务。
实践中XML数据是SOA架构重要的组成部分,基于XML的SOA应用程序可以构建web服务。在SOA架构出现在大约1990年代末,在此之前单体应用之间的集成是点对点集成,每增加一个应用都需要重新做开发和集成测试。
SOA架构四中不同的服务类型
- Functional services(功能服务):用于表达业务逻辑
- Enterprise services(企业服务):用于实现功能(functional)
- Application services(应用服务):用于开发部署App
- infrastructure services (基础设施服务):应用后端的基础服务(例如:认证鉴权、安全等)
每种服务都包含下三个组件
- 接口(interface):定义了服务提供者如何执行来自消费者的请求
- 协议(contract):定义了服务提供者和消费者之间的交换方式
- 实现(implementation):服务的具体实现代码
什么是微服务
和SOA架构类似,微服务也是需要解决松耦合和复用问题,微服务之间是相互独立。微服务是高内聚的,自己管理代码和数据。微服务是应用层级的(非企业层级)微服务之间通过API进行通信,实现一个特定的业务功能。微服务架构可以实现更加敏捷、扩展性和弹性的应用。Java语言是实现微服务的首选语言,其次是Golang和Python。
微服务是真正的云原生架构,通常运行在容器中(容器更便于实现弹性、便携的portable、独立的服务)。
微服务和SOA架构的主要不同:范围
SOA架构和微服架构最大的不同是范围不同。SOA架构针对的是企业业务层级,每个服务对应一个企业业务,每个业务之间通过企业总线(ESB)进行数据交换;微服是针对应用层级的,微服务之间是直接通信的。
复用
- SOA架构是企业级的组件组件和服务(针对特定企业级业务功能)复用。
- 微服务架构更是代码层级的复用,不同组件之间通过代码copy复用共性的内容,各自独立的维护。
调用机制
SOA架构通过RESTful APIs实现同步调用 微服务通过事件机制(发布/订阅)实现交互,减少微服务之间的耦合,便于实现独立的变更、弹性伸缩等。
数据
- SOA架构设计的目标之一就是需要同步获取更新主数据源,从而减少数据同步带来的复杂性。
- 微服务架构则需要自己维护本地数据,且确保这些数据与其他微服务或者应用独立,即使这些数据在其他微服务中仍然重复存在。这带来一定的复杂性,这就需要平衡敏捷性和性能,这也被认为是可接受的实现。
其他SOA架构和微服务架构的不同
- 通信方式:微服务架构每个服务是独立开发的,可以有自己的通信协议;SOA架构必须要使用ESB管理和协调。
- 互操作性:微服务保持简单,通常只支持轻量化的消息机制,例如:HTTP/REST/JMS;SOA架构则支持多种类型的协议如:SOAP/AMQP/MSMQ等
- 服务粒度:微服务是聚焦做好一件事,同样的SOA架构中服务也类似,但是服务粒度是一个企业级业务功能
- 迭代速度:微服务快与SOA架构的服务
- 服务治理:SOA架构会提供统一的服务治理方案;微服务则不会提供统一服务之类方案便于各微服务有更大灵活性,促使组织之间协作
- 存储:SOA架构通常会为所有服务提供一个统一的存储层;微服务则会专门为需要他的服务提供一个专属存储或者数据库
SOA架构和微服务架构那个更适合你?
针对大型的企业级应用仍然保持SOA架构,针对小型应用可以使用微服务架构;也可以将两者结合起来,企业级超大型应用采用SOA架构,其中的某一个子应用可以采用微服务架构。
参考链接
SOA架构和微服务架构的区别