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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【转载】这才是真正的分布式锁

    【转载】这才是真正的分布式锁

    2021年11月20日
    42
  • mysql新建连接1045_Navicat for Mysql 1045错误

    mysql新建连接1045_Navicat for Mysql 1045错误在使用图形用户工具NavicatforMySQL新建连接时,会报一个1045,某用户访问拒绝的错误。一般的解决办法是需要重新修改Mysql的密码,操作步骤如下:1netstopmysql停止mysql服务2进入mysql安装路径的bin目录下,使用mysqld命令,在cmd下mysqld–skip-grant-tables3开一个新的cmd窗口mysql不需要用户名就可…

    2022年5月8日
    76
  • #WPF#Dirkster.AvalonDock教程

    #WPF#Dirkster.AvalonDock教程https://blog.csdn.net/youyomei/article/details/103107304教程还不错,但是存在一个错误xmlns:avalon=”http://schemas.xceed.com/wpf/xaml/avalondock”改成如下xmlns:avalon=”https://github.com/Dirkster99/AvalonDock”

    2022年7月20日
    13
  • connectionStrings字符串连接

    connectionStrings字符串连接以前在学校学习的时候,自己曾经做过一个项目再连接数据中。碰到了很多关于connectionStrings字符串连接问题。在那时自己的印象中,mdf数据库必须附加到sqlserver2005或2008等工具上才可以使用。今天才知道原来只要有数据库文件就行,没有必要附加上去。下面是连接字符串语句:<connectionStrings><addname=”…

    2022年5月21日
    31
  • c语言大数求和_指数幂的加法

    c语言大数求和_指数幂的加法文章目录1.大数加法2.大数幂运算3.大数求余废话不多说,直接上代码了。1.大数加法stringgetCountAdd(stringa,stringb){ stringc=””; intbit=-1;//判断是否进位-1为否,其他为进位数 inti=a.length()-1;//获得a字符串长度 intj=b.length()-1;//获得b字符串长度 //第一种情况两者都处理完 while(i!=-1&&j!

    2022年10月6日
    2
  • JAVA基于dom4j实现对XML操作「建议收藏」

    JAVA基于dom4j实现对XML操作「建议收藏」该篇博客写java基于dom4j来操作xml的一些基本实现,需要用到以下jar包该篇博客目录1、XML特点、语法规则2、XML与HTML区别3、基于dom4j下java实现对XML基本操作一、XML特点、语法规则1、XML特点XML是一种标记语言,很类似HTMLXML的设计宗旨是传输数据,而非显示数据(HTML)XML标签没…

    2022年7月14日
    20

发表回复

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

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