全局负载均衡(GSLB)的实现方案

2023-10-30

What is GSLB

Global Server Load Balancing

中文:全局负载均衡

SLB(Server load balancing)是对集群内物理主机的负载均衡,而GSLB是对物理集群的负载均衡。
这里的负载均衡可能不只是简单的流量均匀分配,而是会根据策略的不同实现不同场景的应用交付。

GSLB是依赖于用户和实际部署环境的互联网资源分发技术,不同的目的对应着一系列不同的技术实现。

Why GSLB

总结为:

  • 高可用性
  • 更快的响应时间
  • 多版本分发

具体:

  1. Disater recovery,发生故障时提供一个备用的位置来获取资源或者能提供可简易调整流量的装置,或两者都能提供。
  2. Load sharing,基于多个地理位置的流量分发,可以做到:

    a.尽量节省带宽
    b.限制给定位置的能力
    c.限制暴露断电,地理灾害等问题

  3. Performance,将资源置于离用户更近的地方,增强用户体验。

  4. 多版本,根据本地政策提供不同版本的资源,或者根据自定义的规则提供为特殊用户提供特殊版本,如灰度交付等。

How implements GSLB

主流的技术实现

DNS

GSLB会替代最终的DNS的服务器从而实现自己的解析策略,返回给用户最合适的IP(列表)。

image

一个普通的DNS请求:

1
2
3
4
5
① 用户提交域名
② 客户端解析域名
③ DNS服务器解析出IP
④ 客户端请求IP
⑤ 返回结束

加入了GSLB的请求:

1
2
3
4
5
6
① 提交域名
② 客户端解析域名
③ NS解析到GSLB-
④ GSLB解析并返回IP
⑤ 客户端请求IP
⑥ 返回结束

特点:

  • 这个技术对原业务的侵入性最小,被商业ADC广泛实现,如A10,F5等。

  • 但是可以得到的信息很有限,IP的定位只能靠Local DNS,因为得不到源IP.

HTTP redirection

使用HTTP重定向将内容转发到不同位置.

a. 请求的域名均解析为GSLB机器的IP.
b. GSLB根据源IP等信息解析出新的IP并使用HTTP重定向技术将用户请求重定向到目标主机.

image

请求过程:

1
2
3
4
5
6
7
① 提交域名
② 客户端解析域名
③ DNS解析域名为GSLB
④ 客户端提交请求给GSLB服务器
⑤ GSLB解析出目标IP并发起HTTP转发
⑥ 客户读转发请求到目标IP
⑦ 返回结束

特点:

  • 这个方案只适用于HTTP.

  • 这个方案的实现可以是L7负载均衡工具如Nginx、HTTPD等

IP Route

更改IP首部实现使用跳转.并利用IP tunneling技术实现只对请求负载均衡(响应直接返回).

a. 请求的域名均解析为GSLB机器的IP.
b. 负载均衡设备可以解析出目标地址,然后封装IP包发给目标地址.
c. 目标服务器收到请求包并处理,解析出被封装的IP包可以得到客户端地址,把响应直接返回.

image

请求过程:

1
2
3
4
5
6
① 提交域名
② 客户端解析域名
③ DNS解析域名为GSLB-
④ 客户端提交请求给GSLB服务器
⑤ GSLB发送请求到目标服务器
⑥ 目标服务器直接返回请求给客户端结束

特点

  • 这个方案能解决不能获得源IP和HTTP Only的问题,也不会成为性能瓶颈.但由于是IP层的LB,因此得到的信息很有限,也就是做分发的策略会很有限.*
  • 实现方式主要就是LVS的VS/TUN模式.如果自己编写会更灵活,但难度较大.*

统一调度服务层

客户端SDK+调度服务完成GSLB设备的功能。

a. 客户端使用原地址请求服务时,SDK会交付一个解析过的地址给客户端.(或对网络请求模块做Proxy)
b. SDK会通过一定的策略从调度服务中获取解析地址(一个或多个).
c. SDK和调度服务会某种形式保持联系(HTTP or TCP).
d. 出于性能考虑,SDK本身有Cache功能同时有时效限制(TTL)。

