什么是分布式微服务?

news2025/1/16 5:09:29

什么是分布式微服务?

  • 前言
  • 什么是微服务
    • 举例说明
  • 什么是分布式
  • 图解分布式与微服务
    • 单体架构及部署
    • 微服务架构
    • 分布式
    • 影响
  • 分布式微服务架构
    • 什么是分布式微服务架构
    • 面临的问题

前言

本文旨在讲清楚什么是分布式微服务架构,通过解释微服务架构和分布式架构,来理解分布式微服务架构,并且揭示了其相较于单体架构的优点,以及该架构面临的问题

在介绍分布式微服务之前,我们先从名字分析,这个名词包含了两部分,第一部分:分布式,第二部分:微服务。如果搞清楚了这两个,那么基本上就弄明白了。

什么是微服务

微服务是一种架构风格,用于构建分布式系统(关于什么是分布式,这个后文会提到)。

它将一个大型应用程序拆分为一组小型的、自治的服务,每个服务都运行在独立的进程中,并通过网络进行通信。每个微服务专注于解决特定的业务问题,并可以独立地进行开发、部署和扩展。

关于什么是架构风格:

架构风格是指软件系统中构件(可以理解系统的构成部分)的组织方式和连接方式,
反映了领域中众多系统所共有的结构和语义特性(比如看一个生物是不是牛,那就去它身上找牛的特征 符合特征的就是牛 不符合的就不是),
并指导如何将各个构件有效地组织成一个完整的系统(也就是搭建系统)

比如最常见的单体架构风格,就是把所有的功能都塞到一个应用里面,然后打包以及部署

举例说明

举个例子,假设我们有一个在线电影平台的网站。

传统的单体架构中,所有的功能,例如用户管理、电影管理、支付管理等,都被打包在一个单一的应用程序中

这个应用程序负责处理用户的注册和登录、浏览电影、下订单和支付等操作。

现在,我们可以使用微服务架构来构建这个电影平台。我们可以将不同的功能模块拆分为独立的微服务,例如上面提到的功能可以划分为用户服务、电影服务、订单服务和支付服务

在这里我要插一句,上述是按功能来划分服务,但在实际开发中,不一定是按功能拆分。
拆分的方式有很多,可以从功能维度,就是上面的这种,
也可以从别的维度拆分,如业务域维度或者数据维度等等。

用户服务负责处理用户的注册和登录功能,它有自己的数据库来存储用户信息。当用户进行注册时,用户服务会验证用户信息,并将用户信息存储在自己的数据库中。

电影服务负责管理电影的信息,例如电影的标题、演员、评分等。它也有自己的数据库来存储电影信息。当用户浏览电影时,电影服务会提供电影列表和详细信息。

订单服务负责处理用户下订单的功能。当用户下订单时,订单服务会验证订单信息并将订单存储在自己的数据库中。

支付服务负责处理支付过程。当用户确认支付时,支付服务会与支付网关进行通信并完成支付操作。

这样,不同的功能模块被拆分为独立的微服务,它们可以独立开发、部署和扩展。每个微服务都有自己的责任范围,可以根据需要独立进行扩展或升级。微服务之间通过网络进行通信,使用轻量级的通信协议,如HTTP或消息队列。

什么是分布式

在我们日常在网站搭建的上下文中,提到的分布式通常指的是分布式系统架构

在这种架构下,一个网站的功能被拆分为多个独立的服务,这些服务分布在不同的计算机节点上,并通过网络进行通信和协作(注意这一句,这些服务分布在不同的计算机节点上)。

每个服务负责特定的功能或模块,它们可以独立地进行开发、部署和扩展。这种分布式架构可以提高网站的性能、可靠性和可扩展性。

图解分布式与微服务

下面的图简单揭示了将一个单体架构的系统,转变为上述微服务和分布式架构的过程

单体架构及部署

在这里插入图片描述

微服务架构

首先使用微服务架构会将功能拆分为一个个的微服务
在这里插入图片描述
注意这里,拆分后的每个服务都是一个小的、独立的应用程序,可以单独测试、部署以及扩展

分布式

