谷粒商城笔记-03-分布式基础概念

文章目录

  • 一,微服务
  • 二,集群、分布式
  • 三,远程调用
  • 四,负载均衡
  • 五,服务注册、服务发现、注册中心
  • 六,配置中心
  • 七,服务熔断、服务降级
    • 1,服务熔断
    • 2,服务降级
    • 3,区别
  • 八,API 网关

这一节内容比较干,全部是概念性的内容,不需要实操。

一,微服务

对于谷粒商城的架构,无论是从理论上还是从实际开发角度,可以把所有功能在一个服务里实现,互联网早期很多项目都是这样落地的。

我们常常把这种架构称之为“大单体”。

当功能越来越多、系统越来越庞大、用户越来越多、研发团队越来越大,“大单体架构”会暴露有很多问题,比如性能问题、开发效率问题。

出现了这些问题之后,很自然的想到把大单体服务拆分为多个小的服务,微服务就在这个背景下诞生了。

微服务就像是把一个单独的应用程序开发为一套小服务,比方说每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。

这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理。

简而言之:拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行

拆分在计算机世界是一个非常重要的思想和手段,当我们开发过程中遇到难题时,拆分通常是非常有效的解决方案。比如大单体拆分为微服务、分库分表、冷热分类、读写分离、主从分离、主备分离,都是常见的架构技巧,也是遇到问题后的解决手段。

当然,微服务架构也会带来很多挑战,典型的问题是像下图一样,众多的微服务,再加上彼此之间相互调用,成为一团乱码,如何管理和治理就是我们必须面对的挑战,这套课程的第二阶段就是解决这个问题的。

在这里插入图片描述

二,集群、分布式

这里有点咬文嚼字,了解即可。

集群是个名词,分布式可以理解为副词,起修饰作用。

比如,我们通常说MySQL集群,不会说MySQL分布式;会说Redis集群,不会说Redis分布式

集群是个物理形态,分布式是个工作方式。

只要是一堆机器,就可以叫集群,机器之间有无协作,无关紧要。

分布式描述了这样一种工作方式:一个工作被拆分为多个任务,分发到多个集群上执行。

所以分布式系统的不同服务之间是有协作关系的。

分布式系统必然是集群式部署,但是集群上运行的软件不一定能称之为分布式系统。

比如用户在商城系统下单,涉及订单系统、库存系统、商品系统、结算系统,需要这些系统协作才能完成这个功能,商城系统就是一个分布式系统。

MySQL集群虽然是部署在多台集群上,但彼此并不需要协作,所以不能称之为分布式系统

三,远程调用

在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要互相调用,这种调用称为远程调用

SpringCloud 中使用 HTTP+JSON 的方式完成远程调用。

在这里插入图片描述

四,负载均衡

分布式系统中,A 服务需要调用B服务,B服务是集群部署,在多台机器中都存在,从需求实现的角度,A 调用任意一个即可。

在这里插入图片描述

这种情况下,可能出现的一种情况是,A发出的请求始终固定打到其中一台机器上(比如图中的B1),导致这台服务器压力非常大,而另外两台服务器又很空闲。

最好是让A的请求均匀的分发到B服务的三台服务器上,避免某台服务器很忙其他服务器很闲的情况,这种效果通过负载均衡来实现。

常见的负载均衡算法:

  • ①轮询。为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后依次选择,直到最后一个,然后循环。
  • ②最小连接。优先选择连接数最少,也就是压力最小的后端服务器,在会话较长的情况下,可以考虑采取这种方式。
  • ③散列。根据请求源的 IP 的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以考虑采取这种方式。
  • ④随机。将请求随机转发到一台服务器上,在大样本下,不同服务器接收到的请求数大致均衡。

五,服务注册、服务发现、注册中心

A 服务调用 B 服务时,A 服务需要知道 B 服务所在服务器的IP。

我们当然可以考虑把B服务的IP写死在A服务的配置文件中,但是一旦B服务的IP发生变化,就要修改A服务的配置文件,低效且不安全。

更大的问题在于,如果服务非常多,比方说A服务除了调用B服务之外,还可能调用其他的几十个服务,如果全部都在A服务中写死IP,其运维难度之大、出错概率之高,是不能被容忍的。

我们还必须意识到,在现在K8S容器部署已经成为微服务部署的标准方案,服务的IP是动态分配的,不可预知且经常变化。

