从底层技术来看,GSLB 究竟难在哪儿

原文转载自:高效运维社区 作者:吕宏利


作者简介

吕宏利,来自硅谷的SRE,多年的国内外大型互联网公司运维开发经验,专注于分布式系统设计、监控、容量规划,数据中心技术以及生产环境的最佳实践。

GSLB是什么

GSLB 一种常见的解释是 Global Server Load Balancing 的缩写,也有说法是 Global Software Load Balancing 或者 Global Site Load Balancing,翻译过来就是:全局服务/软件/站点负载均衡。

根据维基百科:负载均衡可以促进工作负载在多个计算资源之间的分配,比如:计算机之间、计算集群直接、网络链路、CPUs 或者磁盘。目的是优化资源使用率,最大化吞吐量,最小化响应时间,并且避免任何单一资源的过载。维基百科的定义偏重于负载分配以优化资源使用率,大型互联网公司应用 GSLB 还有另外2个很重要的目标:

  • 提高系统的可用性(availability)当某个站点/集群整体不可用时,系统仍然可以通过其他站点/集群提供完整可用的服务
  • 降低用户的访问延迟(latency)根据用户地理位置,将请求发送到最近的站点/集群提供服务,降低用户的请求延迟,改进用户体验

Why it’s hard

首先定义一下“hard”:这里并不是指很难实现/搭建一套 GSLB 系统,而是指实现/搭建一套可以达到开篇提到的三个目标的 GSLB 系统很难。为什么说很难呢,我尝试从三个大的方面去解释:

  • 从底层技术上
  • 从运行维护上
  • 从功能实现上

由于篇幅较长,整篇文章会分为三个部分,本文是第一部分,从使用的底层技术入手解释为什么很难。

从底层技术上

这里我们主要讨论基于 DNS 的 GSLB,因为 DNS 是最古老也是应用最广泛的全局负载均衡方式,支持所有上层协议的全局负载。几乎所有的 GSLB 实现都离不开 DNS,不夸张的说很多简单的 GSLB 就是通过 DNS 实现的。复杂一些的 GSLB 还会增加其他组件,但是 DNS 会作为第一层的负载均衡。如果只谈论 HTTP 协议的全局负载均衡,还有基于 HTTP 重定向的 GSLB 系统,但是该方案的局限性也很大,这里不做过多讨论。下面这张图是一个最简单的 GSLB 架构图

我们以用户访问 www.example.com 为例来解释上图,图中有两个很重要的信息流:

  1. local balancer 上报数据给 global balancer,global balancer 汇总 local balancer 上报的数据,并将汇总后的数据发给权威 DNS,权威 DNS 会根据 global balancer 上报的数据调整返回给用户的 IP 地址;
  2. 用户打开浏览器,通过 ISP DNS 递归查询网址 www.example.com 对应的 IP 地址,最终权威服务器会返回一个 IP 地址给 ISP DNS,ISP DNS 返回 IP 给用户,浏览器发送请求到IP地址对应的服务器集群;

基于DNS负载均衡的问题

图一是张很简单的 GSLB 架构图,图中 NYC 和 LON 用户各自访问距离最近的服务,这是理想状态,在现实中要维持这种状态是有很多问题需要解决的。

1. 如何返回最优IP

一般情况下,example.com 的 DNS 权威服务器可以根据源请求 IP 返回最近的example.com 集群 IP,对应到上图中就是 NYC 的用户得到的 example.com 集群 IP 实际是根据本地ISP DNS的IP返回的。这就涉及了一个问题,如果本地ISP没有 DNS 服务器而是使用其他上级 ISP 的 DNS 服务器,NYC 的客户端就有可能得到距离很远的集群IP(假如本地ISP使用了多伦多的ISP进行DNS递归查询);或者用户自己设置了其他公共 DNS 服务器,都会导致返回的IP地址不是最优的。