然后将这些微服务部署到服务器上,这就是分布式
在这里插入图片描述
上述是每个服务都部署到一个不同的服务器上,但在实际开发中要按照服务器的规格来部署,有的可能可以部署两个或者三个,有的可能只能部署一个。

值得注意的是,同样的服务可能部署多个,可能有时候用户支付比较频繁,一个服务不够用,那么我就可以再部署一个支付服务上去,以提供更加稳定、快速的响应,比如以下这样:
在这里插入图片描述

影响

别看我们上面又是将单体应用的功能拆分成微服务,又是分开部署的,但要说对用户的有什么负面影响的话,我的回答是基本没有,从用户使用体验来说,和之前的单体架构没有什么区别的。

要说有的话那就是他们会觉得响应越来越快,越来越稳定。

如果你也这么觉得的话,我觉得那真是泰裤辣!
在这里插入图片描述
其实将单体应用拆分为微服务并进行分布式部署对用户基本是百利无一害,要硬说有的话,那一害,害的是程序猿
在这里插入图片描述

单体架构改为微服务和分布式架构以后,大概会造成以下影响:

  1. 性能改善:通过微服务架构和分布式部署,可以提高系统的性能和响应能力。每个微服务可以独立扩展和优化,从而提供更快速的响应时间和更高的并发处理能力。

  2. 可用性增强:微服务架构的分布式部署可以提高系统的可用性。如果其中一个微服务出现故障,其他微服务仍然可以继续工作,避免整个应用停止运行。这意味着用户可以继续使用其他可用的功能而不会完全失去服务。

  3. 更好的扩展性:微服务架构允许根据需求独立扩展每个微服务(参考之前提到的支付服务)。这意味着当用户量增加时,可以根据需要增加相关微服务的实例数,以应对高负载。这样可以确保系统在用户增长期间仍然保持稳定的性能和可用性。

  4. 独立功能开发和部署:微服务架构允许不同的团队独立开发和部署各个微服务。这样可以加快新功能的上线速度,并允许更灵活的迭代和持续交付。用户可以更快地获得新功能和改进,而无需等待整个应用程序的发布。

  5. 潜在的复杂性增加:微服务架构和分布式部署可能引入一定的复杂性。由于需要管理多个微服务和它们之间的通信,涉及到一些额外的技术和工具。这可能导致对开发、部署和运维的一些挑战,需要适当的管理和资源投入。

简单总结一下就是:

系统的角度出发,微服务架构和分布式部署可以带来更好的性能、可用性和扩展性

用户可以获得更快的响应时间,更稳定的服务,并且更快地获得新功能

但对于开发者说,需要注意潜在的复杂性和管理挑战,并确保适当的监控和故障处理机制以保证用户体验的一致性

分布式微服务架构

相对于分布式架构和微服务架构,可能大家对这个词更加熟悉:分布式微服务架构

什么是分布式微服务架构

将上面的两种架构方式合到一起就变成了:分布式微服务架构

在分布式微服务架构中,一个大型的应用程序将会被拆分为多个小而自治的服务单元,每个服务单元独立运行在分布式环境中,并通过轻量级的通信协议进行相互通信。每个服务单元都专注于完成特定的业务功能,并可以独立地进行开发、部署、扩展和维护。

分布式微服务架构有助于解决传统单体应用程序复杂性和可扩展性问题,提供更灵活、可靠和可维护的系统架构。它适用于大型、复杂的应用程序和需要快速迭代的敏捷开发环境。通过拆分应用程序为多个服务单元,分布式微服务使得团队可以更快地交付业务价值,并更好地应对不断变化的业务需求。

面临的问题