这就要求必须以一种更科学灵活的方式来保存每个服务的IP。

这就是注册中心的作用。

在这里插入图片描述

所有的服务在部署完成后,将服务名和IP注册到注册中心。

调用方根据要调用的服务的名称从注册中心获取IP,然后向这个IP发送请求。

注册中心还能动态感知服务是否可用,将不可用的服务剔除,避免出现无效的调用。

六,配置中心

在这里插入图片描述

每一个服务最终都有大量的配置,并且每个服务都可能部署在多台机器上。

变更配置是经常性的,在微服务架构下,有大量的服务器,如果每次变更都要去服务器上修改,是不可行的,不仅工作量大,效率低,风险也很大。

配置中心就可以完美解决这个问题,配置中心用来集中管理微服务的配置信息。每个服务启动后,自动从配置中心获取自己的配置。

七,服务熔断、服务降级

在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当其中一个服务不可用时,有可能会造成雪崩效应。

在这里插入图片描述
如图所示,假设库存服务不可用:

  • ①商品服务调用库存服务时,库存服务没有响应,商品服务就会一直等待
  • ②越来越多的请求到达商品服务,都等在商品服务,导致商品服务的资源被消耗殆尽,最终商品服务不可用
  • ③商品服务不可用后,订单服务请求商品服务,没有响应,一直等待
  • ④越来越多的请求到达订单服务,进入等待状态,导致订单服务的资源被耗尽,不能接收新的订单请求,订单服务也变成不可用的服务了

最终导致整个系统所有的服务都不可用了,这就是雪崩

要防止这样的情况,必须要有容错机制来保护服务。

1,服务熔断

服务熔断是指调用方发现服务不可用后,不再发出请求。

通常的策略是设置请求超时时间,当被调用的服务经常失败到达某个阈值,可以开启断路保护机制,后来的请求不再去调用这个服务。

2,服务降级

服务降级是指被调用方感知到系统资源紧张,无法处理更多的请求时,不再对请求做常规的处理,而是基于降级规则直接做出简单的响应,避免本机资源消耗和调用方的阻塞。

3,区别

服务熔断是调用方的手段,服务降级是被调用方的策略。

八,API 网关

在微服务架构中,API Gateway 作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能,帮助我们解决很多 API 管理难题。

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

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

相关文章

window自带的远程桌面设置凭证

原视频地址:https://www.bilibili.com/video/BV1YW4y1z7Du/?spm_id_from333.337.search-card.all.click&vd_sourceaeb69151d5ba645d3942f9f19bd6822a 我只是根据原视频做笔记 1、确认你是windows专业版 2、进入电脑->属性 3、取消勾选 4、进入电脑->管…

<Linux> 多线程

文章目录 线程线程互斥锁死锁 线程同步生产者消费者模型POSIX信号量基于环形队列的生产消费模型 线程池 线程 线程是进程内部可以独立运行的最小单位 进程是资源分配的基本单位,线程是调度器调度的基本单位 线程在进程的地址空间内运行 进程内的大部分资源线程是…

苹果电脑内存满了怎么清理空间垃圾 苹果电脑内存不足怎么办 MacBook优化储存空间

