当前位置: 首页 > article >正文

LVS、NGINX、HAPROXY的调度算法

目录

一、LVS(Linux Virtual Server)调度算法

(一)静态调度算法

(二)动态调度算法

二、NGINX调度算法

(一)内置调度算法

(二)第三方模块支持的调度算法

三、HAProxy调度算法

(一)基本调度算法

(二)哈希调度算法

(三)动态调度算法

(四)高级特性

四、三者调度算法对比总结


一、LVS(Linux Virtual Server)调度算法

(一)静态调度算法
  1. 轮询(Round Robin, RR)
  • 工作原理:按顺序依次将请求分配到不同的后端服务器,不考虑服务器的负载和性能差异。
  • 特点:实现简单,适用于服务器性能相近的场景。
  • 适用场景:服务器配置相同且负载均衡要求不高的情况。
  1. 加权轮询(Weighted Round Robin, WRR)
  • 工作原理:为每个后端服务器设置权重,权重越高的服务器接收的请求越多,按权重比例依次分配请求。
  • 特点:可根据服务器性能分配请求,性能好的服务器承担更多负载。
  • 适用场景:后端服务器性能存在差异的场景。
  1. 源地址哈希(Source Hashing, SH)
  • 工作原理:根据客户端的源IP地址进行哈希计算,将相同源IP的请求分配到同一台后端服务器,实现会话保持。
  • 特点:无需额外的会话存储,基于IP实现会话保持。
  • 适用场景:需要会话保持且对服务器亲和性要求不高的场景。
  1. 目标地址哈希(Destination Hashing, DH)
  • 工作原理:根据目标IP地址进行哈希计算,将对同一目标IP的请求分配到同一台后端服务器,常用于缓存场景。
  • 特点:可提高缓存命中率。
  • 适用场景:后端存在缓存服务器的场景。
(二)动态调度算法
  1. 最少连接(Least Connections, LC)
  • 工作原理:将请求分配给当前连接数最少的后端服务器,认为连接数少的服务器负载较轻。
  • 特点:动态感知服务器负载,更合理地分配请求。
  • 适用场景:长连接业务较多的场景。
  1. 加权最少连接(Weighted Least Connections, WLC)
  • 工作原理:在最少连接的基础上,结合服务器权重,权重高的服务器在连接数相同时优先接收请求。
  • 特点:兼顾服务器负载和性能差异。
  • 适用场景:后端服务器性能不同且存在长连接业务的场景。
  1. 动态反馈(Dynamic Feedback, DF)
  • 工作原理:根据后端服务器的实时负载(如CPU利用率、内存使用等)动态调整调度策略。
  • 特点:能更精准地反映服务器实际负载情况。
  • 适用场景:对服务器负载监控要求较高的复杂场景。

二、NGINX调度算法

(一)内置调度算法
  1. 轮询(Round Robin)
  • 工作原理:与LVS的轮询类似,按顺序依次分配请求到后端服务器。
  • 特点:默认调度算法,实现简单。
  • 适用场景:服务器性能一致的简单场景。
  1. 加权轮询(Weighted Round Robin)
  • 工作原理:通过weight参数为后端服务器设置权重,按权重比例分配请求。
  • 特点:可根据服务器性能调整负载分配。
  • 适用场景:服务器性能不同的场景。
  1. IP哈希(IP Hashing)
  • 工作原理:根据客户端IP地址进行哈希计算,将相同IP的请求分配到同一服务器,实现会话保持。
  • 特点:基于IP实现会话保持,无需额外存储。
  • 适用场景:需要会话保持的场景。
  1. 最少连接(Least Connections)
  • 工作原理:将请求分配给当前活跃连接数最少的后端服务器。
  • 特点:动态感知服务器连接负载。
  • 适用场景:长连接业务场景。
(二)第三方模块支持的调度算法
  1. fair
  • 工作原理:根据后端服务器的响应时间来分配请求,响应时间短的服务器优先接收请求。
  • 特点:能更好地反映服务器的处理能力。
  • 适用场景:对响应时间敏感的业务场景,需安装upstream_fair模块。
  1. url_hash
  • 工作原理:根据请求的URL进行哈希计算,将相同URL的请求分配到同一服务器,常用于缓存。
  • 特点:提高缓存命中率。
  • 适用场景:存在缓存需求的场景,需安装ngx_http_upstream_url_hash模块。

三、HAProxy调度算法

