当前位置: 首页 > news >正文

到底是微服务,还是SOA?

在这里插入图片描述

引言:大概正式工作有5年了,换了三个大厂【也是真特么世道艰难,中国互联网人才饱和了】。基本上每个公司有的架构都不太相同,干过TOC和TOB的业务,但是大家用的架构都不太相同。有坚持ALL in one的SB,最后服务像一坨xx。也有微服务的狂热爱好者,最后服务多的自己都数不清,之间的关联乱七八糟,一个功能穿八九个微服务情况。其实选什么,主要是根据业务来决定的,盲目的选择就会成为一坨xx。


目录

  • 1.SOA介绍
    • 1.1 SOA架构的定义
    • 1.2 SOA架构的特点
    • 1.3 SOA架构的组成部分
    • 1.4 SOA架构的实现技术
    • 1.5 SOA架构的优点
    • 1.6 SOA架构的缺点
    • 1.7 SOA架构的应用场景
  • 2 微服务介绍
    • 2.1 微服务架构的定义与本质
    • 2.2 微服务架构的特点
    • 2.3 微服务架构的组件
    • 2.4微服务架构的优缺点
      • 2.4.1 优点
      • 2.4.2 缺点
    • 2.5 微服务架构的应用场景
  • 3 选择SOA还是微服务?
    • 3.1 项目需求与规模
    • 3.2 技术栈与团队能力
      • 3.3 部署与运维
      • 3.4 可扩展性与灵活性
    • 3.5 其他考虑因素


1.SOA介绍

SOA(Service-Oriented Architecture),即面向服务的架构,是一种在计算机环境中设计、开发、部署和管理离散模型的方法。以下是对SOA架构的详细解析:

1.1 SOA架构的定义

SOA架构将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

1.2 SOA架构的特点

  1. 粗粒度:服务数量不应太多,依靠消息交互而不是远程过程调用。
  2. 松耦合:减少各个服务间的相互依赖和影响,各个服务的位置、实现技术、当前状态以及私有数据,对服务请求者不可见。
  3. 标准化:SOA架构中的服务接口和通信协议通常是标准化的,如SOAP、REST等,这有助于不同平台和技术之间的服务进行互操作。

1.3 SOA架构的组成部分

  1. 服务提供者:发布服务,并且对使用自身服务的请求进行响应。
  2. 服务请求者:利用服务,应用程序通过服务请求者来调用或者请求服务。
  3. 服务注册中心:注册已发布的服务,对其进行分类,并提供搜索服务。

1.4 SOA架构的实现技术

  1. Web Service:基于SOAP等协议实现服务之间的通信。
  2. 服务注册表:如UDDI(Universal Description Discovery and Integration),提供服务的注册、查找和定位功能。
  3. 企业服务总线(ESB):将企业中各个不同的服务连接在一起,屏蔽异构系统对外提供的不同接口,实现服务间高效的互联互通。

1.5 SOA架构的优点

  1. 提高系统的可扩展性和灵活性:SOA架构将系统拆分成独立的服务,可以按需组合和重组这些服务,从而实现系统的快速扩展和灵活部署。
  2. 提高系统的可重用性:每个服务都是独立的功能单元,可以在不同的系统中复用,提高了系统的开发效率。
  3. 降低系统的耦合性:SOA架构通过服务之间的松耦合关系,降低了服务之间的依赖性,有利于系统的模块化和维护。
  4. 提高系统的稳定性和可靠性:SOA架构采用了服务注册与发现机制、负载均衡、故障恢复等机制,提高了系统的稳定性和可靠性。

1.6 SOA架构的缺点

  1. 系统复杂度高:SOA架构中涉及多个服务之间的协作和通信,系统的复杂度较高,开发、测试和维护成本相对较高。
  2. 性能问题:由于服务之间的通信需要通过网络进行,可能存在网络延迟和性能损失,对系统的性能造成影响。
  3. 安全性难以保障:SOA架构中涉及多个服务之间的通信,需要对数据传输进行加密和安全控制,保障系统的安全性比较困难。
  4. 部署和运维难度大:SOA架构中涉及多个服务的部署和管理,需要专门的运维团队进行管理,增加了系统的复杂性和运维成本。

