SLB

负载均衡(Server Load Balance, SLB),其含义是将负载(工作任务)平衡分散到多个服务器上。CDN是典型的负载均衡集群系统。

img

也就是说,客户端发出的请求,首先会到负载均衡设备的IP地址上。因为该IP地址并不负责处理实际的业务,所以通常将该地址称为【虚拟IP】(Virtual IP, VIP)。

后端真正的业务服务器被称为【真实服务器】(Real Server, RS),其IP地址被称为【真实IP】(Real IP, RIP),负责处理业务。

关键技术

  • 请求分发

  • 会话保持

    • 客户端IP
    • cookie
    • HTTP报文头
  • 服务器健康检查

    • 传输层 ICMP、TCP协议,能否建立TCP连接,回响是否正常,等等
    • 应用层 HTTP协议

What is GSLB?

Global Server Load Balancing,全局(服务器)负载均衡

  • SLB(Server Load Balancing)

    • 对集群内物理主机的负载均衡
  • GSLB

    • 对物理集群的负载均衡

GSLB 监控每个集群的运行状况(health)和响应能力,与SLB一样,将流量引导至具有最佳响应时间的集群去。

GSLB是依赖于用户和实际部署环境的互联网资源的分发技术,不同的目的对应着一系列不同的技术实现。

这里的负载均衡不只是简单的对流量的均匀分布,也包括了根据策略的不同实现不同场景的应用交付。

GSLB包括以下服务:

  • 将流量路由到最合适的数据中心

  • 监控每个数据中心的运行状况、可用性、负载

  • 将流量从失败或者不健康的数据中心移走

  • 使用策略来控制和优化多数据中心的部署

  • 传递给用户SLA期望(服务提供商与受服务用户之间具体达成了承诺的服务指标——质量、可用性,责任)

  • 满足不同国家或地区的监管要求

  • 提供特定于国家或地区、语言的自定义内容

Why GSLB?

  • 高可用,高容灾,持续服务

  • 更快的响应时间,更好的用户体验

  • 可扩展性,多版本分发,多种资源和服务组合

具体

  1. Disaster Recovery

  2. Load Sharing,基于不同条件(地理、网络状况等)的流量分发

    1. 可以节省带宽
    1. 控制给定节点的能力
    1. 容灾
  3. Performance,增强用户体验

  4. 多版本,根据不同的政策提供不同版本的资源,或者根据自定义的规则提供为特殊用户提供特殊版本,如灰度交付等。

How implements GSLB?

主流技术实现

DNS

术语:A (Address) 记录:将特定的主机名映射到对应主机的IP地址上。

  • CNAME:将某个别名指向到某个A记录上。

GSLB会替代权威DNS服务器从而实现自己的解析策略,返回给用户最合适的IP(列表)

How Standard DNS Works

  1. 客户端web浏览器尝试使用URL访问该站点

  2. 客户端查询本地ISP提供的DNS服务器(Local DNS)

  3. ISP DNS服务器在Root DNS中查询该站点的权威DNS服务器(在这之中,应该包括查询TLB顶级域DNS服务器,然后再从TLB顶级域DNS查询权威DNS)

  4. 本地ISP的Local DNS查询权威DNS服务器并接受IP地址

从local DNS想权威DNS进行查询称为递归DNS查询

  1. 现在Web浏览器有了IP地址,开始于该站点服务器通信

How GSLB Provides DNS

因为客户端流量时基于DNS检索的IP地址,路由到服务器,因此可以扩展DNS服务以智能地将客户端流量定向到托管服务的任意数量的数据中心站点。

因此,GSLB系统充当权威DNS服务器**。**当客户端查询DNS服务器时(标准DNS服务第3步),GSLB系统可以智能的计算最合适的站点以提供服务。

img

  • 客户端web浏览器尝试使用URL访问该站点

  • 客户端查询本地ISP提供的DNS服务器(Local DNS)

  • ISP提供的Local DNS查询该站点的GSLB服务器。GSLB计算指向客户端流量的最佳站点,并使用该站点服务器IP地址进行回复。

