QuXiao's Blog

Life && Tech && Thoughts

GSLB调研(一)实现方式

Written on

什么是GSLB?

GSLB全称为Global Server Load Balance。它实现了在互联网上不同地域的服务器间的流量调配,保证使用最佳的服务器服务离自己最近的客户,从而确保访问质量。

它的意义在于:

  • 容灾、高可用性
  • 更快响应、更好用户体验
  • 版本发布、灰度上线

GSLB实现方式

常见的GSLB实现方式有三种: 基于DNS、基于HTTP重定向、基于IP路由,以及其它方式。

基于DNS

这是GSLB最常见的实现方式。在介绍基于DNS实现的GSLB之前,先回顾一下DNS的相关知识。

权威DNS

权威DNS是经过上一级授权对域名进行解析的服务器。也就是说,域名解析的结果的源头就是来自权威DNS。比如,我在Godaddy上面注册了一个域名,然后我在DNSPod上面设置了该域名的解析。那么我们就需要在Godaddy的配置页面中,配置上DNSPod的DNS解析服务器的地址,而这类的DNS就是权威DNS。相当于告诉了根域名服务器,『当有人请求这个域名的时候,让他请求这里』。下图就是DNSPod中的配置页面:

递归DNS

递归DNS,又叫local DNS,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。

转发DNS

转发DNS负责接受用户查询,并返回结果给用户,但这个结果不是按标准的域名解析过程得到的,而是直接把递归DNS的结果转发给用户。它也具备缓存功能。例如路由器中内置的DNS就是转发DNS。

公共DNS

公共DNS属于递归DNS,其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。例如Google的8.8.8.8,以及国内的114.114.114.114。

域名解析大致流程

如下图所示:

每个用户的电脑或者IDC的服务器上面,都配置了Local DNS,当客户端发起域名解析请求的时候,就会经历以下步骤:

假设请求解析 www.baidu.com 这个域名

  1. 请求Local DNS,如果有缓存直接返回给用户
  2. Local DNS请求根服务器,根服务器返回com域名服务器地址
  3. Local DNS请求com域名服务器,服务器返回baidu.com的域名服务器地址(这里对应DNSPod中的权威服务器)
  4. Local DNS请求baidu.com域名服务器的地址,服务器返回 www.baidu.com 对应的域名解析结果(A记录、CNAME、MX...)
  5. Local DNS将A记录返回给客户端,并将解析结果保存至本地作为缓存

基于DNS的GSLB

其实,了解了DNS解析域名的过程之后,基于DNS的GSLB工作流程也就比较清晰了。用户在对于GSLB所调度的资源进行域名解析的时候,也会请求Local DNS,然后Local DNS再将请求转发到一组权威DNS服务器;DNS服务器会根据请求用户的IP地址判断其地理位置,并且还会根据各个内容服务器的健康状况,返回一个或者一组对于用户最优的服务器IP(A记录);用户拿到了这些IP,就会去这些对应的服务器上面请求资源。

真实环境下,一个上了CDN的资源域名解析:

基于HTTP重定向

这种类型的GSLB,其流程和基于DNS的有相似的地方,只不过实现调度不是通过域名解析,而是通过301/302重定向来完成的。

用户请求一个经过GSLB调度的资源,首先进行域名解析,这部分只需要常规的DNS来完成即可;之后请求会打到一台服务器,这台服务器会根据用户请求的IP来进行地域判断,然后还是根据各个内容服务器的健康状况,301/302一个特定区域的资源URL;浏览器得了资源URL跳转之后,就会去从一个最优的服务器上请求资源。

流程如图所示:

最典型的例子就是下载文件,比如我们通过wget在sourceforge上面下载一个文件,就可以明显看到下载过程经过了数次302跳转。

基于IP重定向

这类的GSLB,是通过更改IP首部实现使用跳转,并利用IP tunneling技术实现对请求的负载均衡,实现方式主要是LVS的VS/TUN模式。这种方法可以解决无法准确获取源IP的问题,并且也不局限与HTTP协议,不过其得到的信息比较优先,因此负载均衡的策略不能做到很全面。

其它

其它方式,也就是自己去实现一套全局流量调度的方案。比如,嵌入移动SDK,自行实现后端不同业务服务器的健康检查、调度、缓存、TTL等功能。我的理解,就是根据DNS的思想,重新造一个轮子。

特点总结

总结一下前面三类实现的特点:

因素 基于DNS 基于HTTP重定向 基于IP路由
请求压力 由于有local DNS和用户端DNS缓存 请求压力不集中 接收所有请求,请求压力大, 容易变成性能瓶颈 借助IP网络设备完成负责均衡, 没有单点性能瓶颈
准确性 依据local DNS IP, 定位用户不准确(可通过EDNS解决) 直接接收用户IP,定位准确 基于负载的调度,分发策略有限
扩展性 通用性 扩展性好,通用性好 只支持HTTP协议, 其它应用协议需要定制开发 通用性好,但所有的服务器必须 支持IP Tunneling 协议
使用场景 Web加速(静态资源) 流媒体、文件下载 无商用案例

This entry is posted in note.

comments powered by Disqus