(一)基本调度算法
  1. 轮询(Round Robin, rr)
  • 工作原理:按顺序循环分配请求到后端服务器,支持权重。
  • 特点:简单高效,支持权重调整。
  • 适用场景:服务器性能相近的场景。
  1. 加权轮询(Weighted Round Robin, wrr)
  • 工作原理:根据服务器权重按比例分配请求,权重可动态调整。
  • 特点:灵活处理服务器性能差异。
  • 适用场景:服务器性能不同的场景。
  1. 最少连接(Least Connections, lc)
  • 工作原理:将请求分配给连接数最少的服务器,支持权重。
  • 特点:动态适应服务器负载。
  • 适用场景:长连接业务场景。
  1. 加权最少连接(Weighted Least Connections, wlc)
  • 工作原理:结合服务器权重和连接数分配请求,权重高且连接数少的服务器优先。
  • 特点:兼顾权重和负载。
  • 适用场景:服务器性能不同且长连接业务较多的场景。
(二)哈希调度算法
  1. 源地址哈希(source)
  • 工作原理:根据客户端源IP哈希,实现会话保持。
  • 特点:基于IP的会话保持。
  • 适用场景:需要会话保持的场景。
  1. 目标地址哈希(destination)
  • 工作原理:根据目标IP哈希,用于服务端负载均衡。
  • 特点:适用于后端多集群场景。
  • 适用场景:后端存在多个服务集群的场景。
  1. URI哈希(uri)
  • 工作原理:根据请求的URI哈希,将相同URI的请求分配到同一服务器。
  • 特点:适用于缓存场景。
  • 适用场景:需要根据URI进行缓存的场景。
  1. URL参数哈希(url_param)
  • 工作原理:根据URL中的参数(如会话ID)哈希,实现会话保持。
  • 特点:可基于特定参数实现更精准的会话保持。
  • 适用场景:需要基于URL参数进行会话保持的场景。
(三)动态调度算法
  1. least load
  • 工作原理:根据服务器的负载指标(如连接数、响应时间等)选择负载最小的服务器。
  • 特点:动态感知服务器实际负载。
  • 适用场景:对服务器负载敏感的复杂场景。
  1. first
  • 工作原理:按服务器列表顺序分配请求,直到服务器故障则切换到下一个。
  • 特点:简单直接,优先使用第一个可用服务器。
  • 适用场景:对调度策略要求不高的场景。
(四)高级特性
  1. 快慢启动(slow start)
  • 工作原理:新加入的服务器初始权重较低,随着运行逐渐增加权重,避免突然承担过多负载。
  • 特点:保护新服务器,平滑负载引入。
  • 适用场景:服务器动态添加或重启的场景。
  1. 动态权重调整
  • 工作原理:根据服务器的健康状态和响应时间动态调整权重。
  • 特点:实时适应服务器状态变化。
  • 适用场景:对服务器状态监控要求高的场景。

四、三者调度算法对比总结

维度

LVS

NGINX

HAProxy

层次

四层(网络层)

四层/七层(应用层)

四层/七层

性能

最高,内核级

较高

高,支持四层和七层

调度算法丰富度

中等,侧重基础算法

中等,部分算法需第三方模块

最丰富,支持多种高级算法

会话保持

源地址哈希等

IP哈希等

多种哈希算法,支持参数哈希

动态负载感知

支持动态反馈等

支持最少连接、fair(需模块)

支持least load、动态权重调整等

适用场景

高并发、四层负载均衡

七层应用负载均衡,如Web服务

复杂场景,同时支持四层和七层,功能全面

通过对LVS、NGINX和HAProxy调度算法的整理,可根据具体业务需求选择合适的负载均衡工具及调度策略,以实现高效的请求分发和服务器资源利用。

相关文章:

LVS、NGINX、HAPROXY的调度算法

目录 一、LVS(Linux Virtual Server)调度算法 (一)静态调度算法 (二)动态调度算法 二、NGINX调度算法 (一)内置调度算法 (二)第三方模块支持的调度算法…...

C++ 使用 ffmpeg 解码本地视频并获取每帧的YUV数据

一、简介 FFmpeg 是一个‌开源的多媒体处理框架‌,非常适用于处理音视频的录制、转换、流化和播放。 二、代码 示例代码读取一个本地视频文件,解码并将二进制文件保存下来。 注意: 代码中仅展示了 YUV420P 格式,其他 NV12/NV2…...

分布式微服务系统架构第143集:pom文件

加群联系作者vx:xiaoda0423 仓库地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ https://github.com/webVueBlog/fastapi_plus https://webvueblog.github.io/JavaPlusDoc/ ✅ 各字段说明及是否可改 字段名说明是否可修改修改建议…...

2.0 阅读方法论与知识总结