当然了,现在我们有 edns-client-subnet,如果本地 ISP DNS 或其他公共 DNS支持,那么客户端就可以得到距离最近的集群 IP 来提供服务。可以通过以下链接查看支持 edns-client-subnet 的大型 DNS 服务提供者:http://www.afasterinternet.com/participants.htm。上面这个列表肯定是不全的,不是所有公司都会更新这个名单,不管这也传达了一个信息,edns-client-subnet 的普及速度很慢。

2. 如何准确分流

简单基于 DNS 的负载均衡方案,另外一个很大的弊端是流量分配不均。原因主要有下面2点:

  • ISP DNS—DNS 解析结果会被缓存,一个DNS请求可能对应到成百上千个服务请求。
  • 缺乏广泛的 edns-client-subnet 支持—这不仅会导致流量的跨地区访问,还会严重影响用户体验。用户手动设置 DNS 服务器,得不到最优 IP 解析。小 ISP 使用其他异地ISP的 DNS,得不到最优 IP 解析

由于服务提供者,比如 Google,很难控制用户自己的 DNS 设置以及广大 DNS 服务提供者对 edns-client-subnet 的支持,如何调整流量就必须从服务端进行了。

如图二所示,服务端balancer信息流新增了一个环节。global balancer根据每个集群的容量和已有请求进行集群间的流量迁移。这对 GSLB 系统提出2个新的要求:

  1. local balancer上报的数据有新的要求,不仅要上报本地集群的容量还要对收到的流量进行上报,这样 global blancer 就可以根据每个集群容量和负载进行集群间的流量调配了。
  2. local balancer 要能够转发远大于本地集群容量的请求,这样才能在满足本地集群负载的情况下,转发多余的请求到其他集群。

这其实是在服务器端构建了一个反馈回路,local/global balancer 可以根据集群容量、负载进行流量调配,消除了由于 DNS 调度导致的热点集群问题。还可以通过集群健康数据的收集,在流量调度时过滤问题集群。另外一种可行的方案是,服务器端在收到用户请求时判断用户是否在访问最优的集群,如不是最优集群就重定向用户 到距离最近/最优的集群。

判断方法也比较简单,比如服务器端进行 RTT 的对比,如果 RTT 大于一定阈值就向自己的权威服务器提交客户 IP 查询更优结果,然后创建一个基于 FQDN 的重定向。就像当年 Akamai 做的那样:https://blogs.akamai.com/2013/03/intelligent-user-mapping-in-the-cloud.html。这种方法对某些业务形态比较有效,比如长时间的视频流或下载业务,初始的那个额外重定向和 DNS 查询时间占比很小,但是性能改进很大;如果是短暂的HTTP请求,效果就不明显了。

有吃瓜群众会问了:HttpDNS 可以解决这个问题吧?如果你的服务是通过可控客户端提供的,那么 HttpDNS 可以帮助你解决这个问题,因为你也修改客户端使用 HttpDNS。但是如果你的服务是通过浏览器提供的,那么 HttpDNS 是帮不上忙的,不过基于 HTTP 重定向的 GSLB 可以,但是该方案本身的实现难度和问题也不小,而且支持的业务形态比较单一,目前我没有见过哪个公司大规模部署这个方案,如果有谁知道可以探讨一下。

3. 如何快速切流

事故是一定会发生的,如何在事故发生时快速切走流量,将用户的影响降到最低是至关重要的。

然而,基于DNS的切流机制是不靠谱的。

  • 客户端的DNS缓存,i.e 浏览器、操作系统
  • ISP DNS或公共DNS服务的缓存
  • 不遵循DNS TTL的DNS服务或客户端

即便是能在第一时间更新权威服务器,不再返回故障集群的 IP,由于以上原因,还是会有一段时间(从几分钟到几小时不等)请求仍然发送到故障集群,导致请求失败。如果故障集群的 local balancer 还可用,那么集群间的流量调度可以很快切走流量,这里主要讨论 local balancer 也不可用的情况。