1.7 SOA架构的应用场景

  1. 企业应用集成(EAI):通过封装应用程序为服务并通过服务接口进行通信,实现数据的共享和业务流程的整合。
  2. 业务流程管理(BPM):通过组合不同的服务来实现灵活的业务流程管理和自动化。
  3. 微服务架构:SOA框架可以作为构建和管理微服务架构的基础设施。
  4. 云计算和云服务:通过封装应用程序为云服务,实现跨平台和跨组织的服务交付。
  5. 移动应用开发:用于构建后端服务,提供数据和功能的访问接口。
  6. 电子商务和电子支付:通过服务的方式实现商家和消费者之间的交互和支付功能。
  7. 物联网(IoT):帮助实现设备和传感器之间的数据交换和通信。

2 微服务介绍

微服务架构(Microservice Architecture)是一种将大型单个应用程序和服务拆分为数个甚至数十个小型支持服务的架构风格,每个小型服务都独立地进行开发、管理和迭代。以下是对微服务架构的详细解析:

2.1 微服务架构的定义与本质

微服务架构围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。其本质是用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

2.2 微服务架构的特点

  1. 独立性:每个微服务都是独立的,可以独立开发、测试、部署和扩展,不受其他服务的限制。这种独立性提高了各个服务的可维护性和可重用性。
  2. 轻量级通信:微服务之间通过轻量级通信机制(如RESTful API)进行交互,使得服务之间的通信更加快速和高效。这有助于提高系统的可扩展性和响应速度。
  3. 灵活性和可扩展性:微服务架构使得应用更加灵活和可扩展,可以根据市场需求快速调整和优化。通过将应用拆分为一系列独立的微服务,可以更加方便地添加或修改功能。
  4. 高可用性:每个微服务都可以有多个实例运行,当某个服务出现故障时,其他服务可以继续正常运行,提高了系统的可用性。这有助于保证系统的稳定性和可靠性。
  5. 便于维护和升级:每个微服务都是独立的,便于进行维护和升级,同时也可以根据需要进行替换。这有助于提高系统的可维护性和可升级性。
  6. 去中心化:微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比传统的ESB(Enterprise Service Bus)更轻量。这有助于减少系统的复杂性,提高系统的可扩展性和灵活性。

2.3 微服务架构的组件

微服务架构通常包含以下关键组件:

  1. 服务注册与发现:如Eureka、Consul等,用于实现微服务的动态注册和发现功能,使得服务之间能够相互找到并进行通信。
  2. 负载均衡:如Ribbon、Nginx等,用于在微服务之间分配请求,提高系统的吞吐量和响应速度。
  3. API网关:如Zuul、Spring Cloud Gateway等,作为外部请求与内部微服务之间的桥梁,提供安全控制、流量管理、协议转换等功能。
  4. 配置中心:如Spring Cloud Config、Apollo等,用于集中管理微服务的配置文件和参数,实现配置的动态更新和版本管理。
  5. 服务熔断与降级:如Hystrix等,用于在微服务之间出现调用异常时,进行熔断处理,防止故障扩散,并提供降级策略,保证系统的稳定性。
  6. 监控与日志:如ELK(Elasticsearch、Logstash、Kibana)堆栈、Prometheus和Grafana等,用于收集和分析微服务的日志和性能指标,提供实时监控和报警功能。

2.4微服务架构的优缺点

2.4.1 优点

  1. 技术栈灵活:每个微服务都可以使用不同的编程语言、框架和技术栈来实现,提高了开发的灵活性和效率。
  2. 易于扩展和升级:由于每个微服务都是独立的,因此可以单独进行扩展和升级,降低了系统的复杂性和风险。
  3. 故障隔离:微服务之间的独立部署和运行,使得某个服务的故障不会影响到其他服务的正常运行,提高了系统的可靠性和稳定性。