image

调用试请求过程:

① 客户端请求
② 调用SDK
③ SDK没有命中缓存
 ④ SDK请求调度服务
 ⑤ 调度服务返回新地址
 ⑥ 客户端用新地址发起请求

代理式请求过程:

① 客户端发起请求
② 网络请求Proxy拦截请求
③ Proxy没有命中缓存
④ Proxy请求调度服务
⑤ 调度服务返回新地址
⑥ Proxy请求新地址

特点

  • 让客户端(SDK)具备了负载均衡知识,而因此让服务端可以获得任何想要知道的信息,从而可以做更全面的解析策略,但侵入性是最大的。

常见策略实现

  1. 地理区域。地理&IP表。
  2. IP权重,为每个IP分配权重,权重决定流量比例。
  3. 往返时间RTT,分active RTT(请求时ping)和passive RTT(采集tcp的syn->act的时间)。
  4. 业务自定义条件,如根据语言,UserID等.

方案的对比

方案1:

工具:使用现有的商用解决方案:F5,A10 Thunder.
优点:
  能灵活配置GSLB,满足就近选择,位置备份等基本GSLB需求。
  除了GSLB以外,还能带来对性能和安全的全解决方案,如防DDos,硬件加速SSL加解密等等。
  当我们的业务群越来越庞大时,这些需求会越来越迫切。

缺点:
  贵。

方案2

工具:编写HTTP转发服务或使用Nginx,HTTPD
优点:自由实现,HTTP层可获取的信息更多因此LB策略更灵活.
缺点:只能是HTTP的转发,另外可能会成为性能瓶颈.

方案3

工具:使用LVS的VS/TUN模式
优点:free
缺点: 能实现的LB策略只能是LVS所支持的那些,如果想自己定义似乎不可能。

方案4

工具:编写统一调度服务
优点:有HTTP转发的所有优点,而且不需要流量经过,因此性能要比HTTP转发高很多。
缺点:
  1. 需要客户端的参与。(基本排除了浏览器和升级困难)。稍显复杂的缓存策略。
  2. 这个服务会成为一个`移动接入层`,将会具备相当规模。(成本)。

总结

选择方案首先选择能完全满足自己业务需求的方案.然后在从中选择功能&性能/价格比最高的.

以上四个方案,也可以分为L7层和其他.对于需要更多业务信息参与的负载均衡,则必须从7层协议入手.

方案2和方案4都可以解析7层协议的内容,其中方案4则能更灵活的实现通用的负载均衡,条件是必须有客户端的支持.因此如果能解决客户端的问题则方案4是比较好的方案,否则只能选择方案2了.

另外也不一定选择一种方案,能有效结合这些方案会使负载均衡能力更强大.

比如方案4无法干预浏览器的请求,这个时候就需要使用其他方案来弥补(方案1,2,3皆可).

同时还要区分动态资源和静态资源的请求,以上方案主要使针对动态资源的负载均衡,对于静态资源,CDN提供了更好的解决方案.


参考资料:

Citrix的NetScaler说明书: http://support.citrix.com/servlet/KbServlet/download/22506-102-671576/gslb-primer_FINAL_1019.pdf

GSLB和CND: http://blog.csdn.net/u010340143/article/details/9062213

智能DNS: http://www.cnblogs.com/peon/archive/2007/12/30/1021219.html

负载均衡: http://blog.arganzheng.me/posts/load-balance.html

LVS: http://www.linuxvirtualserver.org/zh/lvs1.html

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

