负载均衡入门

2023-11-08

提纲

  1. ADC 行业现状
  2. ADC 原理
  3. ADC 的实现方式

为什么是 ADC 而不是负载均衡?

功能的扩展

解决了什么问题

  • 可用性(Availability)
  • 伸缩性(Scalability)
  • 性能(End-user performance)
  • 数据中心资源利用率(Data center resource utilization)
  • 安全(Security)

行业现状

Gartner 魔力四象限

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

行业趋势

从硬件到软件,从裸机到云

从单纯的负载均衡到与网络,应用和安全 WAF 一起组合。

API 网关:Istio,Kong

基本原理

在这里插入图片描述

实现方式:

  1. 芯片
  2. x86 服务器:ipvs,ovs,dpdk

设计的技术栈:硬件(网卡指标),驱动(网卡驱动),内核(网络协议栈),网络编程,基本数据中心网络,应用(http 各种优化)。

分层:

  1. 跨数据中心的负载均衡
  2. 数据中心内的负载均衡
  3. 服务级别的负载均衡

GLB

LSLB:Local Server Load Balance

GSLB:Global Service Load Balance

DNS:负载均衡

L4:基于 IP 和基于连接

L7:基于 URL

物理机,虚拟机,容器

部署模式

  1. arp
  2. 路由

旁路模式(FULLNAT)

单臂模式(SNAT)

全代理模式

本地三角模式

在这里插入图片描述

  1. 通过修改目的 mac
  2. 绑定 loopback 网卡:运维复杂
  3. 性能好, LB 只处理入流量
  4. 关闭 arp

SNAT

DNAT
在这里插入图片描述

  1. 只修改目标 ip
  2. 服务器网关变为 LB 网关
  3. 客户端直接访问服务器,由于会转发给 LB,导致丢包

穿透模式(SNAT,FULLNAT)

DNAT

在这里插入图片描述

FULLNAT

在这里插入图片描述

IP Tunning

运行模式

  • 全代理模式
  • 转发模式

基本功能

负载均衡算法

静态负载均衡算法

轮询

在这里插入图片描述

比率

在这里插入图片描述

优先级
在这里插入图片描述

动态负载均衡算法

最少连接数

在这里插入图片描述

最快响应时间

在这里插入图片描述

自定义负载均衡算法

在这里插入图片描述

运用机器学习,与监控,流量,负载联动的动态负载均衡

其他:

  1. 加权
  2. 加权轮询
  3. 哈希
  4. 一致性哈希
  5. 预测模式:机器学习
  6. 源地址保持

会话保持

  1. 简单会话保持:源地址会话保持
  2. Cookie 插入模式:在负载均衡器返回的时候插入
  3. Cookie 重写模式:服务器为空 cookie,负载均衡器对 cookie 进行重写
  4. Passive Cookie 模式:服务器包含 cookie,负载均衡器不做任何处理
  5. SSL Session ID 模式:在交换证书的时候记录 SSL session ID
  6. HTTP Header的会话保持:

健康检查

方式:推,拉(自定义,SDK);

检查指标:网络层(ICMP,TCP,UDP),应用层(HTTP,FTP,DNS,SMTP,POP3),及自定义关联健康检查。

流量监控

  1. 物理层流量
  2. 应用流量

安全

  1. 防 DDos 攻击:Syn Cookie
  2. 访问控制(ACL):基于协议,端口,设置服务的白名单(黑名单)

应用:web 缓存,web 压缩,web 加速,SSL 卸载,协议优化

其他功能

  • 日志
  • 命令行
  • web 界面
  • 监控

性能

F5 + 小机:SLA 5 个 9

LVS + PC Server:SLA 3 个 9

增加 nginx

  1. 按照域名进行负载均衡
  2. 切流量上线

增加 Haproxy

LVS-DR 无法跨网段

  • RPS
  • CPS

扩展性和可靠性

HA

主备

在这里插入图片描述

主主

在这里插入图片描述

集群

ospf , ecmp

F5 产品介绍

开源系统

IPVS

Nginx

HAproxy

Dpdk

OVS

腾讯的TGW

商业

  • BVS
  • 阿里的LVS集群
  • 美团
  • UCloud
  • Google
  • MicroSoft

智能 DNS

AWS Router53

腾讯 dnspod

BGP 多选路

BGP直接允许相同的IP在不同的运营商网络里广播,根据BGP协议自己实现就近接入。