2.4.2 缺点

  1. 部署和运维复杂:微服务架构需要管理多个服务单元,每个服务单元都需要部署、监控和管理,增加了运维的复杂性和成本。
  2. 网络延迟和错误:微服务之间的通信需要通过网络进行,可能会受到网络延迟和错误的影响,导致系统的响应时间和可靠性下降。
  3. 数据一致性难以保证:由于每个微服务都独立运作,需要在服务之间保持数据一致性,这可能需要使用分布式事务或基于事件驱动的架构等复杂的技术手段来实现。

2.5 微服务架构的应用场景

微服务架构适用于以下多种应用场景:

  1. 大型复杂企业应用:如企业资源规划(ERP)系统、客户关系管理(CRM)系统等,通过微服务架构可以将其拆分为多个独立的服务,提高系统的灵活性和可维护性。
  2. 电子商务平台:需要处理大量的用户请求和交易数据,通过微服务架构可以将其拆分为商品管理、订单管理、支付、物流等多个服务,提高平台的性能和可靠性。
  3. 社交网络平台:需要处理大量的用户交互和数据存储,通过微服务架构可以将其拆分为用户管理、消息服务、朋友圈服务、推荐服务等多个服务,提高平台的灵活性和可扩展性。
  4. 金融系统:如银行核心系统、保险核心系统等,通过微服务架构可以将其拆分为账户管理、交易处理、风险管理、报表服务等多个服务,提高系统的性能和可靠性。

3 选择SOA还是微服务?

从上面的介绍来看,其实就可以总结出来,SOA是面向服务的一种架构,微服务是面向功能点的一种架构。论服务之间依赖的复杂度,SOA是低于微服务的;但是论服务本身的复杂度,微服务是远低于SOA的。

在选择微服务架构和SOA(Service-Oriented Architecture,面向服务的架构)时,需要依据项目的具体需求、组织的技术栈、团队的实际情况以及未来的可扩展性等多个因素进行权衡。以下是一些关键的考虑因素:

3.1 项目需求与规模

  1. 项目规模
    • 对于大型企业级应用,SOA可能更适合,因为它可以将整个企业的功能划分为一组自治的服务,这些服务通常较大且功能较为复杂。
    • 对于小型或中型应用,或者需要快速迭代和敏捷开发的项目,微服务架构可能更为合适,因为它将应用程序划分为一组小型、独立的服务,每个服务都专注于一个特定的业务功能。
  2. 业务需求变化
    • 如果业务需求经常变化,微服务架构的灵活性更高,可以更快地适应需求的变化。
    • 如果业务需求相对稳定,SOA架构也能满足需求,但可能在灵活性方面稍逊于微服务。

3.2 技术栈与团队能力

  1. 技术栈
    • 如果团队已经熟悉SOA架构及其相关技术(如SOAP、WSDL、ESB等),并且这些技术在当前项目中具有优势,那么选择SOA可能更为合适。
    • 如果团队对微服务架构及其相关技术(如Spring Boot、Docker、Kubernetes等)更为熟悉,或者希望采用更现代、更灵活的技术栈,那么微服务架构可能更为合适。
  2. 团队能力
    • 微服务架构需要团队具备分布式系统开发、容器化技术、持续集成/持续部署(CI/CD)等方面的能力。
    • SOA架构则可能需要团队具备Web服务开发、企业服务总线(ESB)管理等方面的能力。

3.3 部署与运维

  1. 部署复杂性
    • 微服务架构的每个服务都可以独立部署和扩展,这使得部署过程更加灵活和高效。
    • SOA架构中的服务通常较大且功能较复杂,因此部署和扩展可能相对较为复杂。
  2. 运维成本
    • 微服务架构的运维成本可能较高,因为需要管理多个独立的服务单元和它们之间的通信。
    • SOA架构的运维成本可能相对较低,因为服务之间的通信通常通过企业服务总线(ESB)进行集中管理。

