【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型

news2024/9/20 20:50:23

客户端与服务端负载均衡机制

可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。

集群与负载均衡

负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 先来看什么是集群

从图中可以看到,集群就是由同一个服务进行的水平扩展,只需要复制多方,就能组成一个群体,这个群体需要使用负载均衡器维系在一起,他们才能成为一个集群整体,才能说的上是一个集群架构。如果没有负载均衡器,单独靠自己无法成为一个整体,只能是单独的个体,所以负载均衡器也是他们和外部联系的沟通渠道,是一个领头羊。此外集群也提供了高可用的目的,如果只有一个节点,挂了则无法再继续为用户提供服务了,显然这不符合如今的市场,所以高可用一定要落地的。

负载均衡器: 此外,负载均衡器是可以用于平摊流量的,如果现在流量有300万,那么可以每台节点平摊100万的请求,这样并发量就提升了,压力也就平摊了。

多级网关(负载均衡器的类型)

  • 硬负载均衡器:F5,性能非常强大,企业级应用可以完全依靠他,但是,是在太贵了,中小公司是无法承担的,少则几十万,多则上百万,我们的老系统就是用的F5,每年还要150万的维护费用,企业负担太大了。传统软件用F5的会比较多。
  • 软负载均衡器:解决中小企业痛点,很便宜,通过软件来实现负载均衡。只需要安装配置则可以实现负载均衡的效果,比如Nginx,Apache,Haproxy,都可以,那么这也是目前java生态里用的最多的方式。

此外还有基于网络模型的四层负载和七层负载:

  • 四层代理:基于TCP,比如LVS+Keepalived,这玩意就是云负载均衡器的底层,如果自己部署需要有独立的机房。配置起来相对比较麻烦一些,这个我在架构师课程中有手把手的搭建以及配置,有兴趣可以了解一下。
  • 七层代理:基于HTTP,最具有代表的则是Nginx了,后续我们也会用到,这也是网关,所以也可以称之为7层网关。

四层和七层的理解区别,四层制作请求转发,不会处理请求,而七层可以处理请求的,比如添加headers请求头,修改cookie,甚至设置缓存,对数据压缩等等,所以我们的微服务网关gateway也是四层网关的负载均衡器。所以,相对来说四层的功能性会比七层少很多,因为他不能处理请求,正因为这样,他的处理执行能力是相当强大的,要比七层快很多。

举个例子,你到园区要面试,园区保安大爷只会跟你说,你往后走,左转走到底,就是我们公司了。这是七层,他不会带你去。而你到了大楼,大楼的前台会领着你到公司,带着你过去,那么他就是七层负载了。这样你就可以更好的理解四层和七层的区别了。

多级网关模型:

负载均衡算法

  • 轮询
  • 权重
  • url_hash
  • ip_hash

服务端与客户端负载均衡

  • 服务端负载均衡 上面所说的都是基于服务端的负载均衡器,啥意思,这是因为请求的分发是需要通过在服务端进行计算的,如下图:

  • 客户端负载均衡 客户端负载均衡拉取集群列表是相反,他会拉取ip列表到本地进行算法,随后携带地址去请求目标接口,如下图:

所以相对的,使用客户端负载均衡器的一个整体性能会更高一些,因为压力在客户端,服务端不需要进行计算了,如果是服务端负载均衡器,那么所有请求都会在一个地方进行计算,那么这台节点就会很热,所以往往使用的云服务器硬件配置也会更高更好一些。

此外,客户端负载均衡是支持动态扩容的,因为他是去中心化的,如果是服务端负载,那么每次扩展节点都需要修改配置并且重启;而客户端则不需要,直接复制一个新节点就行了,不需要做额外代码或配置的修改,非常方便。

微服务负载均衡NacosLoadBalancer

LoadBalancer 其实我们之前在演示用户集群的时候其实就加入了这个依赖,他就是用于处理微服务的负载均衡的,他有自己的一套负载均衡算法。早期其实使用的是Ribbon,只不过目前因为种种原因弃用了。现在所使用的都是LoadBalancer,而且这是SpringCloud官方出的客户端负载均衡器,目的就是用来替代Ribbon的。

测试负载均衡:

和用户微服务一样,构建2~3个工作微服务集群:

配置集群服务:

网关排除url,为了方便测试:

默认模式就是轮询规则。

Nacos的负载均衡

在nacos中设置微服务的负载均衡权重比例。但是设置后不生效。

早期版本自带ribbon,可以直接在容器中构建一个Bean对象的NacosRule即可。新版本SpringCloudAibaba已经没有ribbon了。

所以新版本可以直接在yml中进行配置即可: 在网关和用户服务中添加:

spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true

最后请求访问这个接口,观察结果即可。

拓展:OSI七层网络模型

网络模型就是 OSI(Open System Interconnect),意思为开放网络互联,是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版的,他是一种网络互联模型,也是一种规范。

网络模型分为七层,也就是当用户发起请求到服务器接收,会历经七道工序,或者说用户利用互联网发送消息给另一个用户,也会历经七道工序。这七层可以分为如下:

| 层级 | 名称 | 说明 | | --- | --- | --- | | 第七层 | 应用层 | 与用户行为交互 | | 第六层 | 表示层 | 定义数据格式以及数据加密 | | 第五层 | 会话层 | 创建、管理以及销毁会话 | | 第四层 | 传输层 | 创建、管理请求端到响应端(端到端)的连接 | | 第三层 | 网络层 | 请求端的IP地址 | | 第二层 | 数据链路层 | 提供介质访问与链路管理 | | 第一层 | 物理层 | 传输介质,物理媒介 |

以上七层每层可以与上下相邻层进行通信。每一层都是非常复杂的,我们不在这里深究,我们以举例的形式来阐述每一层是干嘛的。

  • 应用层:这是面向用户的,最靠近用户,为了让用户和计算机交互,在计算机里会有很多软件,比如eclipse,idea,qq,nginx等,这些都是应用软件,用户可以通过这些应用软件和计算机交互,交互的过程其实就是接口的调用,应用层为用户提供了交互的接口,以此为用户提供交互服务。那么在这一层最常见的协议有:HTTP,HTTPS,FTP,SMTP,POP3等。Nginx在本层,为七层负载均衡。 举例:我要寄一封信给远在天边的老外LiLei,我会打开快递软件下单,这个时候我是用户,快递软件就是应用服务,是建立在计算机上的,提供给用户交互的一种服务或称之为手段。
  • 表示层:该层提供数据格式编码以及加密功能,确保请求端的数据能被响应端的应用层识别。 举例:我写中文给LiLei,他看不懂,这个时候我就会使用翻译软件把中文翻译成英文,随后信中涉及到一些比较隐私的信息我会加密一下,这个时候翻译软件和加密器就充当了表示层的作用,他用于显示用户能够识别的内容。
  • 会话层:会话可以理解为session,请求发送到接受响应的这个过程之间存在会话,会话层就充当了这一过程的管理者,从创建会话到维护会话最后销毁会话。 举例:我每次写信给LiLei都会记录在一个小本本上,寄信时间日期,收信时间日期,这本小本本上存有每次通信记录,这个小本本就相当于是一个会话的管理者。又或者说,我们平时在打电话,首先需要拨打电话,这是建立会话,对方接听电话,此时正在通话(维持并管理会话),通话结束后会话销毁,那么这也是一次会话的生命周期。
  • 传输层:该层建立端到端的连接,他提供了数据传输服务,在传输层通信会涉及到端口号,本层常见的协议为TCP、UDP,LVS就是在传输层,也就是四层负载均衡。 举例:我和LiLei通信过程中会借助快递公司,快递公司会分配快递员取件和寄件,那么这个快递员则充当传输层的作用。
  • 网络层:网络通信的时候必须要有本机IP和对方的IP,请求端和响应端都会有自己的IP的,IP就相当于你家地址门牌号,在网络上云服务器有固定的公网IP,普通计算机也有,只不过是动态IP,运营商每天会分配不同的IP给你的计算机。所以网络层也能称之为IP层,IP是互联网的基础根本。能提供IP分配的设备则为路由器或交换机。 举例:对于拥有固定IP的云服务来说,他们都是由腾讯云、阿里云等这样的供应商提供的,他们为云服务器提供固定ip;电信、移动、联调等运营商为你的计算机动态分配ip,每天都不同;则这些供应商和运营商都是网络层。同理,快递员由物流公司分配和管理,那么物流公司就是网络层咯。
  • 数据链路层:这一层会提供计算机MAC地址,通信的时候会携带,为了确保请求投递正确,所以他会验证检测MAC地址,以确保请求响应的可靠性。 举例:快递员在投递派送的时候,他(或客服)会预先提前打电话给你,确认你家地址对不对、有没有人、货到付款有没有准备好钱等等,这个时候快递员(或客服)就充当了数据链路层的职责。
  • 物理层:端到端请求响应过程中的媒介,物理介质,比如网线、中继器等等设备,都是你在端到端交互过程中不可缺少的基础设备。 举例:快递员在投递的过程中,你写的信会历经一些交通运输工具,比如首先通过飞机运输到国外,在海关统一拿到信以后会通过汽车运输到LiLei所在城市的物流集散地,最后快递员通过三轮电频车寄到LiLei家里,这个时候,飞机、汽车、三轮电瓶车都是物理层的媒介。

