负载均衡详解

概述

负载均衡建立在现有的网络结构之上,提供了廉价、有效、透明的方式来扩展网络设备和服务器的带宽,增加了吞吐量,加强了网络数据的处理能力,提高了网络的灵活性和可用性。项目中常用的负载均衡有四层负载均衡和七层负载均衡。


四层负载均衡与七层负载均衡的对比

四层负载均衡基于 IP 地址和端口的方式实现网络的负载均衡,具体实现为对外提供一个虚拟 IP 地址和端口接收所有用户的请求,然后根据负载均衡配置和负载均衡策略请求发送给真实服务器

七层负载均衡基于 URL 等资源来实现应用层基于内容的负载均衡,具体实现为通过虚拟的 URL 或主机名接收所有用户的请求,然后将请求发送给真实的服务器

四层负载均衡和七层负载均衡的最大区别是:四层负载均衡只能针对 IP 地址和端口上的数据做统一的分发,而七层负载均衡能根据消息的内容做更加详细的有针对性的负载均衡。我们通常使用 LVS 等技术实现基于 Socket 的四层负载均衡,使用 Nginx 等技术实现基于内容分发的七层负载均衡,比如将以 user/*** 开头的 URL 请求负载到单点登录服务器,而将以 /business/*** 开头的 URL 请求负载到具体的业务服务器


负载均衡算法

1. 轮询均衡(Round Robin)

轮询均衡指将客户端的请求轮流分配到 1 至 N 台服务器上,每台服务器均被均等地分配一定数量的客户端请求。轮询均衡算法适用于集群中所有服务器都有相同的软硬件配置和服务能力的情况

2. 权重轮询均衡(Weighted Round Robin)

权重轮询均衡指根据每台服务器的不同配置及服务能力,为每台服务器都设置不同的权重值,然后按照设置的权重值轮询地将请求分配到不同的服务器上。例如,服务器 A 的权重值被设计成 3,服务器 B 的权重值被设计成3,服务器 C 的权重值被设计成 4,则服务器 A、B、C 将分别承担 30%、30%、40% 的客户端请求。权重轮询均衡算法主要用于服务器配置不均等的情况

3. 随机均衡(Random)

随机均衡指将来自网络的请求随机分配给内部的多台服务器,不考服务器的配置负载情况

4. 权重随机均衡(Weighted Random)

权重随机均衡算法类似于权重轮询算法,只是在分配请求时不再轮询发送,面是选择某个权重的服务器发送

5. 响应速度均衡(Response Time)

响应速度均衡指根据服务器设备响应速度的不同将客户端请求发送到响应速度最快的服务器上。对响应速度的获取是通过负载均衡设备定时为每台服务器都发出一个探测请求(例如 Ping)实现的。响应速度均衡能够为当前的每台服务器都根据其不同的负载情况分配不同的客户端请求,这有效避免了某台服务器单点负载过高的情况。但需要注意是这里探测到的响应速度是负载均衡设备到各台服务器之间的响应速度,并不完全代表客户端到服务器的响应速度,因此存在一定偏差

6. 最少连接数均衡(Least Connection)

最少连接数均衡指在负载均衡器内部记录当前每台服务器正在处理的连接数量,在有新的请求时,将该请求分配给连接数最少的服务器。这种均衡算法适用于网络连接和带宽有限、CPU 处理任务简单的请求服务,例如 FTP

7. 处理能力均衡

处理能力均衡算法将服务请求分配给内部负荷最轻的服务器,负荷是据服务器 CPU 型号、CPU 数量、内存大小及当前连接数等换算而成的。处理能力均衡算法由于考虑到了内部服务器的处理能力及当前网络的运行状况,所以相对来说更加精确

8. DNS 响应均衡

DNS 响应均衡算法指在分布在不同中心机房的负载均衡设备都收到同一个客户编的域名解析请求时,所有负载均衡设备均解析此域名并将解析后的服务器 IP 地址返回给客户端,客户端向收到第一个域名解析后的 IP 地址发起请求服务,而忽略其他负载均衡设备的响应

9. 哈希算法与衡

哈希算法均衡指通过一致性哈希算法和虚拟节点技术令相同参数的请求总是发送会同一台服务器,该服务器将长期、稳定地为某些客户端提供服务。在某台服务器被移除或异常宕机后,该服务器的请求基于虚拟节点技术均衡到其他服务器,而不会影响集群整售的稳定性

10. IP 地址哈希

IP 地址哈希指在负载均衡器内部维护了不同链接上客户端和服务器的 IP 地址对应关系表,将来自同一客户端的请求统一转发给相同的服务器。该算法能够以会话为单位,保证同一客户端的请求能够一直在同一台服务器上处理,主要适用于客户端和服务器需要保持长连接的场景,比如基于 TCP 长连接的应用

11. URL 哈希

URL 哈希指通过管理客户端请求 URL 信息的哈希表,将有相同 URL 的请求转发给同一台服务器。该算法主要适用于在七层负载中将不同类型的用户请求转发给不同类型的应用服务器的场景

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

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

相关文章

redis面试(二十)读写锁WriteLock

写锁WriteLock 和读锁一样,在这个地方执行自己的lua脚本,我们去看一下 和read没有多大的区别 KEYS[1] anyLock ARGV[1] 30000 ARGV[2] UUID_01:threadId_01:write hget anyLock mode,此时肯定是没有的,因为根本没这个锁 …

代码随想录训练营day43|动态规划part10

最长递增子序列 力扣题目链接 class Solution { public:int lengthOfLIS(vector<int>& nums) {int len nums.size();int result 1;vector<int> dp(len, 1);for(int i 1; i < len; i){for(int j 0; j < i; j){if(nums[j] < nums[i]){dp[i] max(…

flink+flinkcdc+同步(MYSQL到MYSQL)实践

flink+flinkcdc+同步MYSQL到MYSQL 目标 通过Flink +FlinkCDC实现MYSQL到MYSQL的同步【单表,多表】运行环境 mysql8.0.3 | flink-1.13.2 | flink-connector-jdbc_2.11-1.13.2.jar |flink-sql-connector-mysql-cdc-2.1.0.jar前置条件 开启bin_log日志 以及设置bin_log格式=RO…

@RequestBody与@RequestParam:Spring MVC中的参数接收差异解析

在Spring MVC中&#xff0c;RequestBody和RequestParam是两个常用于接收客户端请求参数的注解&#xff0c;但它们的使用场景和作用机制存在显著差异。了解这些差异对于开发RESTful API和处理HTTP请求至关重要。本文将详细探讨RequestBody与RequestParam的区别。 RequestParam …

“双指针”算法下篇

WeChat_20240806081335 对双指针这一思想在OJ 里面的相关应用&#xff0c;感兴趣的友友们&#xff0c;可以看下此篇博客 https://blog.csdn.net/X_do_myself/article/details/141291451?spm1001.2014.3001.5502 目录 一盛最多水的容器 1题目链接&#xff1a;盛最多水的容器…

音频分割软件有什么?最方便的音频分割软件分享给你

一段长音频就像是一本厚重的百科全书&#xff0c;而音频剪辑师的任务&#xff0c;就是要将这本书拆分成数个章节&#xff0c;每章都有其独立的主题和内容&#xff0c;这非常考验剪辑师们的音频分割技巧。 幸运的是&#xff0c;随着技术的发展&#xff0c;市面上出现了许多优秀…

在 Spring Boot 中为 MyBatis 添加拦截器

在 Spring Boot 中为 MyBatis 添加拦截器以实现分表查询涉及几个步骤。以下是如何在 Spring Boot 应用中配置和使用 MyBatis 拦截器的指南&#xff0c;具体以分表查询为例&#xff1a; 创建拦截器 首先&#xff0c;定义一个自定义的 MyBatis 拦截器&#xff0c;实现 Intercept…

【八股】DDD领域驱动设计

什么是 DDD 领域驱动设计 🔜 是一种软件设计方法,核心思想是通过领域驱动设计方法定义领域模型,从而确定业务和应用边界,保证业务模型和代码模型的一致性。它倡导统一语言,提出了一系列概念,包括实体、值对象、聚合根等。 🔜 优势:帮助开发团队更好地理解和表达业务…

微信小程序引入全局环境变量

有时候一套代码要在多个小程序appId下使用,其中又有一些数据(文字)需要做区分.可以使用下面的方法 把要配置的数据以export default 形式导出 在app.js中,引入project.config.0.js文件,将导出的数据放在globalData中 在页面目录中,即可利用getApp()方法使用全局变量 也可以放数…

剪辑视频的软件在手,温馨瞬间秒变电影级大片

在现在这个啥都能数字化的年代&#xff0c;家里拍的视频成了咱们记录生活、留下美好回忆的好办法。不过&#xff0c;好多人可能就只是随便拍拍&#xff0c;然后直接发出去&#xff0c;没想过用专业的剪辑视频的软件来搞一搞&#xff0c;让自己的视频更有感觉&#xff0c;看起来…

Python-基础-面向对象

文章目录 面向对象1 简介2 基本操作2.1 类2.2 对象2.3 继承 面向对象 1 简介 面向对象&#xff08;OOP&#xff09;是一种对现实世界理解和抽象的方法&#xff0c;对象的含义是指在现实生活中能够看得见摸得着的具体事物&#xff0c;一句比较经典的描述是一切皆对象&#xff…

微服务通信

一、Feign远程调用 Feign是Spring Cloud提供的⼀个声明式的伪Http客户端&#xff0c; 它使得调⽤远程服务就像调⽤本地服务⼀样简单&#xff0c; 只需要创建⼀个接⼝并添加⼀个注解即可。 Nacos很好的兼容了Feign&#xff0c; Feign 默认集了Ribbon&#xff0c; 所以在Nacos下…

vue全局参数

/* eslint-disable no-new */ new Vue({el: #app,router,components: { App },template: <App/>,data:function(){return{wbWinList: [] // 定义的变量&#xff0c;全局参数}}, }) //使用全局参数 // this.$root.backgroundColor 666;其它页面如果想监听改变 //监听全…

git cherry-pick 用法

/* * cherry-pick */ git cherry-pick 允许开发者有选择地合并其他分支的提交到当前分支&#xff0c; 这对于解决代码冲突、修复bug以及在不同分支之间转移提交非常有用。 基本用法&#xff1a; 1.合并一个提交&#xff1a;通过指定提交的哈希值&#xff0c…

polarctf靶场[CRYPTO]显而易见的密码、[CRYPTO]夏多的梦、[CRYPTO]再这么说话我揍你了、[CRYPTO]神秘组织M

[CRYPTO]显而易见的密码 考点&#xff1a;ntlm编码 打开文件&#xff0c;显示内容就是ntlm格式 ntlm解密 在线网站&#xff1a; https://www.cmd5.com/便可得到flag [CRYPTO]夏多的梦 根据题目提示可以猜测为夏多密码 考点&#xff1a;夏多密码 在线加密原理网站&#x…

使用axios的fetch adapter遇到浏览器兼容问题

axios 2024年5月20号发布1.7.0版&#xff0c;开始支持fetch adapter&#xff0c;我是很高兴的&#xff0c;把此前fetch写的语句换成axios的&#xff0c;感觉简洁了很多。 因为我要post传urlencode编码参数&#xff0c;所以用fetch得这样&#xff1a; let data{k1:v1,k2:v2,k3:…

链表OJ题——链表的回文结构

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 链表的回文结构 二、解题思路 三、解题代码

探索JetBrains IDE数据库驱动的存储位置及离线安装指南

JetBrains IDE&#xff0c;如IntelliJ IDEA和GoLand&#xff0c;是广受开发者喜爱的集成开发环境。它们提供了强大的数据库支持功能&#xff0c;包括数据库连接和操作。了解数据库驱动的存储位置对于进行离线安装和配置非常重要。 理解数据库驱动 数据库驱动是软件应用程序与…

4种方法!前端判断页面是在PC端还是移动端打开

4种方法&#xff01;前端判断页面是在PC端还是移动端打开 在写前端的过程中&#xff0c;有时候考虑适配与页面权限等问题的时候&#xff0c;需要涉及到用户访问的设备情况&#xff0c;下面将介绍几种常见的判断页面是在PC端还是移动端打开的方法。 方法1. 基于 navigator.use…

【JAVA基础】类与对象

文章目录 Java类Java对象为什么Java会设计对象Java对象怎么用程序的执行流程 Java类 JAVA类&#xff1a;项目中新建的.java文件就是JAVA类&#xff0c;其中包含代码&#xff0c;通过javac命令编译为二进制.class文件&#xff0c;让计算机读取。类是对象的模板 Java对象 JAVA…