基于 SDN 的 L4 负载均衡实现方案

考虑的因素

  • tcp 乱序
  • 各个 server 流量不均衡或者连接数不均衡, 如 “大象流”
  • 增加和删除 server 的影响, 如何平滑上线和下线
  • 进程异常退出
  • server 异常
  • 客户端访问不均匀

集群方案

ospf + ecmp : 交换机最好支持一致性哈希

bgp + gre : 云环境

策略路由

集群增加了复杂度

  1. lb 设备的上线和下线
  2. lb 异常宕机
  3. lb 之间是否需要 session 的同步

不同处理连接方式的设计思路

基于 ip 的负载均衡

  1. 根据 client 的 client_ip + pool_ip + pool_port 进行负载均衡
  2. 下发流表时, 不要求流表过期上报控制器,只有控制器发现客户端分配的 server 不可用时才分配新的 server
  3. 如果是 TCP 协议支持连接数限制, 非 TCP 不支持连接数限制

此外, 如果连接数限制开启(配置最小连接数算法),那么控制器还要求出现 FIN 报文上报控制器,

链路保持

不管是 TCP 还是 UDP,新的连接仍然用分配之前的服务器,缓存被过期流表上报的消息更新

控制器下发流表时要求流表过期时上报控制器,并且流表过期时间为链路保持时间

缓存更新依赖于流表删除上报控制器的消息, 具体为流表过期之后发送 FLOW_REMOVE 消息,控制器删除对应缓存

这里链路保持与 IP 负载均衡不同之处在于这里是连接级别的,而前者是 IP 级别的.

此外, 如果连接数限制开启(配置最小连接数算法),那么控制器还要求出现 FIN 报文上报控制器

链路不保持

对包含 SYN 的报文分配新的服务器,已存在连接分配之前分配的服务器(除非服务不可用)

控制器下发流表要求出现 FIN 报文上报控制器,并且要求流表过期不上报控制器(否则,后面删除流表再次上报控制器,增加开销),

如果控制器有对应的缓存,就删除流表,删缓存,并且包通过 PACKET_OUT 转发给后端服务器

缓存更新依赖连接断开的结束报文.

此外: 已有服务器突然不可用需要删除流表, 交换机端口宕掉需要删除对应的流表。

bounded-load

解决问题: 当使用一致性哈希算法, 客户端请求不均匀时,部分 server 成为热点

request : 总请求数

threshold : 阈值

number : 集群中机器的数量

weight[i] : 第 i 台机器的权重

每个 server 分配的应该分配的请求数 expect[i] = request / sum(weight[i]) * weight[i]

每个 server 实际分配的请求数 real[i]

当 real[i] < expect[i] * threshold 时, 就将请求分配给这个 server; 否则,就寻找下一个 server, 检查它是否满足条件。

每次有新的连接建立,或断开连接,就进行一个重新计算。

https://github.com/haproxy/haproxy/blob/25f067ccec52f53b0248a05caceb7841a3cb99df/src/lb_chash.c

https://arxiv.org/abs/1608.01350

总结

以上三种方法都需要配置缓存过期时间, 依赖过期时间清理异常连接导致的缓存没有更新的问题。

连接数限制

开启该功能,需要控制器下发流表,对于 FIN 标志的报文上报控制器。

只对 TCP, HTTP 有用,对于 UDP 不行

问题:如何解决没有通过 FIN 结束的包报文,比如 RESET 结束的报文,以及自始至终没有发送 FIN 的连接d的情况(比如服务器异常宕机,网络异常断开)。

解决办法: 增加超时时间,超时回收该连接。

DNAT

该模式下,必须禁止客户端直接访问后端服务器,而且部署方式也必须是穿透模式

FULLNAT

部署模式可以是穿透或旁路模式

客户端可以直接访问后端

SNAT

SNAT 只能工作与穿透部署模式,无法工作于旁路部署模式

连接数限制只能用于 TCP 和 HTTP, 无法用于 UDP

最小连接数算法和最大连接数配置都需要 FIN, SYN 包文的支持

连接数限制,只有配置 pool 的连接数限制,对该 pool 的连接数限制才能起作用

参考

https://cloud.baidu.com/doc/BLB/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