分布式微服务架构虽然相较于传统的单体应用具有很多的优点,但是其在提出之际面临的问题也不少,大概是以下几个方面,以下描述中微服务简称为服务

  1. 各服务间通信和调用
    在一个分布式系统中,服务之间需要进行通信和调用来完成业务功能
    我该如何确保通信的可靠性、安全性,以及如何避免服务之间的耦合

  2. 服务注册与发现
    在一个分布式系统中,有大量的微服务实例需要管理和发现
    我该如何有效地注册和发现这些服务实例,以便其他服务可以动态地与它们进行通信?

  3. 负载均衡
    有多个服务实例的情况下(比如之前图中存在的多个支付服务},
    我该如何合理地分配负载

  4. 服务容错和故障恢复
    服务可能会遇到故障、网络延迟或异常等问题。
    我该如何处理服务故障和不可用情况,实现服务的容错和故障恢复

  5. 数据一致性和事务管理
    在分布式系统中,由于服务之间的数据交互和操作,并发情况下可能出现数据一致性的问题。
    我该如何处理分布式环境下的数据一致性,确保事务的原子性、一致性、隔离性和持久性?。

  6. 分布式系统的监控和调试
    在分布式系统中,需要对各个服务的运行状态、性能指标和日志进行监控和调试,以及及时发现和解决问题
    我该如何实现对分布式系统的监控、日志聚合、异常跟踪和性能分析

  7. 部署和扩展
    在分布式微服务架构中,如何有效地部署和扩展服务,以适应不断变化的需求和负载。比如我今天突然要加两到三个支付服务,那我该怎么做?
    也就是我该如何自动化部署服务、实现弹性扩展和平滑升级,同时保持系统的高可用性和稳定性

这些问题能不能解决?又如何解决?本文后续主角Spring Cloud Alibaba将会给出答案。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue的乐器社区网站设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

37.SpringBoot实用篇—开发(上册)