要解决这个问题,最好的方案是通过 anycast,每个集群通过 BGP 对外通告同样的 VIP,互联网上的路由器会最终根据通告的 VIP 距离判断路由的优先级。所有用户对 www.example.com 的 DNS 请求都会返回同样的 VIP 地址,但是不同区域用户对VIP的请求会被路由到各自最近的集群。当某个集群出现故障时,该集群对外通告的 VIP 会被撤回,路由更新之后,之前该集群服务的用户请求会被自动路由到次优集群,这对用户来说都是透明的,但是如果提供的服务是有状态的,会导致状态丢失,比如 youtube 视频播放会中断。

如果不能部署 anycast 呢?来看看 Dyn 的 DNS 服务提供的 anycast 接入点你就明白了

Dyn Anycast

还有另外一种方法是通过 BGP 的 community 为集群的IP地址段设置主备路由,备份路由的目的地是另外一个集群。DNS 权威服务器根据用户所在区域和集群容量信息返回集群的 VIP,正常请下对该 VIP 的数据包会被路由到本集群,当该集群故障时,备份路由生效,从而流量会被路由到其他健康的集群,同样会对有状态服务造成影响。

上面两种方法都属于从网络层弥补应用层负载均衡的缺陷,可以规避DNS切流慢的问题。

延迟控制系统

当你的 GSLB 系统具备了内部集群间的流量调度功能时,形成了一个反馈闭环,整个 GSLB 系统就具备了控制系统的特征,而且还是具有延迟的控制系统。

上图去掉了互联网部分,只关注 GSLB 本身的主要构成,以4个集群为例。信息流动过程为:

  1. 本地集群的各个服务向 local balancer 汇报当前负载
  2. 向 global balancer 汇报所有本地服务的负载和容量(服务 owner 提前配置)
  3. global balancer 收集到所有 local balancer 的上报之后计算出如何分配集群间的流量
  4. global balancer 下发流量调配指示;更新权威 DNS 服务器
  5. local balancer 调整流量分配
  6. 回到步骤1

然而整个过程不是瞬间完成的,如图中所示:本地服务每10秒钟上报一次负载,本地 balancer 每5秒钟上报一次,本地 balancer 可以在上报的 RPC 请求结果中拿到流量分配指示。由于 global balancer 不可能实时计算所有集群所有服务的流量分配情况,所以本地 balancer 拿到的分配指示和本次上报是没有任何关系的,流量分配指示是根据历史数据计算出来的,WTF?!

一个全球系统

你虽然可以通过调整上报时间间隔和 global balancer 的计算频率来缩小差距,但是考虑到这是一个全球性的系统,为了正确调度 global balancer 需要所有集群的数据,有几个问题是无法避免的:

  • 数据中心间的网络延迟
  • 频繁上报、下发导致的跨网流量
  • 大量上报数据对计算能力和实时性的要求

基本上就是一个权衡各种因素,最终选择一个合适的这种配置,就将就着用旧点的数据做流量调整吧!

不能处理短暂的峰值

不能避免延迟,一个最大的问题就是:GSLB在面对短暂的流量峰值时是无能为力的。所以,一般的 GSLB 系统有一个假设:服务的流量在很短时间内不会出现剧烈变化。

以上图为例,如果 NYC 集群突然受到超过集群容量的请求(比如短暂的 DDoS),但是只持续了5秒钟的时间,这个峰值很可能都不会被 local balancer观测到。但是,如果你的服务由于过载导致进程重启,但是需要较长时间恢复,从而 NYC 集群容量减少,十几秒钟之后流量被分配到其他集群,如果期间还有多次的短暂峰值会将你的服务推向雪崩或者进入全球超负荷运行状态。上面的结论是基于一个前提条件:local balancer 并不在请求路径上。如果local balancer在请求路径上呢,那么先挂掉的可能是 local balancer,随之而来的是服务的全球超负荷运行。