3.4 可扩展性与灵活性

  1. 可扩展性
    • 微服务架构更容易实现水平扩展,因为每个服务都可以独立地增加或减少实例数。
    • SOA架构的可扩展性可能受到服务之间依赖关系的限制。
  2. 灵活性
    • 微服务架构的灵活性更高,可以更快地适应市场和技术变化。
    • SOA架构在灵活性方面可能稍逊于微服务,但也能满足大多数企业级应用的需求。

3.5 其他考虑因素

  1. 安全性
    • 无论是微服务架构还是SOA架构,都需要关注安全性问题,包括服务之间的通信安全、数据保护等。
  2. 监控与日志
    • 微服务架构需要更复杂的监控和日志系统来跟踪和管理多个独立的服务。
    • SOA架构的监控和日志系统可能相对简单一些,因为服务之间的通信通常通过ESB进行集中管理。

总结下来就这么几句话:

  1. 追求性能,且服务的流量比较大,选择微服务比较合适;服务流量比较小,选择SOA更划算
  2. 面向业务的体量,如果是体量较大,功能点比较多的业务,选择SOA比较合适;反之业务简单,体量较小,选择微服务比较合适。

相关文章:

到底是微服务,还是SOA?

引言:大概正式工作有5年了,换了三个大厂【也是真特么世道艰难,中国互联网人才饱和了】。基本上每个公司有的架构都不太相同,干过TOC和TOB的业务,但是大家用的架构都不太相同。有坚持ALL in one的SB,最后服务…...

JDK17常用新特性

目前国内大部分开发人员都是在使用jdk8,甚至是jdk6,但是随着jdk的更新迭代,jdk8我觉得可能就会慢慢的淡出舞台,随着目前主流框架最新版推出明确说明了不再支持jdk8,也促使我不得不抓紧学习了解一波jdk17的新特性&#…...

【分布式微服务云原生】探索负载均衡的艺术:深入理解与实践指南

探索负载均衡的艺术:深入理解与实践指南 摘要: 在本文中,我们将深入探讨负载均衡的概念、重要性以及实现负载均衡的多种算法。通过详细的技术解析、Java代码示例、流程图和对比表格,您将了解如何选择合适的负载均衡策略来优化资源…...

拥抱云原生

专题七:云原生实战72课时 专题简介: 云原生正在改变世界,新一代架构思想ServiceMesh、Serverless改变传统软件架构模式,本专题基于完全云上架构实战,结合微服务架构和云计算平台两者的优势,属于架构师必备…...

关于使用若依并快速构建系统的操作指南

准备阶段--下载源码(脚手架) 1.1 若依官网地址:https://www.ruoyi.vip/ 1.2 选择“前后端分离版本进行下载”,如下图所示 1.3 跳转gitee后,直接按如下步骤进行下载。 前后端模块分离 解压,并打开到项目…...

【分布式微服务云原生】 选择SOAP还是RESTful API?深入探讨与实践指南

🌐 选择SOAP还是RESTful API?深入探讨与实践指南 摘要: 在构建现代Web服务时,开发者常常面临一个关键决策:是选择SOAP还是RESTful API?本文将为您提供一个全面的比较,包括两者的适用场景、安全…...

HarmonyOS NEXT 应用开发实战(五、页面的生命周期及使用介绍)

HarmonyOS NEXT是华为推出的最新操作系统,arkUI是其提供的用户界面框架。arkUI的页面生命周期管理对于开发者来说非常重要,因为它涉及到页面的创建、显示、隐藏、销毁等各个阶段。以下是arkUI页面生命周期的介绍及使用举例。 页面的生命周期的作用 页面…...

C# 比较两个集合和比较对象

1、比较集合 /// <summary> /// 比较两个集合 /// </summary> /// <typeparam name"T"></typeparam> /// <param name"list1"></param> /// <param name"list2"></param> /// <returns>&…...

Spark高级用法-自定义函数

