CDN之GSLB详解

CDN之GSLB详解CDN的关键技术主要有内容路由技术、内容分发技术、内容存储技术、内容管理技术等,而本文介绍的GSLB是属于CDN中的内容路由技术的关键技术。一、内容路由技术简介:CDN负载均衡系统实现C…

大家好,又见面了,我是你们的朋友全栈君。

CDN的关键技术主要有内容路由技术、内容分发技术、内容存储技术、内容管理技术等,而本文介绍的GSLB是属于CDN中的内容路由技术的关键技术。

一、内容路由技术简介:

CDN负载均衡系统实现CDN的内容路由功能,它的作用是将用户的请求导向整个CDN网络中的最佳节点。最佳节点的选定可以根据多种策略,例如距离最近、节点负载最轻等。

负载均衡系统是整个CDN的核心,负载均衡的准确性和效率直接决定了整个CDN的效率和性能。通常负载均衡可以分为两个层次:全局负载均衡(GSLB)和本地负载均衡(SLB)。负载均衡可以通过多种方法实现,主要的方法包括DNS、应用层重定向、传输层重定向等等。

1.全局负载均衡(GSLB)主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域),因此,就近性判断是全局负载均衡的主要功能。

对于全局负载均衡而言,为了执行就近性判断,通常可以采用两种方式,一种是静态的配置,例如根据静态的IP地址配置表进行IP地址到CDN节点的映射。另一种方式是动态的检测,例如实时地让CDN节点探测到目标IP的距离(可以采用RRT,Hops作为度量单位),然后比较探测结果进行负载均衡。当然,静态和动态的方式也可以综合起来使用。

2. 本地负载均衡一般局限于一定的区域范围内,其目标是在特定的区域范围内寻找一台最适合的节点提供服务,因此,CDN节点的健康性、负载情况、支持的媒体格式等运行状态是本地负载均衡进行决策的主要依据。

对于本地负载均衡而言,为了执行有效的决策,需要实时地获取Cache设备的运行状态。获取的方法一般有两种,一种是主动探测,一种是协议交互。

1)主动探测针对SLB设备和Cache设备没有协议交互接口的情况,通过ping等命令主动发起探测,根据返回结果分析状态。

2)另一种是协议交互,即SLB和Cache根据事先定义好的协议实时交换运行状态信息,以便进行负载均衡。

比较而言,协议交互比探测方式要准确可靠,但是目前尚没有标准的协议,各厂家的实现一般仅是私有协议,互通比较困难。

二、GSLB的常用技术

GSLB常用技术主要是下面三种:

1) DNS调度:基于请求端local dns的出口IP归属地及运营商属性的DNS调度;
2) 302调度:基于客户端IP归属地及运营商属性的302跳转调度;
3) 路由调度:基于Anycast技术(BGP路由)的机房流量调度;

1.DNS调度

CDN之GSLB详解

执行步骤如下所示:
① 提交域名
② 客户端解析域名
③ NS解析到GSLB- 
// 3的GSLB服务器(例如阿里云、腾讯云等)一般是厂商的调度服务器,
// 对于加速域名来说,域名的关联关系为:
// a.com-->加速域名的cname: a.XXX.com--->
// 厂商提供服务的线路a.XXXX.ali.com(这个往往是GSLB的服务器)
④ GSLB解析并返回IP
// 4通过最终客户的域名经CDN的调度域名解析出CDN节点的IP,将对应的IP地址返回给GSLB服务器
// 这里的域名解析往往是通过,当前访问加速域名的用户所在的“地区+供应商”,例如 “上海电信”
// 到dns服务器上去查询,对应的CDN所在地区和厂商的最近IP所属的那些服务器IP。
⑤ 客户端请求IP
⑥ 返回结束

例子如下所示: 

$ dig  p200107.ping.dnsv1.com
。。。。。。
p200107.ping.dnsv1.com.  588  IN  CNAME  k97hqyk4.tweb.sched.ovscdns.com.
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  203.205.137.254
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  203.205.137.123
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  119.28.164.234
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  119.28.165.56
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  203.205.136.55
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  119.28.165.55
k97hqyk4.tweb.sched.ovscdns.com. 168 IN  A  203.205.136.62
。。。。。

这种方式的优缺点:

优点:
1.简单易用、用户无感知
2.客户端兼容性好
缺点:
1.调度策略非实时生效
原因:DNS是树型分布式系统,所有节点上都会按域名的TTL来做缓存,
这就导致CDN的调度策略其实并不是实时生效的。
2. 调度不够精确
原因:大量的local DNS不支持edns协议,拿不到客户的真实IP,
CDN绝大多数时候只能通过local DNS ip来做决策,
而local DNS ip有时候不太靠谱。
(一种是厂商配置的localDNS 并不是本地的IP地址,例如上海的IP配置了北京的DNS,
一种是8.8.8.8这种Public DNS,接入IP是Anycast IP没有归属地一说,
出口IP经常变动,比如中国大陆使用时,出口IP经常是中国台湾的google机房。)

