基于DNS解析的GSLB《CDN技术详解》

基于DNS解析的GSLB《CDN技术详解》基于DNS解析的GSLB工作方式基于DNS解析的GSLB方案实际上就是把负载均衡设备部署在DNS系统中。在用户发出任何应用连接请求时,首先必须通过DNS系统来请求获得服务器的IP地址,基于DNS的GSLB正是在返回DNS解析结果的过程中进行智能决策,给用户返回一个最佳的服务器的IP地址。从用户的视角看,整个应用流程与没有GSLB参与时没有发生任何变化。DNS系统本身是具备简单负载分配能力的,这…

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

基于DNS解析的GSLB工作方式

基于DNS解析的GSLB方案实际上就是把负载均衡设备部署在DNS系统中。在用户发出任何应用连接请求时,首先必须通过DNS系统来请求获得服务器的IP地址,基于DNS的GSLB正是在返回DNS解析结果的过程中进行智能决策,给用户返回一个最佳的服务器的IP地址。从用户的视角看,整个应用流程与没有GSLB参与时没有发生任何变化。

DNS系统本身是具备简单负载分配能力的,这是基于DNS的轮询机制。如果有多台Web服务器同时为站点HTTP://www.CDNbook.com提供服务,CDNbook的权威服务器可能会解析出一个或多个IP地址。权威域名服务器还可以调整响应中IP地址的排列方式,即在每次响应中将不同的IP地址置于首位,通过这种方式实现对这些Web服务器的负载均衡。

基于 DNS 解析方式的 GSLB 的实现关键,就在于使 DNS “智能化”。简单来说,就是通过建立 IP 地址访问列表,判断用户的访问来源,以确定其访问节点的位置。下面浅析如何实现智能 DNS:

1.通过CNAME方式实现负载均衡

CNAME记录是描述一个域名或主机名的别名,域名服务器获得CNAME记录后,就会用记录中的别名来替换查找的域名或主机名。后面会查询这个别名的A记录来获得相应的IP地址

通过CNAME方式来实现负载均衡,实际上是利用了DNS的两个机制:一是别名机制,二是轮询机制。具体操作简单地说就是:

  1. 先将GSLB的主机名定义为所查询域名的权威DNS服务器的别名;
  2. 然后将GSLB主机名添加多条A记录,分别对应多个服务器的IP地址;
  3. 本地DNS服务器会向客户端返回多个IP地址作为域名的查询结果,并且这些IP地址的排列顺序是轮换的。客户端一般会选择首个IP地址进行访问。

因为实现简单,并且不需要更改公共DNS系统的配置,所以通过CNAME方式实现负载均衡是目前业界使用最多的方式,在后面我们会用实际的例子来帮助读者再深人理解这种方式。

2.负载均衡器作为权威DNS服务器

把负载均衡器作为一个域名空间的权威DNS服务器,这样负载均衡器就会接收所有对这个域的DNS请求,从而能够根据预先设置的一些策略来提供对域名的智能DNS解析

此时,负载均衡器已经接管了权威DNS服务器的所有解析工作,无论用户访问的网站是否是需要进行解析的域名,其DNS请求都会被发送到负载均衡器上,所以整个域的DNS解析能力或多或少都会受到影响,影响的程度取决于负载均衡器能实现的DNS功能的程度,这因产品而异。事实上,有些产品,比如F5网络公司的3DNS具有完整的DNS功能以厦增强的GSLB特性,Foundry、Nortel、Cisco和Radware的产品能实现部分DNS功能。如果一个产品不能处理某些特定的DNS请求,它可能会选择丢弃请求,返回一个错误或者将请求转发到一个真实的DNS服务器上。

3.负载均衡器作为代理DNS服务器

在这种方式下,负载均衡器被注册为一个域名空间的权威DNS服务器,而真正的权威域名服务器则部署在负载均衡器后面所有的DNS请求都会先到达负载均衡器,由负载均衡器转发至真正的权威DNS服务器,然后修改权威DNS服务器返回的响应信息,从而实现负载均衡功能。

为实现这一过程,首先要将对外公布的权威DNS服务器的地址注册成负载均衡器上的VIP地址。真正的权威DNS服务器正常响应浏览器的DNS请求,返回域名解析结果列表,这个响应会先发送到负载均衡器,而负载均衡器会根据自己的策略选择一个性能最好的服务器IP并修改DNS服务器的应答信息,然后将应答信息转发给客户。负载均衡器只修改需要实现GSLB的域名的DNS查询响应,对其他请求透明转发,这样就不会影响整个域名空间的解析性能。