使用负载平衡算法,流量控制策略和客户端的地理位置,GSLB可以智能地将客户端定向到最佳站点。

  • 现在Web浏览器有了IP地址,开始于该站点服务器通信

特点

  • 对原业务的侵入性最小

  • 可以得到的信息有限,客户端IP的定位只能定位到Local DNS,拿不到客户端IP

HTTP redirection

利用HTTP重定向将内容转发到不同位置

  • 客户端查询本地ISP提供的DNS服务器

  • Local DNS查询权威DNS服务器并接受IP地址,此IP地址均为GSLB机器的IP地址

  • GSLB根据客户端IP等信息解析出新的IP并使用HTTP重定向技术将用户请求重定向到目标主机

img

请求过程:

  1. 客户端提交域名给Local DNS

  2. Local DNS查询权威DNS

  3. 权威DNS解析域名为GSLB,并返回给Local DNS

  4. 客户端从Local DNS拿到GSLB的IP地址,请求GSLB服务器

  5. GSLB从HTTP请求中解析出客户端IP并发起HTTP重定向(302)

  6. 客户端重定向至目标服务器IP

  7. 开始通信

特点

  • 只适用于HTTP,可能会产生性能瓶颈

  • 可以用L7负载均衡工具如Nginx、HTTPD等来实现

IP Route

更改IP首部并实现使用跳转,并利用IP tunneling技术实现只对请求负载均衡(响应直接返回)

  1. 和HTTP重定向技术一样,请求的域名均可解析为GSLB服务器的IP

  2. GSLB解析出目标地址,然后封装IP包发给目标地址

  3. 目标服务器收到请求包并处理,解析出被封装的IP包,得到客户端IP,然后把响应直接返回

img

请求过程:

  1. 客户端提交域名给Local DNS

  2. Local DNS查询权威DNS

  3. 权威DNS解析域名为GSLB,并返回给Local DNS

  4. 客户端从Local DNS拿到GSLB的IP地址,请求GSLB服务器

  5. GSLB服务器发送请求到目标服务器

  6. 目标服务器直接返回请求给客户端

特点

  • 可以解决不能获得客户端IP和HTTP only的问题,也不会成为性能瓶颈

  • 由于时IP层的负载均衡,因此得到的信息有限,也就是说分发的策略有限

  • 实现方式主要是LVS的VS/TUN模式,可以自行实现

统一调度服务层

客户端SDK+调度服务完成GSLB系统的功能

img

  • 客户端使用原地址请求服务时,SDK会交付一个解析过的地址给客户端.(或对网络请求模块做Proxy)

  • SDK会通过一定的策略从调度服务中获取解析地址(一个或多个)

  • SDK和调度服务会某种形式保持联系(HTTP or TCP)

  • 出于性能考虑,SDK本身有Cache功能同时有时效限制(TTL)

调用试请求过程:

  • 客户端请求

  • 调用SDK

  • SDK没有命中缓存

  • SDK请求调度服务

  • 调度服务返回新地址

  • 客户端用新地址发起请求

代理式请求过程:

  • 客户端发起请求

  • 网络请求Proxy拦截请求

  • Proxy没有命中缓存

  • Proxy请求调度服务

  • 调度服务返回新地址

  • Proxy请求新地址

特点

  • 让客户端(SDK)具备了负载均衡知识,而因此让服务端可以获得任何想要知道的信息,从而可以做更全面的解析策略,但侵入性是最大的

常见策略实现

  1. 地理区域,ISP

  2. IP权重,不同IP不同权重,权重决定流量比例

  3. 往返时间RTT,分active RTT(请求时ping,DNS Query等)和passive RTT(采集TCP的syn->act的时间)

  4. 业务自定义,根据语言、User ID等等

Reference

GSLB概要和实现原理

全局负载均衡GSLB学习笔记