基于DNS的全局负载均衡(GSLB)详解(下篇)
前言
上篇我们介绍了DNS流量负载和容灾切换功能的意义,下面我们将继续介绍基于DNS的全局负载均衡的工作原理和相关知识。
如果你想了解DNS访问的整个流程,可以先查看DNS的基本原理(可查看文章DNS原理及解析过程详解)。对于更好地讲解全局流量负载有所帮助。
基于DNS的流量调度和宕机切换
流量负载方式
现在我们对基于DNS的流量负载方式进行简单介绍,域名国家工程研究中心(ZDNS)在这方面拥有许多研究成果(了解更多)。
- 基于地理位置的流量负载,当拥有多数据中心时,比如南方的用户可能访问到上海的数据中心,北方的用户会访问到北京的数据中心,这是一个基本的基于地理限制的流量负载或者智能解析举例。
- 基于运营商流量负载策略,不同的运营商会到业务系统不同线路接入的服务器上,从而避免用户跨网访问的问题。
- 基于权重的链路负载,一个域名可能对应两个IP地址,这两个IP按照一定的比例解析给用户进行访问。比如一个IP地址对应初始数据中心,一个IP地址对应备数据中心的流量。希望初始数据中心的流量达到70%,备数据中心的流量达到30%
- 还有一些自定义的负载方式。主要是一些基于流量探测的负载,比如对于流量系统进行实时探测,哪个区域的系统性能最好,会优先使用哪个地区的资源。这是通过实时的健康检查和探测做动态的流量负载的调度。
DNS流量调度准确性
关于刚才讲到的DNS调度方式,大家有没有想过我们怎么样才能保证调度有足够的准确性。我们将从三个角度进行讨论,分别为:权威侧、用户侧、公共能递归侧。
权威侧
DNS权威服务器如何识别这个用户是来自于哪个运营商或者来自于哪个区域的呢。
- 其实是基于权威解析服务器上的一个精准的IP地址库,利用地址库进行判断用户区域及用户所属运营商,再进行流量调度。
- 这个IP地址库划分的粒度精细化,能够精确把某个省或某市的用户调度到相应的数据中心。
- 同时支持对IPV6地址库的识别,实现双栈化。
用户侧
电脑用户端上要配置正确的运营商的递归DNS尽量不使用公共递归,从而减少调度时间。
公共能递归侧
支持使用Edns+SubNet的协议,这样可以缓解客户端配置公共递归导致的解析不准确的问题。
健康检查和宕机切换
当某数据中心出现宕机情况,为了保证用户的正常使用,要进行宕机切换操作。但是对于DNS来讲是无法感知宕机的,这时就需要额外的健康检查探测手段。在额外的服务器上部署健康检查的节点,也是基于云的架构,从不同的探测节点探测业务的可用性。通常情况下探测方式可以是基于HTTP、HTTPS、PING、TCP等,从而实现实时的发现和切换的功能。进行宕机切换时,切换可用节点的选择基于地理位置、权重、运营商、性能等。
基于DNS的混合流量负载(调度)
如上图所示,刚才讲的DNS上的流量负载和实时探测和自动切换的功能,这个功能已经不再仅限于最初的DNS功能,域名和IP地址的关系数据库,它承载了更多的流量负载的系统。用户访问站点的时候,站点后面的资源比较丰富,有本地基于网络流量的负载、服务器、CDN的资源等。基于DNS的全局流量调度系统变成一个流量枢纽和桥梁。一旦DNS瘫掉,后端的系统无论再怎么强壮都不再可用了。所以DNS对于业务系统的重要性是与日俱增的,已经变成一个核心的业务系统。