在代理方式下,如果权威DNS服务器与负载均衡器相隔很远,那么负载均衡器向权威DNS服务器转发DNS请求时就会产生额外的延时。解决这个同题的办法是,在负载均衡器上对DNS响应进行缓存,在缓存失效时间之前,对于之前已经从权威DNS服务器上获得过DNS响应的同一域名,就可以直接进行GSLB计算,响应用户DNS请求,不用去访问远程的权威DNS服务器了。

需要注意的是,在基于的DNS方式下无论采用何种工作方式,都会有一些请求不会到达GSLB,这是DNS系统本身的缓存机制在起作用。当用户请求的城名在本地DNS或本机就得到了解析结果,这些请求就不会到达GSLB。Cache更新时间越短,用户请求到达GSLB的几率越大。由于DNS的缓存机制屏蔽掉相当一部分用户请求,从而大大减轻了GSLB处理压力,使得系统抗流量冲击能力显著提升,这也是很多商业CDN选择DNS机制做全局负载均衡的原因之一。但弊端在于,如果在DNS缓存刷新间隔之内系统发生影响用户服务的变化,比如某个节点故障,某个链路拥塞等,用户依然会被调度到故障部位去。

4. 负载均衡的策略判断条件信息

有些DNS服务器具有智能DNS功能,它在向本地DNS返回应答之前会先根据一些静态或动态策略进行智能计算。比如根据本地DNS服务器的IP地址进行就近性判断,进行响应时间或IP地址加权计算等,根据智能计算的结果选择一条或几条A记录返回给本地DNS服务器。返回的A记录可能直接是一台服务器的IP地址,或者是下一级均衡设备的IP地址。

负载均衡计算所需的静态或动态策略所需要的信息包括如下几项:
(1)服务器的“健康状况”
GSLB最重要的特性之一就是持续不断地监控各服务器的健康状况,健康检查的类型有多种,就像服务器健康检查一样,从二层、三层到四层,甚至是七层。未能通过健康检查的服务器不能作为备选的域名解析结果。

(2)地理区域距离
这里的距离指用户本地DNS服务器的IP地址与服务器IP地址之间的路由距离。由于DNS系统本身的工作原理所限,GSLB只能看到用户本地DNS服务器的IP地址,看不到用户终端的IP地址。

当用户使用错误的本地DNS服务器地址时,GSLB返回的域名解析结果将不是最佳的答案。但由于绝大部分运营商都会限制其他运营商的用户使用自己的DNS,所以出现这种错误配置的比例比较小,除非用户在终端上手动设置了错误的本地DNS服务器。

(3)会话保持
会话保持就是指在负载均衡器上设置这么一种机制,可以识别客户与服务器之间交互过程的关联性,在做负载均衡的时候考虑保证这些相关联的访问请求分配到同一台服务器上。如果GSLB的返回结果是本地负载均衡器( SLB),那么同样需要保证关联访同被调度到同一个SLB上,SLB继续执行会话保持策略,保证用户访同被调度到同一台服务器上。

(4)响应时间
通过计算一个请求,响应的往返延迟时间,GSLB能够计算出每个服务器的响应时间。最简单的方法就是通过测量服务器对健康检查的响应快慢来计算出站点的响应时间。

不过应该指出的是,如果服务器以集群或群组方式部署,那么GSLB测量出的响应时间实际上是这个集群或群组里面最好的服务器的响应时间。因为GSLB的健康性检查请求首先会发送到集群或群组的本地负载均衡器上,本地负载均衡器会像对待普通用户请求一样将请求转发给下面压力最小的服务器,下一个请求,可能被转发到另一台服务器。由于每次请求的响应时间可能有差异,所以最好的办法是计算一段时间的平均值。CDN系统可以设置本地负载均衡器负责计算本集群或本群组之内所有服务器的平均响应时间,并报告给GSLB。

(5) IP地址权重
这是GSLB预先为每个IP地址分配的权重值,这个权重值取决于一些商业方面的考虑,比如某些地域的IDC带宽比较贵,CDN系统就会尽量少用这些昂贵的资源。权重值决定了某个IP与其他候选IP相比分配到的流量比例。

(6)会话能力阈值
GSLB控制器可以获得每个服务器当前可用的会话数和会话表大小的最大值,当前会话数/最大会话数此值超过定义的阈值时,该服务器将不再被选择。

(7)往返时阈(RTT,Round-Trip Time)

往返时间指用户向网站发出请求到从网站收到响应的时间间隔。这个时间是从用户的角度出发来衡量CDN加速效果的指标,它基本反映了用户与CDN POP节点之间的链路健康状况。测量往返时间可以由CDN发起来完成,也可以由用户发起来完成。如果由用户来发起测量,最后得到的数据会比较精确,但需要在浏览器中内嵌特定的客户端程序进行通信和统计,而这种情况往往较少,所以多数情况下还是需要CDN来完成。CDN完成往返时间测量并用于GSLB的调度的方式有被动测量方式和主动测量方式,这两种方式各有优劣,
可以在不同情况下使用,也可以混合使用。