2.  http redirection 302跳转

CDN之GSLB详解

执行步骤如下所示:
① 提交域名
② 客户端解析域名
③ DNS解析域名为GSLB // 这里的GSLB服务器与上面的一致,都是厂商提供的
④ 客户端提交请求给GSLB服务器
⑤ GSLB解析出目标IP并发起HTTP转发
// 这里返回的CDN服务器IP,往往通过CDN的负载情况、RTT时间,
// 每个CDN服务器的权重、以及用户与服务器之间的位置和供应商来决策,
// 当然这些决策也是由厂商(例如阿里、腾讯)等给出的。
⑥ 客户跳转发请求到目标IP
⑦ 返回结束

例子如下所示:

HTTP/1.1 302 Moved Temporarily
Server: stgw/1.3.6.2_1.13.5
Date: Sun, 16 Dec 2018 19:38:58 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive
Location: http://61.142.166.245/p73.ping.dnsv1.com/a.php
// 备注: 这里的61.142.166.245 是302 跳转之后,厂商返回的CDN 服务IP。

(例子来源于:https://cloud.tencent.com/developer/article/1394677)

这种方式的优缺点:

优点:
1.实时调度、准确性高
原因:由于可以拿到请求的出口IP,每次拿到的最终IP都是实时计算的结果,
所以调度策略是实时生效的,也是当前网络中的最真实情况提供的IP。
缺点:
1.业务兼容性: 要求用户的客户端必须支持302跳转。
2.增加了访问的延迟:使用于对延时敏感业务。
原因:这种模式的调度,每个请求都会多出一次http交互。
比如web静态小资源就不太合适,适用于客户端兼容性好的大文件下载业务。

3.路由调度

Anycast路由技术使得物理分布在全球/全球不同区域的不同服务器具有相同的IP地址,客户端对这个IP的请求会在路由层面引导到最近的物理服务器上。常见于国外的CDN厂商,例如Cloudflare,这不做进一步介绍,可以参考:

https://www.cloudflare.com/zh-cn/learning/cdn/glossary/anycast-network/

参考资料:

http://www.idcquan.com/CDN/720016.html

https://blog.csdn.net/zhaqiwen/article/details/42024045

https://my.oschina.net/u/2822116/blog/736558

https://sking7.github.io/articles/1006724251.html

https://cloud.tencent.com/developer/article/1394677

https://chongit.github.io/2015/04/15/GSLB%E6%A6%82%E8%A6%81%E5%92%8C%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/

https://www.cnblogs.com/peon/archive/2007/12/30/1021219.html

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


欢迎关注公众号:灰子学技术

CDN之GSLB详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132919.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker部署mysql 实现远程连接[通俗易懂]

    1.dockersearchmysql查看mysql版本2.dockerpullmysql要选择starts最高的那个name进行下载3.dockerimages查看下载好的镜像4.启动mysql实例dockerrun–namedockermysql-p3307:3306-eMYSQL_ROOT_PASS…

    2022年4月11日
    47
  • 使用eclipse建立ARM开发环境

    使用eclipse建立ARM开发环境原文:http://blog.sina.com.cn/s/blog_78212a050100ph5y.html J-Link: http://www.segger.com/http://www.eclipse.org/downloads/ 下载Eclipse IDE for C/C++ Developers 环境http://sourceforge.net/projects/gnu

    2022年6月6日
    37
  • springboot启动后自动停止_redis启动停止重启

    springboot启动后自动停止_redis启动停止重启springboot项目启动后自动停止,也引入了jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>但是启动仍然自动停止,怎么搞?在启动类上增加捕获异常并打印日志publicstaticvoidmain(Strin

    2025年8月30日
    6
  • Java经典算法(二)

    Java经典算法(二)【程序10】题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。解题代码:importjava.util.Scanner;publicclassTe

    2022年7月7日
    20
  • javascript和java哪个快_Javascript与Java相比有多快?

    javascript和java哪个快_Javascript与Java相比有多快?Java 和 JavaScript 都是编程语言 编程语言只是一堆抽象的数学规则 编程语言不快 或慢 他们只是 应用程序的性能与语言无关 最重要的因素是应用程序架构 然后是算法效率 然后微优化 然后是编译器 解释器的质量 然后是 CPU 也许两个之间的其他几个步骤 然而 语言不直接起作用 当然 如果你在谈论基准测试 那么特定的基准测试也会发挥作用 基准测试的执行情况 运行得如何好 执行基准测试的人是否

    2025年10月19日
    2
  • oracle数据库菜鸟教程_sql数据库菜鸟教程

    oracle数据库菜鸟教程_sql数据库菜鸟教程–创建用户–Createuser创建一个用户–Identifiedby密码–Defaulttablespaceusers默认表空间–Temporarytablespacetemp临时表空间–Quotaunlimitedonusers表空间配额–给用户赋权限–Grantconnect,resourceto–修改用户密码–Alteruseridentifie…

    2022年10月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号