用户可以根据需求自己封装计算的逻辑&#xff0c;对字段数据进行计算 内置函数&#xff0c;是spark提供的对字段操作的方法 &#xff0c;split(字段) 对字段中的数进行切割&#xff0c;F.sum(字段) 会将该字段下的数据进行求和 实际业务中又能内置函数不满足计算需求&#xff0…...

『Mysql进阶』Mysql explain详解(五)

目录 Explain 介绍 Explain分析示例 explain中的列 1. id 列 2. select_type 列 3. table 列 4. partitions 列 5. type 列 6. possible_keys 列 7. key 列 8. key_len 列 9. ref 列 10. rows 列 11. filtered 列 12. Extra 列 Explain 介绍 EXPLAIN 语句提供有…...

【工具】音视频翻译工具基于Whisper+ChatGPT

OpenAI推出的开源语音识别工具Whisper&#xff0c;以其卓越的语音识别能力&#xff0c;在音频和视频文件处理领域大放异彩。与此同时&#xff0c;ChatGPT也在翻译领域崭露头角&#xff0c;其强大的翻译能力备受赞誉。因此&#xff0c;一些字幕制作团队敏锐地捕捉到了这两者的结…...

学成在线——关于nacos配置优先级的坑

出错&#xff1a; 本地要起两个微服务&#xff0c;一个是content-api&#xff0c;另一个是gateway网关服务。 发现通过网关服务请求content微服务时&#xff0c;怎么请求都请求不到。 配置如下&#xff1a; content-api-dev.yaml的配置&#xff1a; server:servlet:context-p…...

Nginx在Windows Server下的启动脚本

Nginx在Windows Server下的快捷运行脚本 使用时记得修改NGINX_DIR路径 ECHO OFF CHCP 65001 SET NGINX_DIRD:\software\Nginx\ color 0a TITLE Nginx Management GOTO MENU :MENU CLS ECHO. ECHO. * * * * Nginx Management * * * * * * * * * * * ECHO. * * EC…...

【国科大】C++程序设计秋季——五子棋

【国科大】C程序设计秋季 —— 五子棋程序 下载地址&#xff1a;https://mbd.pub/o/bread/Zp2Ukptx...

Docker 环境下多节点服务器监控实战:从 Prometheus 到 Grafana 的完整部署指南

Docker 环境下多节点服务器监控实战&#xff1a;从 Prometheus 到 Grafana 的完整部署指南 文章目录 Docker 环境下多节点服务器监控实战&#xff1a;从 Prometheus 到 Grafana 的完整部署指南一 多节点部署1 节点一2 节点二3 节点三 二 监控节点部署三 配置 prometheus.yml四 …...

【动手学深度学习】6.3 填充与步幅(个人向笔记)

卷积的输出形状取决于输入形状和卷积核的形状在应用连续的卷积后&#xff0c;我们最终得到的输出大小远小于输入大小&#xff0c;这是由于卷积核的宽度和高度通常大于1导致的比如&#xff0c;一个 240 240 240240 240240像素的图像&#xff0c;经过10层 5 5 55 55的卷积后&am…...

【宝可梦】游戏

pokemmo https://pokemmo.com/zh/ 写在最后&#xff1a;若本文章对您有帮助&#xff0c;请点个赞啦 ٩(๑•̀ω•́๑)۶...

docker启动的rabbitmq如何启动其SSL功能

docker run --hostname my-rabbit --name my-rabbit -p 5671:5671 -p 15671:15671 -p 15672:15672 -e RABBITMQ_DEFAULT_USERabc -e RABBITMQ_DEFAULT_PASSabc -d rabbitmq:4.0-management 使用docker的复制命令将ca.crt、server.crt和server.key文件复制到容器的/etc/server_s…...

易基因: cfMeDIP-seq揭示cfDNA甲基化高效区分原发性和转移性前列腺|Nat Commun

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 前列腺癌&#xff08;Prostate cancer&#xff0c;PCa&#xff09;是男性中第二常见的恶性肿瘤&#xff0c;也是全球癌症相关死亡的第三大原因。虽然大多数原发性前列腺癌可以治愈&#…...

