全局流量管理通过DNS实现应用服务的就近访问接入、多地址负载均摊,同时根据健康检查进行DNS Failover,实现应用服务的同城多活故障隔离和异地容灾。
—— 阿里云官网有关GTM服务的介绍
“双活”的概念曾经红极一时,伴随双活的是一整套的IT基础架构,包括虚拟化软件、双活存储、……还有为“两个”双活数据中心提供负载均衡能力的GSLB全局负载均衡系统。
后来,阿里提出了“三地五中心”,与之配套的就变成了互联网中间件、云原生数据库系列服务、……当然还有为“五个”多活数据中心分配流量的GTM全局流量管理服务。
GTM 和GSLB服务一样都是基于智能DNS,也就是通过对DNS请求的动态调度来实现跨站点的负载均和故障切换。
具体的工作过程如下:
- 可以把业务系统的域名解析以CNAME的方式托管到GTM的智能DNS。
- 当用户发起对站点的访问请求时,需要先通过DNS的解析过程来获取站点的IP地址,而这时具体解析到哪一个IP就由GTM根据所有数据中心的“健康检查”结果来确定。
- 当所有数据中心均“健康”时可以用“轮询”的方式对所有的站点进行负载均衡,从而实现“多活”。
- 当某个站点被判定为“非健康”状态时,将不会再将该站点的IP地址返回给客户端,从而实现故障切换。
CNAME 是一种DNS的记录类型,另一种常用的DNS记录类型是A记录,A记录下的域名对应的是一个具体的IP地址,而CNAME记录下的域名对应的是另外一个域名,从而将域名的解析结果“托管”了出去。
GTM有几个关键概念:
- 地址池、一组提供相同服务的地址列表,可以有多个地址池,根据访问策略的不同,可以从不同的地址池中返回地址给客户端。
- 访问策略、可以有多个访问策略,但有且仅有一个全局访问策略,可以根据地理位置、访问延时来选择不同的地址池。在访问策略中地址池要被加入到主地址池或者备地址池中。
- 主地址池集合、默认情况下所有请求都从主地址池集合的地址池中分配地址。
- 备地址池集合、为可选配置,当主地址池中的所有地址均无法通过健康检查时,从备地址池分配地址。
- 健康检查、对所有需要进行检查的地址池中的地址进行健康检查,健康检查可以使用ping、tcp、http/https等方法。健康检查的配置以地址池为单位进行设置。
这些概念理解起来还是有些抽象,让我们结合一个应用场景来理解,请看架构图:
- 有3个地址池,分别是位于北京的地址池甲、位于上海的地址池乙、位于成都的地址池丙。
- 创建一条全局访问策略,访问策略被设置为最小延迟,地址池甲和地址池乙被分配到主地址池,地址池丙被分配到备地址池。
- 为地址池甲和地址池乙开启了健康检查,因此当北京或上海的某个可用区发生故障时,对GTM的请求将不会再返回这些无法访问的ECS的IP地址。
- 地址池丙不开启健康检查,因此不会对成都地域的ECS进行健康检查。
- 默认情况下所有的请求都会从地址池甲和乙中选择地址返回给客户端,只有当地址池甲和乙中所有的ECS均无法通过健康检查时,才会从地址池丙中挑选IP返回给客户端。
上述访问策略实现了一个主备架构,缺点是成都地域的资源只能用于灾备,要想实现“多活”可以再新建一条只针对四川省用户的访问策略,这回将地址池丙加入主地址池,地址池甲和乙加入备地址池。额外的,为了能够探测成都地域服务器的可用性情况要开启地址池丙的健康检查设置。
这就是GTM全局流量管理服务。