那么以上就是七层网络模型,大家需要理解其意义即可。需要注意的是Nginx存在于第七层,属于七层负载均衡;而第四层会有LVS,属于四层负载均衡。

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

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

相关文章

CSS:顶部导航栏固定位置、分类标题栏、底部提示文案固定位置

一、效果图 页面body的css代码 body {position: absolute;width: 100%;height: 100vh;padding: 0;margin: 0;top: 0;left: 0;bottom: 0;background-color #eee;/* overflow: auto;overflow-y: scroll; *//* ::-webkit-scrollbar {display: none;} */ }.content-root {width: 1…

python多进程加速函数运行

python多进程运行可以使函数运行在程序主进程以外,减少主进程的调用,并且可以加速子进程的运行速度   为了测试多进程的加速效果,我们可以通过创建一个包含计算密集型任务的函数,并使用多进程来并行执行这些任务。我们将对比单进…

Telegram曝零日漏洞,可伪装成视频攻击安卓用户

ESET Research在一个地下论坛上发现了一个针对Android Telegram的零日漏洞广告。 ESET将该漏洞命名为“EvilVideo”,并将其报告给Telegram,Telegram于7月11日更新了该应用程序。 EvilVideo允许攻击者发送恶意的有效载荷,这些载荷以视频文件…

《白话机器学习的数学》第2章——学习回归

2.1设置问题 1.机器学习所做的事情正是从数据中进行学习,然后给出预测值。 2.2定义模型 1.一次函数的表达式: 其中θ叫做参数。 在统计学领域,人们常常使用 θ 来表示未知数和推测值。采用 θ加数字下标的形式,是为了防止当未知数…

熟悉set/map了解KV模型和pair结构

set基本介绍 set是key模型,本质是确定一个 元素在不在此容器中,也就是说 set中存储的是一个单一数据 1. set是按照一定次序存储元素的容器 2. 在set中,元素的value也标识它(value就是key,类型为T), 并且每个value必须是唯一的。set中的元素不…

PHP教程001:PHP介绍和环境配置

文章目录 1、php是什么2、php能做什么3、php程序执行流程4、需要什么基础5、环境介绍5.1、WEB环境5.2、环境集成包3、phpStudio软件下载 1、php是什么 通用:跨平台,如windows、Linux、MacOS开源免费服务器端脚本语言 2、php能做什么 可以快速动态的生…

群管机器人官网源码

一款非常好看的群管机器人html官网源码 搭建教程: 域名解析绑定 源码文件上传解压 访问域名即可 演示图片: 群管机器人官网源码下载:客户端下载 - 红客网络编程与渗透技术 原文链接: 群管机器人官网源码

很酷的仿真翻页书HTML源码,书本页面是加载的图片,基于JQuery实现的翻页特效,结合一些js插件,看起来很酷,在实现在线翻书项目。

仿真翻页书HTML源码https://www.bootstrapmb.com/item/14742 创建一个仿真的翻页书效果在HTML和CSS中可以通过多种方式实现,但通常这也会涉及到JavaScript(或jQuery)来处理交互和动画。以下是一个简单的示例,展示如何使用HTML、…

openssl 加密

使用tar命令在Linux中加密文件可以通过两种方式实现:使用gzip压缩的同时加密,或者使用加密选项。 1. 使用gzip压缩的同时加密: “ tar cz file1 file2 | openssl enc -e -aes256 -out archive.tar.gz.enc “ – cz:创建tar压缩文…

【数学建模】基于贪心算法的电力市场的输电阻塞管理(附论文及matlab、lingo代码)

适合数学建模新手研究的题目,备战国赛的同学可以拿这道题目练手,本文含论文代码,帮助解题理解思路。 题目: (1)题目信息: 某电网有若干台发电机组和若干条主要线路,每条线路上的有…

k8s中部署nacos

1 部署nfs # 在k8s的主节点上执行 mkdir -p /appdata/download cd /appdata/download git clone https://github.com/nacos-group/nacos-k8s.git 将nacos部署到middleware的命名空间中 kubectl create namespace middleware cd /appdata/download/nacos-k8s # 创建角色 kub…

鸿蒙界面开发

界面开发 //构建 → 界面 build() {//行Row(){//列Column(){//文本 函数名(参数) 对象.方法名(参数) 枚举名.变量名Text(this.message).fontSize(40)//设置文本大小.fontWeight(FontWeight.Bold)//设置文本粗细.fontColor(#ff2152)//设置文本颜色}.widt…

乐鑫ACK方案低成本设备开发,智能家居无线技术应用,启明云端乐鑫代理商

随着智能家居行业的蓬勃发展,用户对于智能设备的需求日益增长。乐鑫以其创新的Alexa Connect Kit (ACK) 方案,开启了智能家居设备开发的新篇章。 Alexa Connect Kit(ACK)方案,不仅提供了一个集成Alexa语音服务的高效开…

Redis八股文(一)

目录 1.什么是Redis? 2.Redis和Memcached有什么区别? 3.为什么Redis作为MySQL的缓存? 4.Redis数据类型及其使用场景分别是什么? 5.五种常见数据类型是怎么实现的? 6.Redis是单线程吗? 7.Redis单线程…

iterm2工具的使用|MAC电脑终端实现分屏|iterm2开启滚动操作

iterm2 工具概括 iTerm2 是一款非常强大的终端工具。 iTerm2 最初是为 macOS 开发的,但也有 Windows 、Linux 发行版(Ubuntu、centos…)可用。 应用场景 Mac操作系统中想实现终端分屏 iterm2 工具特点 多标签和分屏: 可以在同一个窗口中打开多个标签…

【css】实现扫光特效

对于要重点突出的元素,我们经常可以看到它上面打了一个从左到右的斜向扫光,显得元素亮闪闪的!类似于下图的亮光动效 关键步骤 伪元素设置position :absolute【也可以不用伪元素,直接创建一个absolute元素盖在上面】设置渐变line…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-抄送服务处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、因为仿钉钉设计器里抄送人是一个服务任务&#xff0c;所以要根据这个服务任务进行处理 2、前端就是一个抄送&#xff0c;选择人 3、这里用了jeecg的选择人组件 <el-form-item prop…

Java开发之Redis

1、非关系型数据库、快、高并发、功能强大 2、为什么快&#xff1f;内存单线程 非阻塞的IO多路复用有效的数据类型/结构 3、应用&#xff1a;支持缓存、支持事务、持久化、发布订阅模型、Lua脚本 4、数据类型&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字…

【深度学习】LDA线性判别分析

date:2024/07/23 author:sion tag:Deeping Learn LDA(线性判别分析) 文章目录 LDA(线性判别分析)1.LDA是什么LDA是一种解决二分类问题的线性方法。它描述&#xff0c;对于给定样例集&#xff0c;将样例点投影到一条直线上&#xff0c;这条直线能使异样的样例相距远&#xff0c;…

three完全开源扩展案例05-围栏着色器

https://www.threelab.cn/three-cesium-examples/public/index.html#/codeMirror?navigationThree.js%E6%A1%88%E4%BE%8B[r166]&classifyshader&idfenceShader 更多案例 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/O…