微服务架构谈系列(3):SOA VS 微服务(2)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务架构谈系列(3):SOA VS 微服务(2)
  • 服务粒度

整体上来说,SOA的服务粒度要粗一些,而微服务的服务粒度要细一些。例如,对一个大型企业来说,“员工管理系统”就是一个SOA架构中的服务;而如果采用微服务架构,则“员工管理系统”会被拆分为更多的服务,比如“员工信息管理”“员工考勤管理”“员工假期管理”“员工福利管理”等更多服务。

  • 服务通信

SOA采用了ESB作为服务间通信的关键组件,负责服务定义、服务路由、消息转换、消息传递,总体上是重量级的实现。微服务推荐使用统一的协议和格式,例如,RESTful协议、RPC协议,无须ESB这样的重量级实现。Martin Flower将微服务架构的服务通信理念称为“Smart endpoints anddumb pipes”,简单翻译为“聪明的终端,愚蠢的管道”。之所以用“愚蠢”二字,其实就是与ESB对比的,因为ESB太强大了,既知道每个服务的协议类型(例如,是RMI还是HTTP),又知道每个服务的数据类型(例如,是XML还是JSON),还知道每个数据的格式(例如,是2017-01-01还是01/01/2017),而微服务的“dumb pipes”仅仅做消息传递,对消息格式和内容一无所知。


  • 服务交付

SOA对服务的交付并没有特殊要求,因为SOA更多考虑的是兼容已有的系统;微服务的架构理念要求“快速交付”,相应地要求采取自动化测试、持续集成、自动化部署等敏捷开发相关的最佳实践。如果没有这些基础能力支撑,微服务规模一旦变大(例如,超过20个微服务),整体就难以达到快速交付的要求,这也是很多企业在实行微服务时踩过的一个明显的坑,就是系统拆分为微服务后,部署的成本呈指数上升。


  • 应用场景

SOA更加适合于庞大、复杂、异构的企业级系统,这也是SOA诞生的背景。这类系统的典型特征就是很多系统已经发展多年,采用不同的企业级技术,有的是内部开发的,有的是外部购买的,无法完全推倒重来或进行大规模的优化和重构。因为成本和影响太大,只能采用兼容的方式进行处理,而承担兼容任务的就是ESB

微服务更加适合于快速、轻量级、基于Web的互联网系统,这类系统业务变化快,需要快速尝试、快速交付;同时基本都是基于Web,虽然开发技术可能差异很大(例如,JavaC++.NET等),但对外接口基本都是提供HTTP RESTful风格的接口,无须考虑在接口层进行类似SOAESB那样的处理。


综合上述分析,我们将SOA和微服务对比如下表所示。


对 比 维 度

SOA

微  服  务

服务粒度

服务通信

重量级,ESB

轻量级,例如HTTP/ RESTful

服务交付

应用场景

企业级

互联网

 

因此,我们可以看到,SOA和微服务本质上是两种不同的架构设计理念,只是在“服务”这个点上有交集而已,因此两者的关系应该是第三种模式。


其实,Martin Fowler在他的微服务文章中,已经做了很好的提炼:

 

In short, the  microservice architectural style is an approach to developing asingle  application as a suite of small services, each running in its own process and  communicating with lightweight mechanisms, often an HTTP resource API. These  servicesare built around business capabilities and independently deployable  by fully automated deployment machinery.

 

上述英文的三个关键词分别是:small、lightweight、automated,基本上浓缩了微服务的精华,也是微服务与SOA的本质区别所在。


通过前面的详细分析和比较,似乎微服务本质上就是一种比SOA要优秀很多的架构模式,那是否意味着我们都应该把架构重构为微服务呢?


其实不然,SOA和微服务是两种不同理念的架构模式,并不存在孰优孰劣,而只是应用场景不同而已。我们介绍SOA时候提到其产生历史背景是因为企业的IT服务系统庞大而又复杂,改造成本很高,但业务上又要求其互通,因此才会提出SOA这种解决方案。如果我们将微服务的架构模式生搬硬套到企业级IT服务系统中,这些IT服务系统的改造成本可能远远超出实施SOA的成本。


曾经SOA架构下迷途


在技术上,ESB 架构虽然实现了业务逻辑与服务集成的解耦,可以更好地进行中央化的服务治理,也暴露出一些问题:


由于过度强调业务系统的可复用性,而不是对企业 IT 架构的治理和重构。大量服务集成的实现逻辑被下沉到 ESB 内部;而微服务/服务化架构下的注册中心是单纯的注册机制。


ESB 基于一个中心化的消息处理系统,集中式EAI的模式,本身会成为一个单点,可扩展性和性能的挑战。


image.png


另,EAI模式下的SOA,实施过程中服务的定义往往没有站在全局架构下思考,宏观未有企业信息架构指导、微观未有类似DDD的指引,协议翻译和集成终于服务的合理抽取。

相关文章
|
1天前
|
存储 监控 Docker
探索微服务架构下的容器化部署
本文旨在深入探讨微服务架构下容器化部署的关键技术与实践,通过分析Docker容器技术如何促进微服务的灵活部署和高效管理,揭示其在现代软件开发中的重要性。文章将重点讨论容器化技术的优势、面临的挑战以及最佳实践策略,为读者提供一套完整的理论与实践相结合的指导方案。
|
6天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
8天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
26 3
|
9天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
46 4
|
6天前
|
微服务
微服务与SOA区别
微服务与SOA区别
11 0
微服务与SOA区别
|
8天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
42 1
|
8天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
25 2
|
3天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
22 6
|
3天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
12 1
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2