(8)其他信息,包括属务器当前可用会话数、量少选择次数、轮询等。

5. 信息组合起来实现全局负载均衡

下面我们将看到GSLB是如何把这些信息组合起来实现全局负载均衡的。

第一种方式:依照条件重要性逐步去除不符合要求的服务器。比如,GSLB设置的策略优先级依次是健康性、响应时间、负载情况。那么GSLB会首先排除不能提供服务的服务器,然后基于响应时间排除能力较差的服务器,最后基于负载情况选出负载较轻的服务器。如果此时还是有多个选择的话,GSLB会采用默认的方法来进行选择,比如轮询。

第二种方式:采用加权法挑选最优服务器。通常在进行加权计算前,GSLB会先使用健康检查和就近性排除大部分不能提供服务或距离过远的服务器。然后根据预先配置的加权策略,对其余每一项指标计算一个加权值,例如,给响应时间分配一个较高的权值,为路由开销分配一个较低的权值,同时考虑多个指标,从中选出条件最佳的服务器。

GSLB回复给本地DNS服务器的应答信息有两种,一种是只回复它选出的最佳服务器的IP地址,另一种是回复多个服务器的lP地址列表,但是将它选择的最佳服务器IP地址放在第一位。第一种方式的缺点在于,如果GSLB推荐的服务器突然发生故障,而关于这个域名的DNS应答信息缓存在浏览器和本地DNS服务器中,那就只能等浏览器和本地DNS服务器记录过期,才能重新发起解析。在这期间的用户请求都会被导向故障服务器。第二种方式的缺点在于,很多本地DNS服务器会以轮询方式从地址列表里选择一个IP地址返回给客户端,而不一定是GSLB 认为的最佳服务器。

基于DNS解析的GSLB应用部署方式

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132306.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据集网站_drone无人机模拟训练软件

    数据集网站_drone无人机模拟训练软件中国人不骗中国人。csdn李居然有人卖几十块智商税。其实只要外网一查就免费。看我来砸他生意。免费万岁!共享永存!GitHub-dasmehdix/drone-dataset:Dronedatasettoguideenemydrones(withsometools)…

  • jmeter线程组的属性_netty线程模型详解

    jmeter线程组的属性_netty线程模型详解情境:最近用winform做一个小程序,主要是用来执行一些sql语句,无奈数据量太大,执行一次要二十分钟左右,执行期间界面根本不能再进行其它操作,就连最小化窗口都不行,一动就跟死机差不多了.因此到网上搜了一下,找到.net后台线程的概念.(高手请绕道!)前台线程和后台线程之间的选择.NETFramework中的所有线程都被指定为前台线程或后台线程。这两种线程唯一的区别是—后台线程不会

    2022年10月11日
  • linux删除宝塔面板_宝塔修改端口

    linux删除宝塔面板_宝塔修改端口https://www.2kss.com/45898.html

    2022年10月19日
  • 【shell案例】CentOS7安装MySQL脚本案例

    【shell案例】CentOS7安装MySQL脚本案例前言此脚本为一个学员在工作中遇到在centos7中安装mysql的问题,于是安排一个学员花了15分钟写了一个脚本,可以正常安装使用。mysql的版本为5.7版本此脚本涉及到安装好mysql后,日志中没有临时密码的问题,所以该学员使用了破解mysql密码登陆修改去修改密码的方法,也算是一种好方法,在工作中,能解决问题才是根本,其他的技巧都是扯淡。虽然脚本还存在一些问题,但测试后发现可以正常安装,敢写就是一种进步。脚本源码因时间紧张,该学员未加注释,但我相信只要学完了shell基础的小伙伴都可以看懂

  • getmethod设置参数_nginx get参数

    getmethod设置参数_nginx get参数java.lang.Class中的getMethod(Stringname,Class…parameterTypes)方法后面的parameterTypes是传入的想要获取的方法的参数。是为了区分重载的方法。

  • Hadoop生态圈python + mapreduce + wordcount

    Hadoop生态圈python + mapreduce + wordcountHadoop生态圈python+mapreduce+wordcount启动hadoop进度发布文件hdfsdfs-put/home/hadoop/hadoop/input/user/hadoop/input查看hdfs现在有一些文件[hadoop@master0hadoop]$hdfsdfs-ls/Found1itemsdrwxr-xr-x-hadoopsupergroup02019-12-0402

发表回复

您的电子邮箱地址不会被公开。

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