【初出江湖】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 实践,团队可以自动开展测试、部署和构建微服务的流程。这有助于快速频繁地发布。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414893.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wpf prism 《1》、区域 、模块化

安装prism.DryIoc 修改app.xaml <prism:PrismApplication x:Class"WpfApp3.App"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local"clr-namespace:W…

vue2的使用

准备容器引包&#xff08;官网&#xff09; — 开发版本/生产版本创建Vue实例 new Vue()指定配置项&#xff0c;渲染数据 el:指定挂载点data提供数据 可以把线上的cdn的vue的地址下载到本地进行依赖。 Vue2下载地址 https://v2.vuejs.org/v2/guide/installation.html vue.js没…

Linux虚拟机搭建K8S环境

文章目录 一、环境准备二、系统初始化三、部署master四、添加node节点五、部署网络六、部署dashboard七、登录dashboard面板 一、环境准备 首先在vmware上新建4台相同配置的虚拟机&#xff0c;除了IP和主机名外&#xff0c;其余配置相同。由于是搭建K8S初始环境&#xff0c;没…

开学寄快递,行李轻松寄,出行无压力

“春风得意马蹄疾&#xff0c;一日看尽长安花。”新的学期&#xff0c;新的征程&#xff0c;新生们在准备迎接开学时&#xff0c;不想拖着重重的行李开学的&#xff0c;那么寄快递这件事可得提上日程啦! 一、如何选择快递 如何选择一家价格实惠的快递公司成为了大家关注的焦点…

Linux bash脚本 批量创建文件

目录 一. 需求二. 前置知识一. 无进度条版本1.1 知识点1.2 代码1.3 效果 二. 有进度条版本2.1 代码2.2 效果 一. 需求 在当前目录下生成指定年份的文件&#xff0c;要求从生成1月到12月&#xff0c;每个月份的文件。 若用户不指定年份&#xff0c;则默认生成当前年的文件提示…

【C++】手动实现String类的封装(分文件编译)

实现了String类的大部分封装&#xff0c;采用分文件编译 //mystring.h #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //定义一个字符串int size; //记录字符串…

[知识分享]华为铁三角工作法

在通信技术领域&#xff0c;尤其是无线通信和物联网领域&#xff0c;“华为铁三角”是华为公司内部的一种销售、交付和服务一体化的运作模式。这种模式强调的是以客户为中心&#xff0c;通过市场、销售、交付和服务三个关键环节的紧密协作&#xff0c;快速响应客户需求&#xf…

tensorrt plugin

自定义plugin 流程 首先明确要开发的算子&#xff0c;最好是 CUDA 实现&#xff1b;继承 IPluginV2DynamicExt / IPluginV2IOExt类实现一个Plugin 类&#xff0c;在这里调用前面实现的算子&#xff1b;继承 IPluginCreator 类实现一个 PluginCreator 类&#xff0c;用于创建插…

JeecgBoot积木报表AviatorScript表达式注入漏洞复现

文章目录 漏洞信息漏洞复现环境搭建poc复现DNSLog验证 漏洞信息 影响组件&#xff1a;JimuReport积木报表 影响版本&#xff1a;v1.6.0 &#xff1c; JimuReport ≤ 1.7.8 漏洞名称&#xff1a;AviatorScript表达式注入漏洞 漏洞链接&#xff1a;积木报表软件存在AviatorSc…

redis分布式是如何实现的(面试版)

需要结合项目中的业务进行回答&#xff0c;通常情况下&#xff0c;分布式锁使用的场景&#xff1a;集群情况下的定时任务、抢单、幂等性场景。 下面先来看一个抢卷场景&#xff1a; 以下情况会出现超卖情况&#xff1a; 因为线程会交替执行&#xff0c;所以线程查询优惠价的数…

在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型

目录 在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型 1. max_generate_tokens的作用 2. 退出机制与Transformer模型 3. 实际应用中的影响 4. 结论 在大语言模型中,生成文本的退出机制,受max_genera…

php法律事务综合管理系统Java律师事务所业务流程管理平台python法律服务与案件管理系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

【解决方案】项目重构之如何使用 MySQL 替换原来的 MongoDB

前言 在笔者 Java 后端开发的项目经历中&#xff0c;MySQL 和 MongoDB 都有使用过作为后端的数据库来对业务数据进行持久化&#xff0c;两者没有孰优孰劣之分&#xff0c;都可以在合适的场景下发挥出它们的优势。 今天要分享的是一个项目重构过程中如何将数据库选型由原来的 Mo…

“线程池中线程异常后:销毁还是复用?”

目录 一、验证execute提交线程池中 测试 结论 二、验证submit提交线程池中 测试 结论 三、源码解析 查看submit方法的执行逻辑 查看execute方法的执行逻辑 为什么submit方法&#xff0c;没有创建新的线程&#xff0c;而是继续复用原线程&#xff1f; 四、总结 需要说…

【UML建模】时序图的那点事

【UML建模】时序图的那点事 开篇词&#xff1a;干货篇&#xff1a;1.概述2.时序图的组成元素2.1角色&#xff08;Actor&#xff09;&#xff1a;2.2生命线&#xff08;Lifeline&#xff09;&#xff1a;2.3消息&#xff08;Message&#xff09;&#xff1a;2.4激活条&#xff0…

【Day07】

目录 MySQL-DQL- 基本查询 MySQL-DQL- 条件查询 MySQL-DQL- 聚合函数 MySQL-DQL- 分组查询 MySQL-DQL- 排序查询 MySQL-DQL- 分页查询 MySQL-DQL- 案例 MySQL-多表设计-一对多 MySQL-多表设计-一对多-外键约束 MySQL-多表设计-一对一&多对多 MySQL-多表设计-案例…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换&#xff0c;现在学习基于防火墙NAT的网络地址转换&#xff0c;…

模型 7S分析法(麦肯锡)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。组织全面诊断&#xff0c;战略协同优化。 1 7S分析法(麦肯锡)的应用 1.1 邮储银行的转型&#xff1a;基于麦肯锡7S模型的竞争力提升 中国邮储银行面临着激烈的金融行业竞争&#xff0c;为了迅速提升…

# 利刃出鞘_Tomcat 核心原理解析(十一)-- Tomcat 附加功能 WebSocket -- 2

利刃出鞘_Tomcat 核心原理解析&#xff08;十一&#xff09;-- Tomcat 附加功能 WebSocket – 2 一、Tomcat专题 - WebSocket - 案例 - 登录功能 1、在项目 dzs168_chat_room 中&#xff0c;导入 tomcat 项目依赖&#xff08; dzs168_chat_room/web/lib/ &#xff09; idea -…

数据结构与算法---排序算法

文章目录 排序选择排序冒泡排序插入排序 希尔排序归并排序快速排序桶排序计数排序基数排序堆排序 排序 排序是指将一组数据按照特定的规则或顺序进行排列&#xff0c;比如一个数组[1, 5, 2, 4, 3]按照从小到大的顺序排列后就是[1,2,3,4,5]。 排序算法&#xff08;Sorting alg…