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

【初出江湖】SOA 与微服务:哪个最适合您的业务?

目录标题

  • 面向服务的体系结构 (SOA)
    • SOA 角色
      • 那么它们是如何通信和协同工作的呢?
    • SOA 的优势
  • 微服务架构
    • 微服务的优势
  • SOA 和微服务之间的区别
  • SOA 与微服务:常见问题
    • 采用 SOA 和微服务面临哪些挑战?
    • SOA 和微服务是否可以共存?
    • 每种体系结构如何影响部署和 DevOps 实践?

在这里插入图片描述

面向服务的体系结构 (SOA)

面向服务的架构(SOA)是一种软件开发方法,它使用称为服务的软件组件来创建业务应用程序。SOA 倡导松散耦合的独立服务,彻底改变了软件设计。这意味着,服务彼此之间的依赖性最小,因此更易于开发、部署和维护。

服务也可以在许多应用中重复使用。这些服务通过标准化协议进行通信,从而实现不同系统之间的顺利集成和互操作性。SOA 非常适合大型的复杂企业。

例如,一个组织中的多个业务流程需要用户身份验证功能。您可以创建一项身份验证服务并在所有应用程序中重用,而不是为所有业务流程重写身份验证代码。同样,医疗机构中的几乎所有系统,例如患者管理系统和电子健康记录(EHR)系统,都需要登记患者。这些系统可以调用一项单一的公共服务来执行患者登记任务。

在这里插入图片描述

SOA 角色

面向服务的架构的构建模块是由 3 个角色组成的。

  1. 服务供应商:服务供应商创建 Web 服务并将其提供给服务注册表。服务供应商对服务的使用条款负责。
  2. 服务代理或服务注册表:服务代理或服务注册表负责向请求者提供有关服务的信息。代理可以是公共的或私有的。
  3. 服务请求者或服务消费者:服务请求者在服务代理或服务注册表发现服务,然后连接服务供应商以接受服务。

那么它们是如何通信和协同工作的呢?

ESB(Enterprise Service Bus,企业服务总线)把企业中各个不同的服务连接在一起。就像计算机总线一样,把计算机的各个不同的设备连接在一起。

因为不同的服务是使用不同的技术实现的,各个独立的服务是异构的,如果没有统一的标准,则各个异构系统对外提供的接口是各式各样的。SOA 使用 ESB 来屏蔽异构系统对外提供各种不同的接口方式,以此来达到服务间高效的互联互通。ESB通过使用标准网络协议(如 SOAP、XML、JSON、MQ )来开放服务以发送请求或访问数据,实现与各种系统间的协议转换、数据转换、透明的动态路由等功能,消除了开发人员必须从头开始进行集成的困扰。

采用 SOA 架构后,各个服务是相互独立运行的,甚至都不清楚某个服务到底有多少对其他服务的依赖,减少各个服务间的依赖和互相影响,做到了松耦合。

如果做不到松耦合,某个服务一升级,依赖它的其他服务全部故障,这样肯定是无法满足业务需求的。

SOA 的优势

SOA 的模块化和标准化协议使服务能够有效通信,从而提高可重用性、互操作性和可扩展性。这些关键优势可以转化为公司的切实优势:

  • 可重用性:重复使用现有服务可以减少开发时间和降低开发成本,并提高一致性和质量。公司可以加快开发周期并提高整体效率。
  • 互操作性:服务可以通信和交换数据,无论采用何种底层技术或编程语言。这促进了企业范围内的数据集成和协作。互操作性可以简化业务流程,帮助公司适应不断变化的技术。
  • 可扩展性:SOA 的模块化设计允许根据不断变化的需求独立扩展服务。它可确保应用能够在不影响性能或稳定性的情况下应对流量激增或不断扩大的用户群。公司可以使其基础架构适应不断变化的需求,而无需投入大量资金重新编写或重新设计。

微服务架构

微服务体系结构采用更精细的方法。它将应用分解为较小的独立服务。每项服务都是独立的,侧重于特定的任务或功能。每项微服务还包含所有必要的代码和数据,无需依赖其他组件即可运行。微服务通过 HTTP 和 REST 等轻量级协议进行通信,从而提高敏捷性和弹性。

微服务体系结构最显著的优势是可实现顺利集成和可重用性。这使其成为快速发展的动态应用的理想选择。
在这里插入图片描述

微服务的优势

微服务的精细体系结构和轻量级通信协议可实现无缝集成和可重用性。这可以转化为公司的几项主要优势:

  • 可扩展性:微服务是可扩展的。它们可以扩展或收缩以满足不断变化的需求。每项微服务负责特定的业务功能,并且可以独立于其他微服务进行扩展。Docker 和 Kubernetes 通过提供管理和编排微服务容器的工具和基础架构,在该可扩展性方面发挥至关重要的作用。
  • 灵活性:微服务的技术独立性使开发人员能够为每项服务选择最佳技术。微服务的松散耦合(这表明它们不依赖特定的技术或编程语言)使开发人员可以在不中断整个应用的情况下试用新技术。通过微服务,可以更轻松地采用新技术,因为只有受影响的微服务需要更新。
  • 故障隔离:微服务的松散耦合可限制故障的影响,防止故障级联到整个系统中。这是因为微服务是独立的单元,有自己的数据和代码。如果一项微服务失败,其他微服务可以继续正常运行。故障隔离有助于确保整个系统的稳定和可靠。