你可能会说,难道没有 DDoS 防护措施吧,当然有了,但是 DDoS 的介入也是需要满足一定条件的,这种瞬时的流量峰值很难触发。我对 DDoS 防护手段研究不深,但是根据经验觉得可能不会触发,因为触发 DDoS 保护也需要历史和当前的流量信息,而这些信息很可能就是 GSLB 系统提供的,如果 GSLB 系统本身检测不到又怎么传递给 DDoS 系统呢。

小结

本节从 GSLB 最普遍的 DNS 负载均衡开始,介绍了基于 DNS 的 GSLB 系统面临和可以解决/改进的问题:

  • 改进 DNS 协议本身和应用,改进 IP 分配的精确度。效果明显,但是进度缓慢;edns-client-subnet RFC的提出,以及客户端、服务器端的实现。
  • 引入服务器端反馈回来,改进 DNS 缓存、IP 分配不准确带来的流量不均;一套企业内部服务集群间的 GSLB 系统,和外部 GSLB 系统联动。
  • 借助网络层技术手段进行快速切流;Anycast 以及备份路由。

以及 GSLB 系统固有的难以解决的问题:

  • 延迟控制系统
  • 全球系统
  • 对流量的假设

从传统IT部署到云,人肉运维已经是过去式,云上运维该怎么开展?尤其是云2.0时代,运维已经向全局化、流程化和精细化模式转变。与此同时,人工智能的发展,“威胁论”也随之袭来——运维是不是快要无用武之地了?如何去做更智能的活?4月20日晚2017运维/Devops在线技术峰会告诉你!免费!有料!快点这里报名()

时间: 2024-10-24 13:06:07

从底层技术来看,GSLB 究竟难在哪儿的相关文章

科技变革往往从底层技术取得突破开始

摘要: 科技变革往往从底层技术取得突破开始.移动终端.智能设备.电动汽车.机器人等要想普及,电池技术的突破必不可少.2007年成立的电池创业公司Sakti3 一直在研发.制造高性能固态 科技变革往往从底层技术取得突破开始.移动终端.智能设备.电动汽车.机器人等要想普及,电池技术的突破必不可少.2007年成立的电池创业公司Sakti3 一直在研发.制造高性能固态锂离子电池,最近他们刚刚获得Dyson1500万美元的新融资. 自锂电池诞生以来,一直都是使用液态电解质,易燃,不安全,所以我们才会经常看

博鳌直击 | “区块链最大障碍还在于底层技术”

雷锋网(公众号:雷锋网)3月24日报道,今日(3月24日),第16届博鳌亚洲论坛2017年年会在海南继续进行中.据雷锋网了解,在今天下午的数字货币与区块链分论坛上,中国银行前行长.中国互联网金融协会区块链工作组组长李礼辉与中国银联总裁时文朝皆分享他们对于区块链应用障碍的看法. 中国银行前行长.中国互联网金融协会区块链工作组组长李礼辉认为,区块链目前最大的障碍还在于底层技术方面.区块链最重要的底层技术有三个,第一就是共识算法.第二是保密算法.第三是保密合约,他解释道:"怎么样让底层技术比如每秒可以

香港虚拟服务器其技术的优势究竟在哪里

摘要: 虚拟服务器,也可以称为VPS主机,相对于真实主机而言,是采用特殊的软硬件技术把一台完整的服务器主机分成了若干个主机.每个VPS都可分配独立公网IP地址.独立操作系统 Windows/L 虚拟服务器,也可以称为VPS主机,相对于真实主机而言,是采用特殊的软硬件技术把一台完整的服务器主机分成了若干个主机.每个VPS都可分配独立公网IP地址.独立操作系统 Windows/Linux.独立超大空间.独立内存.独立CPU资源.独立执行程序和独立系统配置等.用户除了可以分配多个虚拟主机及无限企业邮箱

