微服务架构学习与思考(16):SOA架构与微服务架构对比分析?它们之间区别是什么?

什么是 SOA 架构

SOA(Service-Oriented Architecture) 架构是面向服务的架构,是一种将单体应用粗粒度的划分为服务的架构,其核心是将业务功能抽象为独立、可重用、松耦合的服务,也就是将业务功能通过 IT 技术封装为服务,并通过标准化的接口

进行发布、查找和调用,从而达到构建灵活的企业 IT 应用系统。

从应用技术开发层面来看,就是将应用程序的功能模块以独立、分布式、可复用的服务的形式组织起来,然后通过标准的接口和契约,使不同的服务能够跨平台、跨语言、跨系统集成,组成企业的各种应用系统。

集成通常是依赖企业服务总线(ESB)来实现服务间的通信和集成。

这里的 "服务",业务层面指的是能执行完整的、独立的业务功能;程序层面指的是包含完整的代码和数据,是一个独立的功能单元。

SOA 的目标是提高企业 IT 资产的重用性,降低企业 IT 系统集成成本,提高业务灵活性和 IT 响应速度。

在 SOA 架构中,所有组件都是独立自主的,能为其它组件提供服务。

SOA 架构示意图:

SOA 架构发展三阶段

SOA(Service-Oriented Architecture,面向服务的架构)的概念最早由 Gartner 公司在 1996 年提出。

当时,软件技术和市场环境尚未成熟,SOA 并未被广泛实施和关注。

随着互联网的兴起和电子商务的快速发展,企业业务逐渐向互联网迁移,推动了对灵活、可复用服务的需求。

Web 服务的出现为 SOA 的实现提供了技术基础,尤其是基于 XML、SOAP、WSDL 等标准的 Web 服务技术,使得跨平台、跨语言的服务调用成为可能。

第一阶段:孕育阶段

SOA(Service-Oriented Architecture,面向服务的架构)的概念最早由 Gartner 公司在 1996 年提出,但是当时技术尚不成熟,未被广泛实施。

第二阶段:标准化阶段

随着 Web 服务标准的确立(如 SOAP、WSDL、UDDI),SOA 开始被企业关注和应用,形成较为成熟的技术规范体系。

第三阶段:成熟应用阶段

2005 年以后,SOA 推广加速,厂商联合制定中立标准(如 WS-Policy),并将关注点扩展到安全、业务流程和事务处理等领域。

单体架构出现的问题

对于小型项目或初创项目,单体架构具有开发速度快、修改简单、部署方便等优点。

但是,随着业务的快速发展,业务的复杂性也随着增加,单体架构的弊端也逐渐显现:

代码库膨胀

随着业务功能不断增加,单体代码库的代码量会随之增加,直到膨胀。这也会导致代码结构变得复杂、代码间的耦合也越来越紧密。

可用性受限

任何小的改动都可能影响到整个系统的可用性,一个小的代码修改可能导致整个系统出现问题,"牵一发而动全身"。

代码维护困难

第一新加入的开发人员需要花费大量的时间来理解整个系统,代码量大理解代码变的困难。

第二修改 bug 时,一个小的错误可能导致整个系统崩溃,影响系统可用性。

扩展性瓶颈

单体架构通常只能进行整体扩展,无法针对某个高负载的业务功能模块进行独立扩展,因为整个系统功能代码都是耦合在一起。

开发与部署效率低下

  • 多个团队同时在一个大型代码库中开发,修改、增加代码,容易产生代码冲突。

  • 每次功能更新都需要重新构建、测试和部署整个应用,发布周期长,效率低下。

为了解决单体架构在大型企业应用中日益突出的问题,面向服务的架构(SOA) 就应运而生。

SOA 如何解决单体架构问题

SOA 通过将单体应用拆分成松耦合、自治的服务单元来解决上述问题:

  • 服务封装与松耦合:SOA 将业务功能封装成独立的服务,服务之间通过标准接口和协议来通信,降低模块之间耦合度,便于维护和升级。

  • 复用性:将公共业务功能封装为独立服务可以被多个业务模块、应用复用,业务应用通过服务编排灵活组合,支持企业业务快速发展。

  • 业务敏捷性:业务功能变化时,只需要修改相关的服务,不影响系统其它部分。

  • 独立部署与扩展:虽然 SOA 的服务粒度较粗,但是服务可以独立部署,也支持热点服务的扩展,提升系统的伸缩性。

  • 技术异构:服务之间的通信遵循一些协议标准,比如 SOAP 、WSDL 等,能够实现技术异构系统之间的通信。

  • 集中治理和标准化:通常通过企业服务总线(ESB)统一治理、安全、路由等,SOA 推动了服务标准的制定。