在日常使用苹果电脑过程中,某些用户可能经常会遇到存储空间不足的问题,尤其是当硬盘存储了大量的文件。这不仅影响电脑的运行速度,还可能导致应用程序运行不稳定。 一、节省 MacBook Pro 的空间 苹果电脑的操作系统(macOS&#x…

大模型学习笔记3【大模型】LLaMA学习笔记

文章目录 学习内容LLaMALLaMA模型结构LLaMA下载和使用好用的开源项目[Chinese-Alpaca](https://github.com/ymcui/Chinese-LLaMA-Alpaca)Chinese-Alpaca使用量化评估 学习内容 完整学习LLaMA LLaMA 2023年2月,由FaceBook公开了LLaMA,包含7B&#xff0…

好用的便签怎么把重要的事项单独窗口显示?

在日常的工作和生活中,便签就像是我身边的小助手,随时记录着琐碎的事项,提醒我别忘了重要的任务。想象一下,早晨一到办公室,打开电脑,桌面上密密麻麻的便签就像一张张待办事项的清单,它们或提醒…

JAVA 快递100wms工具类

快递wms工具类 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.kuaidi100.sdk.api.QueryTrack; import com.kuaidi100.sdk.api.Subscribe; import com.kuaidi100.sdk.contant.ApiInfoConstant; import c…

go开源webssh终端源码main.go分析

1.地址: https://github.com/Jrohy/webssh.git 2.添加中文注释地址: https://github.com/tonyimax/webssh_cn.git main.go分析 主包名:main package main //主包名 依赖包加载 //导入依赖包 import ("embed" //可执行文件…

解决js对象解构赋值多行格式被prettier格式化为一行的问题

目前没有特别好的解决方法,但是有一个hack方法,就是在第一个解构参数后面加个空注释,骗过prettier。 代码示例如下: const {prop1, //prop2,prop3, } props 欢迎关注公众号:清晰编程,获取更多精彩内容

方向导数和梯度

方向导数和梯度 1 导数的回忆2 偏导数及其向量形式偏导数的几何意义偏导数的向量形式 3 方向导数向量形式几何意义方向导数和偏导的关系 4 梯度5 梯度下降算法 1 导数的回忆 导数的几何意义如图所示: 当 P 0 P_{0} P0​点不断接近 P P P时,导数如下定义…

springboot私人诊所管理系统-计算机毕业设计源码93887

摘要 随着科技的不断发展和医疗服务的日益普及,私人诊所管理系统成为现代医疗管理的重要组成部分。该系统通过引入计算机技术和互联网平台,为患者提供方便快捷的就诊方式,同时也为诊所、医院提供高效的资源管理和服务优化的途径。本文将介绍私…

RocketMQ 顺序消息

顺序消息 顺序消息为云消息队列 RocketMQ 版中的高级特性消息,本文为您介绍顺序消息的应用场景、功能原理、使用限制、使用方法和使用建议。 应用场景 在有序事件处理、撮合交易、数据实时增量同步等场景下,异构系统间需要维持强一致的状态同步&#…

万字详解AI开发中的数据预处理(清洗)

数据清洗(Data Cleaning)是通过修改、添加或删除数据的方式为数据分析做准备的过程,这个过程通常也被称为数据预处理(Data Preprocessing)。对于数据科学家和机器学习工程师来说,熟练掌握数据清洗全流程至关…

21_硬件电路基础

目录 组合逻辑电路 组合逻辑电路原理 真值表 布尔代数 门电路 译码器 发光二极管LED 液晶字符显示器LCD 数据选择器 数据分配器 多路开关 时序逻辑电路 时序逻辑电路原理 时钟信号 触发器 电位触发方式触发器 边沿触发方式触发器 寄存器 移位器 计数器 总线…

经营人心:Mrs. B的百年传奇

这个故事的主角是Rose Blumkin,也被称为Mrs. B,她是Nebraska Furniture Mart的创始人。 她的故事确实是一个关于用户思维、客户关系和创业精神的经典案例。 Rose Blumkin于1893年出生在俄罗斯的一个小村庄,她在1921年移民到美国。 1937年&…

ImportError cannot import name ‘uic‘ from ‘PyQt5‘

ImportError cannot import name ‘uic’ from ‘PyQt5’ 1、描述 使用nuitka把PyQt5打包exe文件时报错: ImportError cannot import name ‘uic’ from ‘PyQt5’ 2、原因 这个是由于无法找到uic的目录导致的,在PyQt5的目录下是有uic文件的。 3、解决方案 找到导入uic…

SQL Server 2022的组成

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…

NGINX+KEEPALIVED | 一文搞懂NG+KL负载均衡高可用架构的实操教程(详细)

文章目录 NGINXKEEPALIVED负载均衡高可用架构为什么需要多节点应用为什么需要Nginx服务为什么需要Keepalived服务NGKL简述前期准备Linux服务器公共环境配置Server1 NGKL服务器配置Server2 NGKL服务器配置Server3 HTTP服务器配置Server4 HTTP服务器配置运行测试用例 NGINXKEEPAL…

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

Element中的消息提示组件Message和弹框组件MessageBox

简述:在 Element UI 中,Message和MessageBox都是比较常用的组件,Message用来提示消息,而MessageBox是一个用于创建模态对话框的组件。它可以用于在页面上快速展示信息、警告或错误提示,而不会阻止用户的其他操作。简单…