目录 一、SpringBoot实用篇—开发。 (1)热部署(开发阶段使用)。 (1.1)手动启动热部署。 (1.2)自动启动热部署。 (1.3)热部署范围配置。 (1.…

概率栅格

欢迎访问我的博客首页。 概率栅格 1. miss 表与 hit 表 1. miss 表与 hit 表 miss 表和 his 表是一维数组,它们存放的都是空闲值,用于更新概率栅格。其下标 i i i 代表旧空闲值,元素 t a b l e [ i ] table[i] table[i] 代表旧空闲值 i i …

openGauss学习笔记-10 openGauss 简单数据管理-创建表

文章目录 openGauss学习笔记-10 openGauss 简单数据管理-创建表10.1 语法格式10.2 参数说明10.3 示例 openGauss学习笔记-10 openGauss 简单数据管理-创建表 在当前数据库中创建一个新的空白表,该表由命令执行者所有。在不同的数据库中可以存放相同的表。您可以使用…

android avd

avd 记录~ avd 创建avd 默认位置安装位置.android/avd 下.android/avd/xxxx.ini 文件.android/avd/.avd 下config.ini 文件 扩展没尝试命令 avd 创建 https://developer.android.google.cn/studio/run/managing-avds?hlzh-cn https://blog.csdn.net/m0_37792384/article/det…

深入分析 workflow 线程池

深入分析 workflow 线程池 线程池是日常开发中很常用的一种管理线程的工具。它是池化技术中的一种。 池化技术的初衷就是将一些资源进行重复利用,来避免重复的构建来提高执行效率。类似的还有数据库连接池,字符串常量池,httpClient 连接池。…

git下载源码及环境搭建下载源码之后端(一)

学习目标: git下载源码 步骤: 下载源码 使用 windows R 使用cmd调用命令框下载gitee云上面的 源码文件 输入命令: Git clone (此处拼接gitee源代码 地址) 若使用 git 命令 clone 项目时 我们需要在系统变量中进行…

Ceph 存储(最详细!)

目录 一:存储基础 1、单机存储设备 (1)DAS(直接附加存储,是直接接到计算机的主板总线上去的存储) (2)NAS(网络附加存储,是通过网络附加到当前主机文件系统…

CSS 伪元素: ::marker 自定义列表序号

::marker 伪元素 ::marker&#xff0c;可作用在任何设置了 display: list-item 的元素或伪元素上&#xff0c;例如<li>和<summary>。 /** <ul><li>Peaches</li><li>Apples</li><li>Plums</li> </ul> */ ul li::…

Python教程(3)——python开发工具vscode的下载与安装

Python的开发工具有很多款&#xff0c;很多都是非常好用的&#xff0c;其中vscode作为其中一款Python的开发工具&#xff0c;是非常轻量级的&#xff0c;今天我们来介绍一下vs code的下载与安装。 vscode的下载与安装 首先需要到vscode的官网&#xff0c;这个谷歌或者百度一下…

【C++11】包装器 和 bind函数 的定义与 使用

包装器 在C11标准中&#xff0c;没有提供内置的包装器功能&#xff0c;但我们可以使用一些技术手段来实现包装器的效果。下面介绍两种常用的方法&#xff1a; 函数对象包装器 函数对象包装器&#xff08;Function Object Wrapper&#xff09;&#xff1a; C11引入了 std::fu…

CCLINK IE 转MODBUS-RTU网关modbusrtu地址对照表

远创智控YC-CCLKIE-RTU。这款产品的主要功能是将各种MODBUS-RTU、RS485、RS232设备接入到CCLINK IE FIELD BASIC网络中。 那么&#xff0c;这款通讯网关又有哪些特点呢&#xff1f;首先&#xff0c;它能够连接到CCLINK IE FIELD BASIC总线中作为从站使用&#xff0c;同时也能连…

晶体三极管总结

目录 1.3.1晶体管的结构与类型 1.3.2晶体管的电流放大作用 1.3.3晶体管的共射特性曲线 晶体三极管中有两种带有不同的极性电荷的载流子参与导电&#xff0c;故称之为双极型晶体管&#xff08;BJT&#xff09;Bipolar Junction Transistor 1.3.1晶体管的结构与类型 晶体三极…

PowerShell设置最美界面

在 Windows 上安装 scoop&#xff1a; scoop是什么 windows下的安装源搜索工具&#xff0c;有点类似centos下的yum和Ubuntu下的apt。用这个拉下来安装的软件没有广告。 scoop官方网址&#xff1a; https://scoop.sh/A command-line installer for Windowshttps://scoop.sh/ …

scratch二级、三级常考大题

目录 1. 绘制多彩五角星 2. 躲避陨石 3. 数星星 4. 古堡历险记 5. 五彩糖葫芦 6. 疫情隔离和核酸检测模拟 7. 画正方形 8.大鱼吃小鱼 9. 接水果 10. 绘制正方形 1. 绘制多彩五角星 1.准备工作 &#xff08;1&#xff09;选择背景stars、角色Pencil&#xff1b; &am…

工作日志3 对类型的判断 slice的截取对于jq的使用 el-table的表头和内容的位置

在 JavaScript 中&#xff0c;你可以使用多种方式来判断某个值是否为空。以下是几种常见的方法&#xff1a; 使用严格相等运算符 () 检查值是否为 null 或 undefined&#xff1a; var value null; // 或者 undefinedif (value null || value undefined) {// 值为空 }使用逻…

Linux常用命令——elm命令

在线Linux命令查询工具 elm 纯文本邮件客户端程序 补充说明 elm命令是一个E-mail客户端管理程序&#xff0c;它提供了纯文本交互式全屏幕界面。 语法 elm(选项)选项 -s<邮件主题>&#xff1a;指定新邮件的邮件主题&#xff1b; -f<目录>&#xff1a;开启程序…

Flutter 使用JSONToDart 生成bean文件

1. 首先安装插件&#xff0c;进入flile-setting-plugins 2.然后搜索安装jsontodart&#xff0c;之后重启ide使其生效 3.在你需要使用的地方直接鼠标右键 或者使用快捷键AltShiftD 4.然后会出现这样一个弹窗&#xff0c;输入你要用到的json数据&#xff0c;和文件名称点击生成就…

2023年房地产经纪中介行业研究报告

第一章 行业概况 1.1 概述 房地产经纪中介行业是一个专业的服务行业&#xff0c;主要涉及在买家和卖家之间进行房地产交易的媒介服务。这些服务包括评估和定价房产&#xff0c;对房产进行营销和推广&#xff0c;协助谈判和结算交易等。在这个行业中&#xff0c;中介公司通常会…

C国演义 [第九章]

第九章 买卖股票的最佳时机III题目理解步骤dp数组递推公式初始化遍历方向 代码 买卖股票的最佳时机IV题目理解步骤dp数组递推公式初始化遍历方向 代码 买卖股票的最佳时机III 力扣链接 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格 设计一个算法…