全局负载均衡(GSLB)的实现方案 的相关文章

  • BSN区块链服务网络底十六章

    1 1 简介 服务网络的设计和建设理念完全借鉴互联网 互联网是由TCP IP协议将所有数据中心连接而形成的 服务网络是通过建立一套区块链运行环境协议将所有数据中心连接而组成 与互联网一样 服务网络也是跨云服务 跨门户 跨底层框架的全球性基础
  • 分布式系统常用的模式

    分布式系统常用的模式 Ambassador 名称 大使 模式 介绍 作为应用程序和其他服务的 中间人 负责应用程序和其他服务之间的通信 包括日志 监控或重试处理等任务 举例 K8S使用Envoy作为一个 大使 来简化服务之间的通信 优点 降
  • 常见架构模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 如何实现IM即时通信系统(一)

    在企业数字化建设过程中 如何与客户保持线上链接是重要的组成部分 而IM通信系统就属于数字化建设的基础设施 那么 如何实现一个符合企业需求的IM系统呢 采购当然是其中需要考虑的方式之一 但就我个人的经验来看 市面上好的IM厂商很稀少 因为IM
  • 逻辑架构和物理架构

    逻辑架构和物理架构 理论上划分了5种架构视图 分别是 逻辑架构 开发架构 运行架构 物理架构 数据架构 逻辑架构 逻辑架构关注的是功能 包含用户直接可见的功能 还有系统中隐含的功能 或者更加通俗来描述 逻辑架构更偏向我们日常所理解的 分层
  • 企业如何制定实施MES管理系统的预算方案

    随着制造业的不断发展 MES生产管理系统逐渐成为制造企业提高生产效率 优化资源利用和提升质量水平的重要工具 制定实施MES管理系统的预算方案是企业在进行MES选型和实施时必须考虑的问题 本文将介绍制定实施MES管理系统预算方案的关键步骤 包
  • 软件系统设计-15-架构设计

    1 设计架构 Design Architecture 1 1 设计策略 Design Strategies Abstraction Generate Test Decomposition Reusable Elements Iteratio
  • 基础项目(2)二选一数据选择器的设计

    写在前面的话 数据选择器在数字电路设计中的应用尤为广泛 同时 作为基础的电路功能单元 也比较适合作为初学者的入门实验 现在梦翼师兄陪大家一起来设计一个最基础的数据选择器 项目需求 设计一个二选一数据选择器 然后用一路控制信号选择输出数据选通
  • 系统架构设计专业技能 · 信息系统基础

    系列文章目录 系统架构设计专业技能 网络技术 三 系统架构设计专业技能 系统安全分析与设计 四 系统架构设计师 系统架构设计高级技能 软件架构设计 一 系统架构设计师 系统架构设计高级技能 系统质量属性与架构评估 二 系统架构设计师 系统架
  • 思考:如何保证服务稳定性?

    最近一直在忙618大促的全链路压测 稳定性保障相关工作 结果618还未开始 生产环境就出了几次生产故障 且大多都是和系统稳定性 性能相关的bad case 生产全链路压测终于告一段落 抽出时间将个人收集的稳定性相关资料整理review了一遍
  • Rings‘ Power,性能“世界第一”的Web I/O框架

    UringNet设计的思路和参考 在2019年 从Linux内核5 1开始 引入了io uring这样的异步框架 io uring的设计非常精巧 经过验证 其性能极其强悍 在文件读写的领域已经证明了其巨大的价值 很多数据库系统的底层已经引入
  • 为什么要使用MQ消息中间件?这几个问题必须拿下!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 这篇文章开始 我们把消息中间件这块高频的面试题给大家说一下 也会涵盖一些MQ中间件常见的技术问题 假如面试官看你简历里写了MQ中间件的使用经验 很可能会有如下问题 你
  • 一些方便记忆的小例子

    epoll和select的小例子 先看一下epoll和select的区别 对于select来说 所有文件描述符都是在用户态被加入其文件描述符集合的 每次调用都需要将整个集合拷贝到内核态 epoll则将整个文件描述符集合维护在内核态 每次添加
  • 软件系统产品线特征及构建过程

    根据SEI定义 结合业界的一些研究 软件产品线有如下几个重要特征 1 一个软件产品线应该有一系列的产品成员组成 既产品家族 2 产品家族中的所有产品都服务于一些特定的领域 3 产品家族成员之间在服务功能 产品质量 产品性能 产品应用范围等方
  • 系统架构设计师(第二版)学习笔记----信息系统基础

    原文链接 系统架构设计师 第二版 学习笔记 信息系统基础 文章目录 一 信息系统概述 1 1 信息系统的5个基本功能 1 2 信息系统发展阶段 1 3 初始阶段的主要特点 1 4 传播阶段的主要特点 1 5 控制阶段的主要特点 1 6 集成
  • 半虚拟化和全虚拟化的区别

    全虚拟化 Full virtualization 也称为原始虚拟化技术 是另一种虚拟化方法 该模型使用虚拟机协调客户 操作系统和原始硬件 见图2 这里 协调 是一个关键词 因为VMM在客户操作系统和裸硬件之间用于工作协调 一些受保护的指令必
  • Spring框架的前世今生与系统架构

    课题 Spring框架的前世今生及系统概述 课程目标 1 通过对本章内容的学习 可以掌握Spring的基本架构及各子模块之间的依赖关系 2 了解Spirng的发展历史 启发思维 3 对Spring形成一个整体的认识 为之后的深入学习做铺垫
  • 软件质量属性

    质量特性 质量子特性 功能性 适宜性 准确性 互用性 依从性 安全性 可靠性 成熟型 容错性 可恢复性 可用性 可理解性 易学性 可操作性 效率 时间特性 资源特性 可维护性 可分析性 可修改性 稳定性 可测试性 可移植性 适应性 易安装性
  • 程序的链接

    程序的链接是一个非常实际的问题 他建立在很实际的问题之上 不从程序员的角度去思考问题 则是从软件的角度去思考如何复用错综复杂的代码 因为 这个问题的本质是我们没有给底层的硬件一个完整的可按顺序执行的程序 我们在前几章虽然讨论了指令流的问题
  • 2022年高级性能测试岗面试题【面试必看】

    昨天一个前同事找我 问有没有性能测试岗位的面试题 正好之前帮业务团队加面过几次性能测试岗位的候选人 我将面试时候会问的一些问题以及要考察的点列了出来 供大家参考 一 介绍下最近做过的项目 背景 预期指标 系统架构 场景设计及遇到的性能问题