引言 本文将详细分析考研英语阅读做题步骤,并对方法论进行总结,最后通过真题练习巩固方法。 一、做题步骤 所有技巧都建立在精读真题的基础上!建议按以下节奏复习: 1️⃣ 做题 先看题干了解文章大致主旨(看看有没有…...

5. Qt中.pro文件(1)

本节主要讲.pro文件的作用和一些相关基础知识与操作。 本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1 PRO文件 1.1 pro文件作用 添加需要用到的QT模块,如通过QT module_name来添加需要用到的Qt模块。指定生…...

第八部分:第三节 - 事件处理:响应顾客的操作

用户与界面的互动是通过事件触发的,比如点击按钮、在输入框中输入文本、提交表单等。React 提供了一套跨浏览器的事件系统,让我们可以在组件中方便地处理这些事件。这就像点餐系统需要能够识别顾客的各种操作(按键、滑动屏幕)并作…...

共识机制全景图:PoW、PoS 与 DAG 的技术对比

目录 共识机制全景图:PoW、PoS 与 DAG 的技术对比 🧱 一、工作量证明(PoW) 原理概述 优点 缺点 示例代码(Python) 💰 二、权益证明(PoS) 原理概述 优点 缺点 …...

学习笔记085——Spring Data JPA笔记

1、什么是Spring Data JPA? Spring Data JPA 是 Spring 框架的一个子项目,它简化了基于 JPA (Java Persistence API) 的数据访问层的实现。它通过减少样板代码和提供默认实现,让开发者能够更快速地构建数据访问层。 1.1、主要特点 减少样板…...

可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana

可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana 在当今数据驱动的业务环境中,可视化大屏已成为企业展示数据洞察的重要工具。本文将从功能、部署、分享、参数化大屏四个维度对主流可视化大屏工具进…...

内网穿透:打破网络限制的利器!深入探索和简单实现方案

在如今这个数字化时代,网络已经成为我们生活和工作中不可或缺的一部分。但你是否遇到过这样的困扰:在家办公时,想要访问公司内部的文件服务器,却因为网络限制无法连接;搭建了一个炫酷的个人网站,却只能在自…...

如何选择合适的哈希算法以确保数据安全?

在当今数据爆炸的时代,从个人身份信息到企业核心商业数据,从金融交易记录到医疗健康档案,数据已然成为数字世界的核心资产。而哈希算法作为数据安全领域的基石,犹如为数据资产配备的坚固锁具,其重要性不言而喻。然而&a…...

简数采集技巧之快速获取特殊链接网址URL方法

简数采集器列表页提取器的默认配置规则:获取a标签的href属性值作为采集的链接网址,对于大部分网站都是适用的; 但有些网站不使用a标签作为链接跳转,而用javascript的onclick事件替代,那列表页提取器的默认规则将无法获…...

React 性能监控与错误上报

核心问题与技术挑战 现代 React 应用随着业务复杂度增加,性能问题和运行时错误日益成为影响用户体验的关键因素。没有可靠的监控与错误上报机制,我们将陷入被动修复而非主动预防的困境。 性能指标体系与错误分类 关键性能指标定义 // performance-me…...

AI 如何改变软件文档生产方式?

现代软件工程中的文档革命:从附属品到核心组件的范式升级 在数字化转型浪潮席卷全球的当下,软件系统的复杂度与规模呈现指数级增长。据Gartner最新研究显示,超过67%的企业软件项目延期或超预算的根本原因可追溯至文档系统的缺陷。这一现象在…...

激光干涉仪:解锁协作机器人DD马达的精度密码

在工业4.0的浪潮中,协作机器人正以惊人的灵活性重塑生产线——它们与工人并肩作业,精准搬运零件,完成精密装配。还能协同医生完成手术,甚至制作咖啡。 标准的协作机器人关节模组由角度编码器、直驱电机(DD马达)、驱动器、谐波减速…...

Windows如何定制键盘按键

Windows如何定制键盘按键 https://blog.csdn.net/qq_33204709/article/details/129010351...

go语言学习 第1章:走进Golang

第1章:走进Golang 一、Golang简介 Go语言(又称Golang)是由Google的Robert Griesemer、Rob Pike及Ken Thompson开发的一种开源编程语言。它诞生于2007年,2009年11月正式开源。Go语言的设计初衷是为了在不损失应用程序性能的情况下…...

使用Prometheus+Grafana+Alertmanager+Webhook-dingtalk搭建监控平台

一、监控平台介绍 1.监控平台简述普罗米修斯四件套,分别为Prometheus、Grafana、Alertmanager、Webhook-DingTalk。Prometheus一套开源的监控&报警&时间序列数据库的组合,由SoundCloud公司开发,广泛用于云原生环境和容器化应用的监控和性能分析。其提供了通用的数据…...

HOPE800系列变频器安装到快速调试的详细操作说明

以下是HOPE800系列变频器从安装到调试的详细操作说明及重要参数设置,适用于工程技术人员或具备电气基础的操作人员。请严格遵循安全规范操作。 以下面电机铭牌为例: HOPE800变频器安装与调试指南** (安全第一!操作前务必断电并确…...

vCenter与ESXi主机每分钟周期性断连修复

问题概述 最近我的测试服务器借给客户用作临时中转,仅更改了ESXi的管理IP,设备拿回来改回原来IP,vCenter开启后重新接收证书,主机和所有VM管理运行正常,跑着跑着发现主机和vCenter会频繁断开连接后又马上自动恢复&…...

JMeter函数整理

"_csvRead"函数 csvRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数。 下面具体讲一下如何使用csvread函数: 1.新建一个csv或者text文件,里面保存要读取的参数,每个参数间用逗号相隔。每行表示每一组…...

Sql Server 中常用语句

1.创建用户数据库 --创建数据库 use master --切换到master数据库 go-- 终止所有与SaleManagerDB数据库的连接 alter database SaleManagerDB set single_user with rollback immediate goif exists (select * from sysdatabases where nameSaleManagerDB) drop database Sal…...

web3-区块链困境破解指南:从数字化签名到Rollup 到分片

web3-区块链三难困境破解指南:从数字化签名到Rollup 到分片 数字化签名 实体的签名:将交易和签名者绑定在一起 在数字世界的问题是: 任何人都可以从任一文档复制Bob的签名放到自己想放的地方。 解决方案:让签名由文件来决定 b…...

李飞飞World Labs开源革命性Web端3D渲染器Forge!3D高斯溅射技术首次实现全平台流畅运行

在AI与3D技术深度融合的今天,李飞飞领衔的World Labs团队再次成为行业焦点。今日,他们正式开源了Forge——一款专为Web端设计的3D高斯溅射(3D Gaussian Splatting)渲染器,不仅支持THREE.js生态,更能在手机、…...

小鹏汽车5月交付新车33525台 同比增长230%

6月1日,小鹏汽车公布5月交付数据,5月小鹏交付新车33,525台,同比增长230%,与4月交付35,045台相比下降4.3%,已连续7个月交付量突破30,000台。2025年1-5月,小鹏汽车累计交付新车162,578台,同比增长…...

OpenCV——Mat类及常用数据结构

Mat类及常用数据结构 一、Mat类简介1.1、矩阵头1.2、矩阵的数据类型1.3、Mat的子类 二、矩阵数据的存储2.1、单通道2.2、多通道 三、创建矩阵的方法3.1、静态方法创建3.2、构造方法创建3.3、读取图像文件创建3.4、克隆创建 四、获取矩阵信息五、矩阵相关操作5.1、获取/修改像素…...

深入解析FutureTask:原理与实战

我们来深入解析 FutureTask。下面将从它们的用法开始,逐步深入到底层实现、方法和接口设计,并探讨它们对于我们自己设计实现以及其他编程实践的学习意义。 主要就是放入等待队列(CAS操作一个链表头),完成任务的线程唤…...

每天总结一个html标签——Audio音频标签

Audio标签 文章目录 Audio标签一、audio标签的定义与介绍1. 定义介绍2. 语法3. 支持的格式4.文本提示 二、audio标签的HTML属性1. autoplay2. loop3. muted4. preload 三、audio标签的常用DOM属性四、audio标签的常用事件四、默认样式五、自定义样式1. 示例2. 代码 六、播放 m3…...

使用 React Native 开发鸿蒙(HarmonyOS)运动健康类应用的系统化准备工作

⚙️ ​​一、环境与工具准备​​ ​​双环境搭建​​ ​​React Native 环境​​:安装 Node.js(≥18.x)、JDK(≥11)、Yarn。​​鸿蒙开发环境​​: 下载 DevEco Studio 4.0 及 HarmonyOS SDK;配…...

web3-Remix部署智能合约到“荷兰式”拍卖及以太坊gas费机制细讲

web3-Remix部署智能合约到“荷兰式”拍卖及以太坊gas费机制细讲 一、使用Remix演示智能合约部署 智能合约的代码编写一般都是在Remix上,Remix的好处的话就是可以在浏览器中快速开发和部署合约,无需在本地安装任何程序,十分适合新手。 对应…...