SOA 架构出现的问题

ESB 复杂度高:ESB 本身可能成为单点故障和性能瓶颈,其开发、部署和维护成本高。

部署与扩展困难:SOA 架构中的服务划分比较粗粒度,导致服务间的强依赖,部署和独立扩展较为困难,灵活性没有微服务高。

服务治理复杂:在大型 SOA 系统中,服务的版本管理、依赖管理、监控等治理工作面临挑战。

SOA 中的规范定义带来过度的复杂性,落地成本非常之高。SOAP 实现的 Web Service,在性能上和易用性上并不完美。

虽然定义了庞大的 Web Service 协议家族,通过标准协议实现了不同系统之间的通信,但是它们的学习、使用成本都非常高。

微服务架构

微服务架构可以看作是在 SOA 基础上的一种更细粒度的服务拆分和实现方式。它也是将单体应用拆分为多个更小的、自治的服务,每个服务围绕独立的业务功能构建,独立部署和运行,

服务间通过轻量级通信协议(如 HTTP 、gRPC )进行通信。

它去掉了厚重繁琐的 ESB ,没有采用 SOAP 、WSDL 等复杂的标准和协议。

随着技术发展,与微服务架构配套的技术发展也突飞猛进,出现了链路追踪、API Gateway、服务注册和发现、配置中心、CICD、Docker 容器 等等技术,

为微服务架构的快速发展奠定了基础。

SOA 架构与微服务架构的区别

架构概述对比

SOA 面向服务的架构:SOA 是将应用程序拆分为粗粒度、可复用、可独立部署的服务,然后通过接口、协议规范来实现跨平台、多语言、多系统集成的架构,通常依赖企业服务总线(ESB)来实现服务间的通信与集成。

微服务架构(Microservices Architecture) :微服务架构是在 SOA 基础上的一种更细粒度的服务拆分和实现方式。它是将应用拆分为多个更小、自治的服务,每个服务围绕独立的业务能力构建,独立部署、独立运行、独立小团队负责。

服务之间通信协议使用轻量级的协议(如 HTTP、gRPC 等)进行通信。

服务拆分粒度

  • SOA 服务粒度较粗:SOA中的服务往往是较大的业务模块或功能单元。比如:电商系统中的 "商品管理系统" 即为一个 SOA 服务。

  • 微服务服务粒度较细:微服务强调将业务拆分为更小的、具体的功能服务。比如:"商品管理系统" 可能拆分为 "商品基本信息管理"、"供应商管理"、"库存管理"等多个微服务。

通信机制与技术实现

  • SOA 通信依赖 ESB:SOA 架构通常使用企业服务总线(ESB)作为服务间通信的核心,ESB 负责路由、消息转换、协议适配等功能,属于较为重量级的实现。在搭配 SOAP(XML 格式,消息体数据量大) 等比较重的标准协议。ESB 易成为系统瓶颈。

  • 微服务采用轻量级通信:微服务架构丢掉了 ESB,采用轻量级协议如 HTTP、RPC 进行服务间通信,强调去中心化,避免单点瓶颈。

服务自治与独立部署

  • SOA服务依赖共享资源:SOA 服务往往共享数据库或其他资源,服务间存在一定耦合,部署和扩展相对集中。

  • 微服务完全自治:每个微服务拥有独立的数据库和运行环境,支持独立部署和扩展,能够根据业务需求灵活伸缩资源。

技术栈与运维实践

  • SOA 偏向传统技术:SOA 多采用传统的企业级中间件和技术,注重系统集成和兼容已有系统,运维相对复杂。

  • 微服务利用现代技术:微服务架构广泛采用容器化(如Docker)、自动化部署、DevOps、链路追踪等现代技术,支持快速迭代和持续交付。

团队组织

  • SOA 架构:通常是按技术分层的团队(如UI团队、业务逻辑团队、数据库团队)。

  • 微服务架构:通常是全功能团队(Cross-functional teams),围绕业务能力构建。

SOA和微服务架构对比总结

重要的区别