负载均衡入门 的相关文章

  • java——equals(),hashCode()重写与不重写区别

    1 总结 1 两个obj 如果equals 相等 hashCode 一定相等 2 两个obj 如果hashCode 相等 equals 不一定相等 2 不重写equals hashCode 不重写的时候 比较两个对象是否 相等 默认跟 效果
  • Python安装教程步骤2:Windows中创建虚拟环境安装Pytorch并在PyCharm中配置虚拟环境

    python安装教程步骤2 windows中Anaconda创建虚拟环境安装pytorch并在pycharm中使用虚拟环境 作者介绍 windows中Anaconda创建虚拟环境安装pytorch 1 添加镜像源 2 创建虚拟环境 3 进入
  • DSP T320F2803x 模数转换模块 ADC

    一 ADC 概览 1 1 特点 29803x 的 ADC 模块是12位循环 ADC 部分 SAR 部分流水线 其核心是 12 位的转换器 有两个采样保持器 可同时或顺序采样 通过多路复用后有 16 个模拟转换输入通道 转换器可以配置为与内部
  • ==,Object.equals(), Objects.equals(), Objects.deepEquals 使用注意

    相等判断时需注意 基本数据类型之间 可使用 包装类型之间尽量不要使用 包装类数值超过 127 128 引用类型地址不同 在 127 128之间时 翻阅底层源码发现 使用的是缓存的值 使用Object equals 做内容比较时 把常量 或可
  • Unity Mecanim动画系统 之 解决模型有些动画播放后发生的位置、方向偏转 (根骨骼动画)的问题

    Unity Mecanim动画系统 之 解决模型有些动画播放后发生的位置 方向偏转 根骨骼动画 的问题 目录 Unity Mecanim动画系统 之 解决模型有些动画播放后发生的位置 方向偏转 的问题 一 简单介绍 二 实现原理 三 效果预
  • 析构函数和虚函数的用法和作用

    析构函数和虚函数的用法和作用 1 析构函数 1 1 特点 2 虚函数 2 1 功能 2 2 使用方法 2 3 纯虚函数 2 3 1 意义 1 析构函数 析构函数是特殊的类函数 没有返回类型 没有参数 不能随意调用 也没有重载 在类对象生命期
  • Centos7安装lvs——即安装lvs的管理软件ipvsadm

    1 验证当前linux是具备lvs功能 root nginx master ipvsadm 出现上面的错误提示 就证明当前虚拟机不具备实现lvs的功能 2 安装ipvsadm 因为lvs的具体实现是由这个程序来实现的 2 1 检查内核版本
  • 【软件测试】自动化测试战零基础教程——Python自动化从入门到实战(一)

    第一章 自动化测试基础 第一节 软件测试分类 关于软件测试领域名词颇多 发现有许多测试新手混淆概念 从不同的角度可以将软件测试有不同的分类的方法 所以 这里汇总常见软件测试的相关名词 对软件测试领域有个概括的了解 根据项目流程阶段划分软件测
  • 【软件测试】自动化测试战零基础教程——Python自动化从入门到实战(六)

    整理不易 希望对各位学习软件测试能带来帮助 软件测试知识持续更新 第五章 自动化测试用例设计 第一节 手工测试用例与自动化测试用例 手工测试用例与自动化测试用例对比 用例选型注意事项 第二节 测试类型 测试静态内容 测试链接 功能测试 测试
  • 如何在CSDN中发布博客

    1 首先打开CSDN官网 进行注册然后登录 登录以后看到的界面如下 2 进入会员中心右边有个创作中心点进去 看到界面如下 3 在上界面中 可以单击 发布 直接写博客 如下所示 4 也可以单击 Markdown编辑器 或者 富文本编辑器 进入
  • 【软件测试】自动化测试战零基础教程——Python自动化从入门到实战(二)

    软件测试知识持续更新中 第二章 python webdriver 环境搭建 第一节 环境搭建 准备工具如下 windows 环境安装 linux 环境安装 第二节 使用 IDLE 来编写 python 有效地使用 IDLE 第三节 第一个自
  • STM32 ADC采样不准怎么办

    最近在使用STM32L011的ADC时 发现ADC采样值极其不准确 经过查找资料 和反复测试 总算摸出点门道 如将VDDA接到VDD 那么电源的波动会极大的影响ADC精度 不过使用内部参考电压可以计算实际的VDDA电压 说明 VREFINT
  • Android 11 Activity启动流程分析

    Android 11 Activity启动流程分析 本片文章是基于Android 11版本来分析应用Activity的启动的 Activity是Android四大组件中最重要的一个 因为我们所有的页面基本上都是基于Activity开发的 所
  • 牛客每日刷题

    作者简介 我是18shou 一名即将秋招的java实习生 个人主页 18shou 系列专栏 牛客刷题专栏 在线刷题面经模拟面试 目录 题目 思路 题解 题目 给定一个长度为 n 的字符串 请编写一个函数判断该字符串是否回文 如果是回文请返回
  • ACM-子串(字符串处理)

    问题描述 有一些由英文字符组成的大小写敏感的字符串 请写一个程序 找到一个最长的字符串 x 使得 对于已经给出的字符串中的任意一个 y x 或者是 y 的子串 或者 x 中的字符反序之后得到的新字符串是 y 的子串 输入数据 输入 输入的第
  • SAR ADC基本原理学习

    今天我们来学习SAR ADC喽 逐次逼近寄存器型模数转换器 Successive Approximation Analog to Digital Converter 是一种常用的A D转换结构 其较低的功耗表现 还不错的转换速率 在有低功耗
  • JS函数(二)基础 return 返回值

    创建函数 function 函数名 形参变量列表 函数体 return 返回值 return 1 什么是 返回 return语句将终止当前函数并返回当前函数的值 2 为什么要用 我们先来看一组代码
  • STM8的ADC的五种工作模式

    STM8的ADC的五种工作模式 STM8的ADC是10位的逐次比较型模拟数字转换器 多达16个多功能的输入通道 拥有5种转换模式 转换结束可产生中断 STM8 ADC的初始化顺序如下 1 AD输入通道对应的IO设置为上拉输入 2 配置AD参
  • 深入浅出《Delta-Sigma Data Converters》(可下载)

    在数字信号处理领域 数据转换器是实现模拟与数字世界之间无缝转换的关键组件 而在这个子领域中 Delta Sigma Data Converter s 一书以其全面和深入的内容 为工程师 学者甚至爱好者们提供了一个极其宝贵的资源 今天将为大家
  • Python greenthread 和 requests 模块每次只处理 10 个请求?

    我正在使用Python 2 7 5 并尝试使用协程绿色线程 Pythoneventlet 和Pythonrequests模块来加速我的 REST API 请求 我知道Pythonrequests https requests readthe