SOA 和微服务之间的区别

在这里插入图片描述

虽然 SOA 和微服务有一些共同的目标,但也有明显的区别。在比较 SOA 与微服务时,基本的体系结构风格可使这两种方法区分开来。SOA 采用自上而下的集中化方法,而微服务则更喜欢采用自下而上的去中心化模型。

特点SOA 面向服务架构微服务架构
体系结构风格粗粒度、集中化细粒度的分布式系统
服务粒度规模较大、更全面的服务规模较小、有侧重点的服务
独立性服务是相互依存的服务高度独立
沟通同步,通常以消息为导向异步,通常是 RESTful
数据存储集中化数据管理分布式(去中心化)数据管理
可扩展性水平扩展水平和垂直扩展
部署通常涉及将整个应用作为一个单元进行部署每项服务均独立部署和扩展
耦合由于资源共享和进行集中通信,服务呈现出一定程度的耦合松散耦合,服务之间的依赖性最小

这个表格清晰地展示了两种架构在多个维度上的差异,有助于理解和选择适合特定场景的架构风格。

面向服务的体系架构所带来的服务概念已成为现代云计算和虚拟化的核心组成部分,比如中间件和微服务等项目。由于它们的相似性,人们经常将 SOA 和微服务架构相混淆。二者的主要区别是它们的范围:SOA 是一种企业级的架构方案,而微服务则是应用开发团队的一种实施策略。

此外,它们与各自组件进行通信的方式也有所不同:SOA 使用 ESB,而微服务则可以通过与语言无关的 API 彼此进行无状态通信。不仅如此,微服务中与语言无关的 API 还允许开发团队选择自己想用的工具。凡此种种,让微服务变得生存力更强,也更加灵活。

SOA 与微服务:常见问题

采用 SOA 和微服务面临哪些挑战?

选择 SOA 还是微服务会显著影响团队快速灵活地构建和修改软件的能力。

SOA 的较大代码块虽然可以提供更好的控制力,但也会阻碍灵活性。采用 SOA 时,重复使用基于不同技术构建的服务可能具有挑战性。这使得在服务之间连接和共享数据变得很棘手。开发人员必须掌握多种技术才能有效地使用 SOA。

微服务需要管理更多部分,这会增加复杂性。它们需要更标准化的开发策略,以便独立的服务顺畅地协同工作。实现这种程度的组织协调是一项艰巨的任务。

SOA 和微服务是否可以共存?

是的,公司可以在 SOA 上构建传统系统,并逐步将微服务用于新功能或特定组件。这种方法可以实现平稳过渡并利用这两种体系结构的优势。

每种体系结构如何影响部署和 DevOps 实践?

SOA 和微服务部署都受益于 Open DevOps 实践。但是,根据体系结构的不同,具体细节会有所不同。

SOA 通常涉及整体部署,即团队将整个应用作为一个单元进行部署。这种方法需要团队之间的谨慎协调。它可能既耗时又复杂,尤其是对于大型应用来说,更是如此。

DevOps 强调为了应对这些挑战,开发和运营团队之间的协作和自动化。这有助于提高部署频率和可靠性。通过自动执行测试、配置管理和基础设施调配,DevOps 可以帮助简化 SOA 部署并尽可能减少错误。

微服务架构支持更精细的部署。团队独立部署每项微服务。

DevOps 原则对于微服务部署也十分重要。通过持续集成和持续交付等 DevOps 实践,团队可以自动开展测试、部署和构建微服务的流程。这有助于快速频繁地发布。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机网络-BFD实验配置
  • 测试:TestGRPCDiscovery
  • docker实战基础二(Docker基础命令)
  • zset使用lua实现取最高分数中的随机成员
  • 干货含源码!如何用Java后端操作Docker(命令行篇)
  • Redis在服务器启动的日志问题
  • 选择排序的动画展示与实现
  • Ubuntu20上的Qt程序连接Windows上的mssql服务器
  • Oracle(ORA-00214)-undo表空间文件损坏
  • 【Python机器学习】卷积神经网络(CNN)——语义理解
  • 深入解析C#中的锁机制:`lock(this)`、`lock(privateObj)`与`lock(staticObj)`的区别
  • 【C++】汇编分析,函数是如何调用,传参,返回
  • 四种NAT类型
  • OpenCVSharp中的图像数据结构与类型
  • 【PyQt6 应用程序】视频百叶窗效果一键生成模块
  • 07.Android之多媒体问题
  • CentOS7 安装JDK
  • FastReport在线报表设计器工作原理
  • Javascript弹出层-初探
  • Laravel 菜鸟晋级之路
  • log4j2输出到kafka
  • oldjun 检测网站的经验
  • python 装饰器(一)
  • Twitter赢在开放,三年创造奇迹
  • 今年的LC3大会没了?
  • 聚簇索引和非聚簇索引
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # Apache SeaTunnel 究竟是什么?
  • #stm32驱动外设模块总结w5500模块
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (二) 初入MySQL 【数据库管理】
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET导入Excel数据
  • .NET框架
  • .NET中分布式服务
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • [100天算法】-实现 strStr()(day 52)
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C++]——带你学习类和对象
  • [Excel] vlookup函数
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • [Hdp] lc552. 学生出勤记录 II(dp+递推+状态定义+状态转移+向前转移+好题)
  • [hdu 4552] 怪盗基德的挑战书