云原生基础 -- Load Balancer

ops/2025/2/22 3:40:58/

本文将介绍 Load balancer 的意义、原理以及分类

意义

Load balancer 即网络负载均衡,是将流量进行统一分配均衡,分到到一组后端服务的应用。对部署负载均衡的应用来说,具有以下意义:

  • 可用性:所有流量只分发到单台后端服务器,容易导致服务宕机、服务不稳定;如果有多台服务器共同承担流量,能提高服务的稳定性;
  • 可扩展性:通过在一组后端服务的前端设置负载均衡器,可以使得后端服务是可伸缩、可扩展的,可以根据流量情况、重点时段进行服务的关闭和开启;
  • 安全性:在后端服务前的负载均衡器,可以作为一层网络安全屏障,对恶意流量进行识别,暂停到过热、不稳定的后端机器的流量,识别对某台机器的恶意攻击并进行隔离;
  • 可观察性:所有应用流量都会流经负载均衡器,可以进行流量的日志记录;根据日志观察流量的特点,并针对性地进行服务改进和升级;

Load Balancer

原理

Load Balance 既然是对网络流量的负载均衡,那么根据需要“均衡”的流量的层次,分为四层负载均衡和七层负载均衡,即按照计算机网络分层原理中的传输层、应用层进行流量“均衡”:

  • 四层负载均衡:根据传输层协议(TCP、UDP、FTP)的资源特征进行流量“均衡”,比如根据客户端IP、目标IP分发流量到后端,不管传输的应用层内容,只是进行流量的“均衡”分配;
  • 七层负载均衡:根据应用层的特征进行流量分配,比如根据URI、HTTP-Headers、Session进行流量分配,这样使得流量尽量“均衡”到后端,也可以通过参数设置保证某些连贯请求由一个机器连续处理(高效利用单台机器的缓存),避免连贯请求消耗多台机器的资源;

无论是四层还是七层负载均衡,都需要解决一个核心问题:如何分配流量到一组后端服务,即一个请求到来后如何选择转发的后端服务器。主要有以下常用方法:

  • 轮询:对一组服务器进行轮询,每台后端服务处理的流量都相等;
  • 加权与阈值:根据后端服务的性能,静态或动态设定权值与阈值,根据权值分配流量,根据阈值限定最高流量;这样保证“能者多劳”,安全均衡;
  • 最少连接数/最快处理时间:先随机选取一个子组的后端服务,然后根据当前这组机器的最少连接数或最快平均处理时间,选定流量分配目标;
  • URI Hash:根据请求的URI特征进行哈希,根据哈希值映射到某台机器,并记录这个URI->哈希值的映射,后面的流量进行复用;这样可以使得某类请求(某些API、某些资源请求),专门由某台机器处理,避免所有机器缓存某项资源(如某张图片的获取,由一台后端服务缓存即可);
  • IP Hash:根据请求的客户端IP进行哈希,根据哈希值映射到后端机器;与 URI Hash 相似,这样可以使得某个客户的连贯请求由单台机器处理,该机器处理并缓存该客户的数据,避免多台机器缓存相同的客户数据,避免资源浪费;
  • 哈希环:构建一个环数值域,将后端机器根据IP或其他特征映射到环上;流量到来时也根据特征映射到环上,在环上顺时针的最近的机器即是均衡分配的目标后端;这样可以更方便地调整后端服务的权值、阈值等,也可以方便扩展、删除机器,调整环数据以及哈希算法即可;

分类

根据实际应用场景,负载均衡有以下类别:

  • 应用负载均衡:即对一个应用部署多台后端服务,通过负载均衡器进行管理,增强应用性能;
  • 全球服务负载均衡:针对广地域(全球)用户,部署多地服务器,并利用负载均衡器将流量分配到距离用户较近的服务器,提升服务速度和质量(类似CDN功能);
  • DNS负载均衡:将多个域名进行统一管理,使得多个域名对应的多个服务具有统一管理器与流量监控、分配器;
  • 内部负载均衡:在内网中使用,通常用于内网资源管理等;

http://www.ppmy.cn/ops/160412.html

相关文章

新型基于Go语言的恶意软件利用Telegram作为C2通信渠道

研究人员发现了一种新型后门恶意软件,使用Go语言编写,并利用Telegram作为其命令与控制(C2)通信渠道。尽管该恶意软件似乎仍处于开发阶段,但它已经具备完整的功能,能够执行多种恶意活动。这种创新的C2通信方…

大语言模型内容安全的方式有哪些

大语言模型内容安全的方式有哪些 LLM(大语言模型)内容安全方式主要是通过技术手段对模型生成的内容进行检测、过滤和干预,以确保输出符合道德、法律和社会规范。以下是一些常见的方式方法及其原理和著名的应用案例: 基于规则的过滤 原理:制定一系列明确的规则和模式,例…

使用ifconfig设置ip时遇到的问题-1

在命令 ifconfig enp0s31f6 192.168.0.180/24 up 中,/24 和 up 的含义如下: 1. /24 含义:这是 CIDR(无类别域间路由)表示法,用于指定子网掩码(Subnet Mask)。作用:/24 表…

C++ 设计模式-命令模式

命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而可以用不同的请求对客户进行参数化,并且支持请求的排队、记录日志以及撤销操作。命令模式的核心思想是将“请求”封装为一个对象&#xff0c…

Ubuntu18.04设置开机自启动程序

在 Ubuntu 18.04 中,可以通过多种方式设置脚本(如 .sh 文件)开机自启动。以下是几种常见的方法: ### 方法 1:使用 rc.local(适用于简单的脚本) 1. **编辑 /etc/rc.local 文件**: …

DeepSeek在linux下的安装部署与应用测试

结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…

python烟花程序代码2.0

效果展示 烟花效果的关键点: 烟花发射:从地面发射出烟花并上升。 爆炸效果:烟花到达最高点后爆炸,产生不同颜色的光点。 颜色变化:爆炸产生的光点有不同的颜色和透明度变化。 粒子扩散:爆炸后的粒子向四面八方扩散,并且随着时间的推移逐渐消失。 我将首先给出一个基本的…

Docker 多阶段构建:优化镜像大小

在 Docker 中,构建镜像时,我们通常会将应用及其所有依赖打包到镜像中。然而,随着时间的推移,镜像的大小会随着依赖项和构建工具的增加而变得越来越大,这不仅增加了存储成本,还会降低容器启动速度。多阶段构…