一、前言
我们在学习和讨论微服务架构时经常会提及这样一个架构:SOA(service-oriented architecture)架构。不少人包括闲宇在内在初次接触SOA架构时经常会混淆SOA架构和微服务架构。究其原因,微服务架构是从SOA架构中演变过来的。甚至早先wiki对微服务进行定义的时候都是将其定义为SOA架构的一种变体。
Microservices is a software development technique — a variant of the service-oriented architecture (SOA) structural style.
当然,站在今天来看这样一个定义显然是非常不合适的。为了更好地区分微服务架构和SOA架构,让我们通过研究微服务架构取代SOA架构的原因来去厘清两者的区别。
二、微服务取代SOA架构的原因
下面我们从这样几个方面具体分析一下微服务取代SOA的原因:
1. 轻量化与技术简化
SOA:SOA 强调通过企业服务总线(ESB)来连接和管理不同的服务。这导致了架构的重量级,因为 ESB 通常引入了额外的复杂性、较大的学习成本和更高的运维成本。SOA 还需要大量中间件,增加了系统的复杂度。
微服务:微服务架构避免了使用复杂的 ESB,通常通过更轻量的通信方式(如 REST API、gRPC)来进行服务间交互,减少了复杂的中间件和通信管理层,使架构更加轻量化。每个服务都是独立的,可以自行决定如何通信,而不是依赖于复杂的中间层系统。
2. 去中心化管理与治理
SOA:SOA 通常采用集中式治理,例如通过统一的企业服务总线来管理所有的服务。治理策略、数据模型、消息协议等都需要在统一的系统中进行管理和控制。这种集中式的控制在跨团队协作、扩展性和灵活性上存在局限性。
微服务:微服务强调去中心化治理,允许各个服务独立开发、独立选择技术栈和工具,给开发团队更多自由度。每个团队可以根据其需求自由选择开发语言、数据库或其他技术,实现高效的团队协作和独立部署。这种灵活的管理方式使微服务架构在大规模分布式系统中的应用更具优势。
3. 更强的独立性与灵活性
SOA:在 SOA 架构中,服务可能共享底层的数据库或资源,使得某个服务的变更可能影响到其他服务,甚至需要重新部署整个系统。此外,服务的升级或扩展通常受到中心化控制系统的约束,灵活性不足。
微服务:微服务架构中,每个服务是完全独立的实体,拥有自己的数据库、业务逻辑和生命周期。这种独立性使得服务之间的耦合度大大降低,服务可以独立开发、独立部署和独立扩展,极大提高了灵活性。一个服务的升级不会影响其他服务,且服务可以根据实际需求水平扩展。
4. 更好的扩展性
SOA:SOA 的扩展性在一定程度上受制于企业服务总线和中心化的管理系统。如果某个服务需要扩展,可能要考虑到整个系统的架构设计,扩展不够灵活。此外,SOA 的扩展能力受限于传统架构和硬件资源的限制,难以与现代云原生架构无缝对接。
微服务:微服务天然适应水平扩展,可以根据业务需求对特定服务进行按需扩展,且通常基于容器化(如 Docker)和容器编排工具(如 Kubernetes)来实现弹性扩展,具有极高的扩展性。此外,微服务可以灵活迁移到云端,实现云原生的自动化部署、负载均衡和弹性扩展。
5. 与云原生、DevOps 的契合
SOA:SOA 是为了解决大型企业系统集成问题而设计的,它更适合传统的数据中心和企业内部网络,难以与现代云原生架构、持续集成(CI)和持续交付(CD)模型很好地结合。SOA 中的服务可能会因为使用不同的中间件和集成工具而导致部署和运维的复杂度增加,难以实现 DevOps 的自动化运维流程。
微服务:微服务架构与云原生(cloud-native)理念高度契合,特别适合基于云的应用。微服务可以通过容器(如 Docker)进行部署,通过 Kubernetes 实现自动化编排和管理。这与 DevOps 理念中的自动化运维、快速迭代、持续交付密切相关,使得微服务架构能够快速响应市场需求,实现敏捷开发。
6. 部署灵活性
SOA:在 SOA 中,服务通常依赖于 ESB 这样的中心化组件,这使得服务的部署变得复杂,更新或变更某个服务时可能会影响到其他服务,甚至整个系统。ESB 的存在使得部分服务的独立部署变得困难。
微服务:微服务的独立部署特性是其核心优势。每个微服务可以根据自身的生命周期进行独立部署,避免了传统单体应用或 SOA 中部署时的相互影响。服务的升级、修复、扩展都可以独立进行,不需要对整个系统进行停机或大规模变动。
7. 数据管理的灵活性
SOA:在 SOA 架构中,多个服务可能共享同一个数据库或者数据存储,这会带来性能瓶颈和数据一致性问题,且难以根据各个服务的不同需求来调整数据库。
微服务:微服务允许每个服务拥有独立的数据库或存储,形成数据库自治。这种设计使得每个微服务可以根据自身业务需求来选择最适合的数据库类型(如关系型数据库、NoSQL 数据库等),并优化数据管理的性能和可扩展性。
三、总结
从上面的分析我们可以看出,微服务架构逐渐取代 SOA 的原因主要在于其更轻量、灵活、去中心化的设计,更适应现代企业级系统的需求。特别是在云原生、DevOps、容器化等技术的推动下,微服务架构提供了更高的扩展性和灵活性,能够更好地满足复杂分布式系统和快速迭代的开发需求。
同时,与传统 SOA 相比,微服务避免了复杂的中间件和中心化管理,降低了系统的耦合度和复杂度,使得开发、部署和运维都更加敏捷、高效。这使得微服务在现代软件开发中成为主流架构。
简而言之,时代选择了微服务。