SOA全称(Service Oriented Architecture)—— 面向服务的架构。
面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过在这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
跟 SOA 相提并论的还有一个 ESB(企业服务总线),简单来说 ESB 就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通。
SOA 解决的问题:
- 系统集成
企业系统不断发展过程中,会存在N多系统间相互调用,系统间的关系可能会是一个比较杂乱的网状结构。引入SOA来完成服务之间关系的有序化,这一步需要引入一些产品,比如 ESB、以及技术规范、服务管理规范 - 系统服务化
完成服务的复用。比如之前可能是 各个系统都写了一套登录注册、发邮件、发短信等功能。现在可以将 登录注册、发邮件、发短信等功能逻辑抽象成可复用、可组装的服务,通过合理的服务编排,实现业务功能的快速复用。 - 业务服务化
完成企业系统的对外服务能力。将业务单元(如:OA系统、财务系统等)封装成一项服务。
微服务架构
微服务架构和SOA架构是相似的,微服务架构算是在SOA架构上的一次升级。微服务架构的重点是“业务彻底的组件化和业务化”。原有的单体大而全的应用拆分成多个独立运行的小应用。当然,也不需要为了微服务而微服务,也需要考虑系统的量级。比如公司只有一个财务系统,其中有登录注册、发邮件、发短信、文件上传等功能,没有其他系统需要复用这些功能,使用人数只有几百人。那么一个大而全的单体应用就可以满足了。 企业发展过程中,没有倒闭,而且蓬勃发展了一把。一个简单的财务系统不能满足需求了,CRM、OA等等功能也不适合塞在那个大而全的财务系统里了。这个时候就可以闭着眼睛拆一把服务了。拆分成 财务系统、CRM、OA、登录注册、发邮件、发短信、文件服务等系统。
微服务的特征有几点:
1. 实现服务组件化
不同的组件之间相互独立,服务的发布一般不需要协调各个组件。
2. 按照业务划分服务和开发团队
不同的开发团队可以选择不同的技术、语言等
3. 去中心化
进一步降低了微服务之间的耦合度,在复杂的业务场景下,涉及多个微服务,通常在客户端或者中间层(网关)处理。
每个微服务拥有自己独立的数据库或者其他持久化能力。
4. 基础设施自动化(devops、CICD)
Docker 和 微服务相互成就。Docker 容器技术的普及使得微服务的普及更加方便。