上海保交所发布区块链底层技术平台,为保险交易高效安全保驾护航

上海保交所于今日正式发布区块链底层技术平台(以下简称"保交链"),旨在为全行业保险交易提供区块链基础设施,构建稳定.高效.安全的保险交易环境.同时,<保交链底层框架技术白皮书>也正式对外发布. 据介绍,保交链应用了自主研发的Golang国密算法包,在数字保单存证的场景下支持每秒5万笔保单指纹数据上链处理. 保交链的七特性 长期以来,保险行业面临着几大痛点,如利用信息不对称骗保.投保人客户信息流失被盗卖.赔付效率不高等,皆阻碍着行业的健康发展. 经过研究和探索,保交所区块链技

李彦宏欲从底层技术开始挑战谷歌微软

本报记者 辛苑薇 侯继勇 北京报道 8月18日,百度董事长.CEO李彦宏在当天于北京举行的"百度技术创新大会"上首次对外公布了"框计算"平台. 此前,百度一直凭借中文搜索服务PK谷歌,有了"框计算",李彦宏正在考虑让百度从底层技术开始挑战谷歌.微软. 当天,李彦宏在会后接受本报记者采访时表示,"框计算"的目的是为用户提供一站式网络服务.而通过一个简单的界面,提供一站式网络服务,也正是微软.谷歌努力的方向. 百度之"框

eBay开发新软件欲取代Skype底层技术

北京时间7月31日上午消息,据国外媒体报道,eBay周四在向美国证券交易委员会提交的10-Q文件中称,该公司正在开发运营Skype网络电话服务所需要的软件,以避开与Skype创始人的授权纠纷. eBay文件称,开发计划可能耗费巨资,也可能陷入失败.与Skype创始人之间的纠纷不仅危及eBay CEO约翰·多纳霍(John Donahoe)制定的Skype明年上半年上市的计划,还有可能导致Skype关闭服务.eBay 2005年收购了Skype,但Skype创始人保留了部分底层技术. 市场研究公司

从概念到底层技术,区块链一站式分析和汇总

区块链作为一种架构设计的实现,与等基础语言或平台的知识库差别较大.区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现. 无论你擅长什么编程语言,都能够参考这种设计去实现一款区块链产品.与此同时,梳理与之相关的知识图谱和体系,帮助大家系统的去学习研究.文末,推荐了一些精选内容,供大家阅读. 区块链是什么 区块链来自于比特币等加密货币的实现,目前这项技术已经逐步运用在各个领域.我们可

内容、技术、渠道究竟哪个值钱?

在内容生产者的价值被普遍低估的今天,希望用自己的创意维持体面生活的我们,还能如何成就自己? 互联网睿思 在内容生产者的价值被普遍低估的今天,希望用自己的创意维持体面生活的我们,还能如何成就自己? 今日头条的版权之辩渐渐沉静下来,但关于"内容"的话题并没有停下.上周末业界传出阿里联手三家企业,以5亿人民币投资21世纪传媒,阿里或将占增资扩股后股权的20%.按5亿人民币占股20%计算,21世纪传媒估值25亿人民币,略低于今日头条30亿元的估值.何以一个刚刚成立的新媒体小团队竟比一个千人规模

RFID技术助力解决“看病难”难题

无锡市三院肝胆外科病区,护士长郑萍走进病房,看到患者杨师傅正在熟睡,她拿出一个手机模样的机器靠近患者手腕处扫了一下,随即点击"掌中宝",屏幕上就出现杨师傅的电子病历:身份及用药.剂量.方法等医嘱信息.根据医嘱,杨师傅当天要输液3瓶.郑萍将"手机"扫描输液瓶身上的条码,屏幕显示正常,确认药品无误.随后,杨师傅开始输液."如果输液瓶不是杨师傅的,这上面会显示警告."郑萍介绍,给药流程结束后,所有流程信息都被记录在掌上电脑中,便于医院管理查询和事后追踪