CMake 教程跟做与翻译 4

目录 添加一个option! 添加一个option! option&#xff0c;正如其意&#xff0c;就是选项的意思。我们这里需要演示一下option的做法。 option对于大型的工程必然是非常常见的&#xff1a;一些模块会被要求编译&#xff0c;另一些客户不准备需要这些模块。option就是将这种需…...

MySQL面试题分享

慢日志&#xff08;了解&#xff09; 慢日志开启的变量&#xff1a;slow_query_logON; 如果值为 OFF ,那就是没有开启慢日志 耗时&#xff1a; long_query_time&#xff0c;默认是10秒 redis 和 mysql 慢日志的区别 redis 慢日志默认是没有开启的 mysql 慢日志默认是开启的…...

vue路由缓存问题

什么是路由缓存问题 解决方案&#xff1a; 让组件实例不再复用&#xff0c;强制销毁重建监听路由变化&#xff0c;变化之后执行数据更新操作 方法一 给 routerv-view 添加key属性&#xff0c;强制不添加缓存&#xff0c;破坏缓存&#xff0c;所以这个方法性能会比较差 <Ro…...

RabbitMQ中如何解决消息堆积问题,如何保证消息有序性

RabbitMQ中如何解决消息堆积问题 如何保证消息有序性 只需要让一个消息队列只对应一个消费者即可...

python爬虫案例——selenium爬取淘宝商品信息,实现翻页抓取(14)

文章目录 1、任务目标2、网页分析3、代码编写3.1 代码分析3.2 完整代码1、任务目标 目标网站:淘宝(https://www.taobao.com/) 任务要求:通过selenium实现自动化抓取 淘宝美食 板块下的所有商品信息,并实现翻页抓取,最后以csv格式将数据保存至本地;如: 2、网页分析 首先…...

在VSCode中使用Excalidraw

概述 Excalidraw是一款非常不错的示意图绘制软件&#xff0c;没想到在VSCode中有其扩展&#xff0c;可以在VScode中直接使用。 安装扩展 使用 需要创建.excalidraw.svg、.excalidraw或.excalidraw.png等名称的文件。 搭配手写版使用 自由画笔工具可以配合手写板&#xff0c…...

25中国投资中投笔试测评秋招校招SHL笔试题型分享

✅中投公司不必过多介绍&#xff0c;和建总都位于金融央企第一档&#xff0c;但是招人更少&#xff0c;竞争更为激烈&#xff0c;看公示录用名单都是清北的金融硕士&#xff0c;投资岗难度更大。 ✅中投公司的笔试往年都是shl系统&#xff0c;但考察范围非常广&#xff0c;包含…...

【LeetCode热题100】分治-快排

本篇博客记录分治快排的4道题目&#xff1a;颜色分类、排序数组、数组中的第K个最大元素、数组中最小的N个元素&#xff08;库存管理&#xff09;。 class Solution { public:void sortColors(vector<int>& nums) {int n nums.size();int left -1,right n;for(int…...

Docker 教程四 (Docker 镜像加速)

Docker 镜像加速 国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;此时可以配置镜像加速器。 目前国内 Docker 镜像源出现了一些问题&#xff0c;基本不能用了&#xff0c;后期能用我再更新下。* Docker 官方和国内很多云服务商都提供了国内加速器服务&#xff0c;例如…...

各类排序详解

前言 本篇博客将为大家介绍各类排序算法&#xff0c;大家知道&#xff0c;在我们生活中&#xff0c;排序其实是一件很重要的事&#xff0c;我们在网上购物&#xff0c;需要根据不同的需求进行排序&#xff0c;异或是我们在高考完报志愿时&#xff0c;需要看看院校的排名&#…...

【c语言——指针详解(4)】

文章目录 一、回调函数是什么&#xff1f;二、qsort的使⽤1、使⽤qsort函数排序整型数据2、使⽤qsort排序结构数据 三、qsort函数的模拟实现 作者主页 一、回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xf…...