特性 SOA 微服务
粒度 粗粒度服务,通常代表一个完整的业务流程或领域 细粒度服务,每个服务只关注一个单一的业务能力
耦合度 相对松耦合,服务通过ESB进行协调,但ESB可能导致中心化依赖和单点故障 高度松耦合,服务独立运行,通过轻量级机制通信,去中心化
集成方式 依赖ESB进行服务的路由、转换和编排,实现集中式集成 采用API Gateway、服务注册与发现、轻量级通信(HTTP REST/消息队列)进行集成,去中心化集成
技术栈 倾向于统一的技术栈和协议(如XML、SOAP、WSDL),通常由集中团队管理 可技术异构性,每个服务可自由选择最适合的技术栈
数据存储 通常共享集中式数据库,或通过ESB协调多个数据库 每个微服务拥有独立的数据存储,强调数据自治
部署方式 倾向于单体部署或少量大型服务部署,独立部署能力有限 强调独立部署,每个服务可独立上线、回滚
团队组织 通常是按技术分层的团队(如UI团队、业务逻辑团队、数据库团队) 通常是全功能团队(Cross-functional teams),围绕业务能力构建
演进目标 提高企业级服务重用性,降低集成成本 提高系统可伸缩性、灵活性、高可用性,加速产品迭代

一些联系的点

尽管 SOA 和微服务存在显著差异,但它们并非完全独立的概念,而是有着密切的联系,甚至可以说微服务是 SOA 在特定背景下的一种演进和发展。

  • 1、共同的服务化思想:两者都基于 "服务化" 的核心思想,即将业务功能抽象为独立的服务,并通过接口对外暴露。这是它们共同的基石。

  • 2、松耦合目标:两者都追求服务间的松耦合,以提高系统的灵活性、维护性、伸缩性。

  • 3、分布式系统范畴:两者都属于分布式系统架构的范畴,需要处理分布式环境下的通信、事务、数据一致性等问题。

  • 4、演进关系:微服务可以看作是 SOA 在互联网时代、云计算环境下的一种 "进化"。SOA 在早期解决了企业级应用集成的痛点,但随着业务的快速变化和复杂性增加,其中心化的 ESB 和粗粒度服务逐渐暴露出部署、扩展和运维上的瓶颈。微服务则通过更细粒度的服务划分、去中心化的治理和独立部署的特性,解决了这些痛点,更好地适应了敏捷开发和DevOps的实践。

  • 5、并非完全替代关系:微服务并非完全取代 SOA。在某些传统企业、业务流程相对稳定、集成复杂度较高的场景下,SOA 仍然有其价值。例如,一些遗留系统的集成,ESB 的集中化管理能力仍然是有效的选择。微服务更适用于需要快速迭代、高度可伸缩、容错性强的互联网应用和新业务系统。微服务也不是万能银弹,需要综合考虑使用。

我现在把微服务架构相关的博客文章也发布到了 github 上,便于阅读(左边栏打开可以看到全部的标题),还有历史修改追踪。

当然也希望大家能点个✨ 星 star 鼓励鼓励。

相关推荐
掘金-我是哪吒2 小时前
分布式微服务系统架构第147集:JavaPlus技术文档平台日更
分布式·微服务·云原生·架构·系统架构
异常君4 小时前
Dubbo 与 Spring Cloud Gateway 技术对比:微服务架构中的协同实践
spring cloud·微服务·dubbo
一眼万年044 小时前
Kafka KRaft 深度解析
微服务·kafka
计算机毕设定制辅导-无忧学长10 小时前
微服务架构中的 Kafka:异步通信与服务解耦(四)
微服务·架构·kafka
肥仔哥哥19301 天前
SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503
微服务·gateway·最新微服务
炎码工坊1 天前
DevSecOps实践:用Terraform策略检查筑牢基础设施安全防线
网络安全·微服务·云原生·系统安全·安全架构
掘金-我是哪吒1 天前
分布式微服务系统架构第146集:JavaPlus技术文档平台
分布式·微服务·云原生·架构·系统架构
it_xiao_xiong1 天前
微服务集成seata分布式事务 at模式快速验证
分布式·微服务·架构
seventeennnnn1 天前
Java面试实战:Spring Boot+微服务+AI的谢飞机闯关之路 | CSDN博客精选
spring boot·redis·spring cloud·微服务·ai·java面试·rag