随机推荐

  • 华为OD机试 - 找出符合要求的字符串子串(Java)

    题目描述 给定两个字符串 从字符串2中找出字符串1中的所有字符 去重并按照ASCII值从小到大排序 输入字符串1 长度不超过1024 输入字符串2 长度不超过1000000 字符范围满足ASCII编码要求 按照ASCII的值由小到大排序 输
  • Eclipse 安装SVN、Maven插件

    原文地址 http www cnblogs com icerainsoft articles 2267958 html 1先安装subeclipse插件就是svn 离线插件安装效果更好 svn http subclipse tigris o
  • 网上期货开户合约签署流程

    一 数字证书 一 期货公司应确保客户完成身份识别后方可申请数字证书 二 期货公司应指导客户在线阅读并同意签署 个人数字证书申请责任书 在线安装数字证书 并进行证书密码设置 通过数字证书 方能对开户协议等进行电子签名 三 期货公司应指导客户在
  • JPA常用注解

    JPA全称Java Persistence API JPA通过JDK 5 0注解或XML描述对象 关系表的映射关系 并将运行期的实体对象持久化到数据库中 JPA由EJB 3 0软件专家组开发 作为JSR 220实现的一部分 但它不囿于EJB
  • Python可视化中Matplotlib绘图(2.设置范围、标签、标题、图例(详细参数))

    1 为绘制的图添加范围 import matplotlib pyplot as plt 导入绘图模块 import numpy as np 导入需要生成数据的numpy模块 添加范围 y np arange 0 10 1 plt plot
  • Nginx中root和alias区别

    1 区别 共同点 root和alias两者都都是用来指定URI和磁盘文件的映射关系 区别 root会将定义路径与URI叠加 而alias只取定义路径 root示例 客户端请求www test com images 1 jpg 则对应磁盘映射
  • 测试今年这行情,不会自动化测试的要做好心理准备了!

    双喜是一名软件测试工程师 入行之后在一家小型公司工作了五年 这段时间里 他主要负责手工测试和一些简单的自动化测试工作 由于公司项目也相对简单 他逐渐陷入了工作的舒适区 没有积极追求新的知识和技能 然而随着身边朋友发展的越来越好 双喜也决定走
  • Python初级第14课——继承(只读课堂)

    欢迎来到 只读课堂 In 1 这节课给大家讲面向对象中的一个继承的理念 class A 在python3中 默认的基类如果括号没有 那么继承自python的object类 pass class A1 A 继承自A类 pass A1 base
  • Scott自学python——字典学习笔记

    字典是Python的中重要的一种数据类型 可以存储任意对像 字典是以键值对的形式创建的 key value 利用大括号包裹着 字典中找某个元素时 是根据键 值字典的每个元素由2部分组成 键 值 访问值的安全方式get方法 在我们不确定字典中
  • 计算机怎样存储数值,(二)计算机如何保存字符和数字,并完成计算

    1 保存字符 计算机在创建之初 只能显示英文字母和特殊字符 后来慢慢才有了其他语言 但是打开网页或者编辑器却可能出现乱码 我们知道计算机只能保存0和1 那么如何把字符保存成二进制 以及如何把二进制解码成对应的字符就是先驱们所做的事情了 我们
  • AD采样的问题答案

    群友提问 请教一个AD采样的问题 现在想采样一个4 20mA的电流信号 信号调理电路如图1所示 输入电流与输出电压关系如图1中公式所示 现在遇到一个问题 当输入电流给定为4 7 93mA时 运放2脚的电压为0 954V Vout为0 652
  • NSIS简介

    1 简介 NSIS是一款帮助开发者创建Windows安装包的工具 NSIS通过NSIS脚本语言 NSIS Script 来配置安装过程中的信息 通过灵活的脚本方式 NSIS可以实现从最简单的文件拷包制作 到需要读写注册表 配置环境变量 以及
  • 局部变量错误

    参考 局部变量错误 云 社区 腾讯云 解析 UnboundLocalError local variable xxx referenced before assignment 在函数外部已经定义了变量n 在函数内部对该变量进行运算 运行时会
  • 计算机新代理大会优美句子,描写计算机教室的优美句子

    描写计算机教室的英语作文六句话怎么写 教室有两扇玻璃门 外边有鞋柜 教室两边各有一台空调 中间是三列 每列有20台电脑老师讲台上有一张桌子 桌子后面有一个大的放映屏幕天花板上有白色灯管 一共有9盏教室有8扇窗户教室里有52张凳子In eac
  • 利用docker 搭建File Browser 文件管理系统

    File Browser就是一个文件浏览器 因为linux并不方便桌面管理 所以Filebrowser就是帮助我们管理linux服务器上文件的程序 你可以称他为网盘程序 可以管理文件 可以分享文件 另外它还可以在线播放 mp4视频 下载fi
  • 云安全技术——执行ifconfig命令提示command not found

    安装完centOS 7 执行ifconfig命令提示command not found 解决办法 查找环境标量是否包含ifconfig 如下图 显示环境变量没有ifconfig 2 执行 yum search ifconfig 查找ifco
  • python mysql connection_Python MySQL连接访问

    将python应用程序连接到数据库有以下步骤 导入mysql connector模块 创建连接对象 创建游标对象 执行查询 创建连接 要在MySQL数据库和python应用程序之间创建连接 请使用mysql connector模块的conn
  • Python绘图系统10:在父组件中使用子组件的函数

    文章目录 Combobox绑定事件 互相调用 源代码 Python绘图系统 从0开始实现一个三维绘图系统 自定义控件 坐标设置控件 坐标列表控件 支持多组数据的绘图系统 图表类型和风格 散点图和条形图 混合类型图表 Combobox绑定事件
  • PMIC驱动之—PMIC硬件相关知识

    PMIC 电源管理集成电路 Power Management IC 在之前项目中 驱动最小系统 对于PMIC这块儿很懵懂 故抽时间查看一些优秀博文及资料 加强对电源管理的理解 本文介绍 PMIC 硬件电路相关的一些知识 在此作一些阶段性的学
  • 负载均衡入门

    提纲 ADC 行业现状 ADC 原理 ADC 的实现方式 为什么是 ADC 而不是负载均衡 功能的扩展 解决了什么问题 可用性 Availability 伸缩性 Scalability 性能 End user performance 数据中