随机推荐

  • 母函数

    模板 初始化a 因为有last 所以这里无需初始化其他位 a 0 1 int last 0 for int i 0 i
  • android 屏幕亮度广播,Android视频播放器屏幕左侧边随手指上下滑动亮度调节变暗变亮原理实现详解...

    Java代码 package zhangphil app import android app Activity import android os Bundle import android view LayoutInflater imp
  • 渐变维度入门.

    有一张内容提供商表 如图 需要做维度渐变 渐变列这里做了简化 只有Cpname 维度表如下 多了三列 维度开始时间 结束时间 以及是否是当前值 渐变的设置如下 1 2 在这里我们强调一下图2的几列意思 固定的属性 用的比较少 不做解释 变化
  • Nginx(7)Nginx实现服务器端集群搭建

    Nginx集群搭建 Nginx与Tomcat部署 Nginx实现动静分离 Nginx实现Tomcat集群搭建 Nginx高可用解决方案 Keepalived Keepalived配置文件 keepalived之vrrp script Ngi
  • 爬虫入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    01 Python优势 对于网络爬虫开发来说 Python有着无与伦比天然优势 这里从两个方面对其优势进行分析与讲解 1 抓取网页本身的接口 相比其他静态编程语言 如java c 与c Python抓取网页文档的接口更简洁 而对比其他动态脚
  • chrome设置黑暗模式的4种方法

    chrome设置黑暗模式的4种方法 前言 方式一 自带皮肤暗黑 具体操作 效果 方式二 自带内容暗黑 具体操作 效果 方式三 安装chrome主题 方式四 使用插件 效果 额外 开发工具的暗黑设置 结语 前言 对于大部分chrome用户来说
  • Qt Tcp网络编程

    1 Qt中的TCP客户端编程 Qt中的TCP客户端编程 对于Qt编程而言 网络只是数据传输的通道 Qt提供了QTcpSocket类 封装了TCP协议细节 将QTcpSocket的对象当做黑盒使用 进行数据收发 QTcpSocket的使用方式
  • Java中的StringBuilder类功能详解

    android培训 java培训 java学习型技术博客 期待与您交流 字符串连接可以通过两种方法实现 其中一种是在Java中提供的一个StringBuilder类 这个类只在J2SE5及以上版本提供 以前的版本使用StringBuffer
  • oracle连接

    使用JDBC创建的数据库tcp连接是没有设置keepalive的 这点可以通过Linux的netstat或ss命令在数据库客户端 即应用端 验证 使用命令netstat ano或ss ano 其中参数 都是显示timerit时器 timer
  • 基于SSM框架的狼途汽车门店管理系统的设计与实现

    基于SSM框架的狼途汽车门店管理系统的设计与实现 付源码 论文 技术实现 本系统基于SSM框架的狼途汽车门店管理系统采用多层框架相结合的方式进行开发 让不同的框架发挥出各自的优势 然后再结合起来处理门店的业务逻辑 分工明确 其中使用了Spr
  • Flink学习4-flink自定义source并行度

    概要 关于source数据源 在flink 官网上介绍了很多对接方式 例如socket elements collect等常见的source 可以见下面链接 https nightlies apache org flink flink do
  • 用户栈和内核栈

    操作系统中 每个进程会有两个栈 一个用户栈 存在于用户空间 一个内核栈 存在于内核空间 当进程在用户空间运行时 cpu堆栈指针寄存器里面的内容是用户堆栈地址 使用用户栈 当进程在内核空间时 cpu堆栈指针寄存器里面的内容是内核栈空间地址 使
  • 浅谈传统企业数字化转型的痛点与困难

    00 导语 在之前的文章中 笔者就一些用户行为分析的知识和概念进行了科普 未免有些生涩难懂 这次咱们聊一个相对轻松易懂的话题 在和一些传统行业的企业 包括但不限于一些老牌的大型企业 合作的过程中 笔者发现 这些企业共同的特点就是历史悠久 资
  • Activiti 5 提示:Default sequenceflow has a condition, which is not allowed

    今天重拾Activiti 5 Spring Boot 流程引擎管理 启动一个简单的请假流程实例 在控制台输出如下错误信息 org activiti engine ActivitiException Errors while parsing
  • Dev C++使用简明教程

    Dev C 使用简明教程 使用高级语言编程时 我们通常使用一个集成开发环境IDE Integrated Developing Enviroment 简称IDE 来进行编辑 编译 运行和调试工作 Dev C 是一个Windows环境下C C
  • fitcknn - Matlab的kNN分类器

    Matlab的kNN分类器 fitcknn 1 构造kNN分类器 1 1 fitcknn函数 1 2 运行实例 1 构造kNN分类器 1 1 fitcknn函数 使用fitcknn函数即可构造 construct kNN分类器 输入 分类集
  • 用MindSpore复现VAN(Visual Attention Network)

    用MindSpore复现VAN Visual Attention Network 1 VAN 简述 2 如何复现 模型的修改 参数初始化 数据预处理 优化器 学习策略 多卡训练设置 混合精度对齐 O0 O2 O3 以及自己设置黑白名单 O1
  • vue.js:基于nodejs使用log4js输出日志文件

    一 问题 开发web项目过程中 常规的console log 只是将信息反映在了浏览器的控制台 我们经常需要输出到文本日志文件 以便开发调试和维护排查 下面介绍log4js在vue项目中的部署与使用 二 解决方案 1 安装log4j 注意
  • IntelliJ IDEA2022(破译版)安装教程

    首先先下载一个压缩包 里面安装包破译插件都有 通过百度网盘分享的文件 JetBrain zip 链接 https pan baidu com s 1mBQUacDIf39AJtR wGZ bw 提取码 P95C 复制这段内容打开 百度网盘A
  • 全局负载均衡(GSLB)的实现方案

    What is GSLB Global Server Load Balancing 中文 全局负载均衡 SLB Server load balancing 是对集群内物理主机的负载均衡 而GSLB是对物理集群的负载均衡 这里的负载均衡可能不