火山引擎云调度(GTM)把用户的 DNS 查询请求解析到一个地址。收到 DNS 响应后,用户会直接访问 DNS 响应中的地址。因此,用户流量不会经过云调度 GTM。
云调度 GTM 可以通过以下方式基于 DNS 路由用户请求:
这种路由方式是云调度 GTM 的默认路由方式。您在云调度 GTM 中配置路由策略。云调度 GTM 会把路由策略下发到云调度 GTM 的权威 DNS 服务器。接收到客户端发送的 DNS 查询请求时,互联网上的递归 DNS 服务器(例如 Local DNS 服务器或公共 DNS 服务器)会返回从云调度 GTM 的权威 DNS 服务器获取的 DNS 记录。
当收到客户端的 DNS 查询时,云调度 GTM 根据地理位置、网络运营商、用户到 IDC 机房的访问延迟、IDC 机房容量、负载等因素返回 DNS 查询响应。 通过这种方式,用户请求被路由到一个地址。
假设您的服务的域名是 example.com
,您的服务有多个公网 IP 地址,而且您在云调度 GTM 中添加了这些地址。您在服务域名的域名解析服务商中创建了一条 CNAME 记录,该记录把 example.com
映射到调度域名 example.com.gtm.volcdns.com
。
云调度 GTM 在 DNS 层面路由用户请求的步骤如下:
example.com
域。example.com
域的权威 DNS 服务器,并向该服务器发送 DNS 查询请求。权威 DNS 服务器返回一条 CNAME 记录。该 CNAME 记录指向调度域名 example.com.gtm.volcdns.com
。example.com.gtm.volcdns.com
的权威 DNS 服务器。调度域名的权威 DNS 服务器是由云调度 GTM 提供的。递归 DNS 服务器向权威 DNS 服务器发送 DNS 查询请求,查询 example.com.gtm.volcdns.com
域。1.1.1.1
。1.1.1.1
建立连接。用户流量不会经过云调度 GTM。这种路由方式需要结合云调度 GTM 和移动解析 HTTPDNS 实现。您需要在云调度 GTM 中配置路由策略,在路由规则中开启并配置软件定义解析 AnyMatch 功能,并使用移动解析 HTTPDNS 的客户端 SDK 或 API 发送 HTTPDNS 请求。云调度 GTM 会把路由策略下发到移动解析 HTTPDNS 的递归 DNS 服务器。接收到客户端发送的 HTTPDNS 请求时,移动解析 HTTPDNS 的递归 DNS 服务器会返回云调度 GTM 的权威 DNS 服务器下发的 DNS 记录。参见 什么是软件定义解析 AnyMatch。
说明
您的客户端应用在集成移动解析 HTTPDNS 提供的客户端 SDK 或 HTTP API 后,就可以绕过 Local DNS 服务器,通过 HTTP 或 HTTPS 协议向移动解析 HTTPDNS 服务端发送 DNS 查询请求。
当收到客户端的 HTTPDNS 查询请求时,云调度 GTM 根据地理位置、网络运营商、访问延迟、HTTPDNS 请求中 Header 所包含的自定义标识、IDC 机房容量、负载等因素返回 DNS 查询响应。通过这种方式,用户请求被路由到一个地址。
假设您的服务的域名是 example.com
,您的服务有多个公网 IP 地址,而且您在 GTM 实例中添加了这些地址。另外,您在 GTM 实例中创建了 3 条路由规则。
路由规则-北京
。中国内地/华北/北京
。12345
,匹配方式是精确匹配。1.1.1.1
。 路由规则-上海
。中国内地/华东/上海
。23456
,匹配方式是精确匹配。1.1.1.2
。 路由规则-默认
。默认
。1.1.1.3
。客户端使用移动解析 HTTPDNS 的客户端 SDK 或 API 发送 HTTPDNS 请求,获取域名解析结果。
云调度 GTM 结合移动解析 HTTPDNS 在 DNS 层面路由用户请求的步骤如下:
example.com
域。北京
:
12345
,那么该 HTTPDNS 请求会匹配到名称为 路由规则-北京
的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-北京
所对应的 IP 地址 1.1.1.1
。12345
,那么该 HTTPDNS 请求会匹配到名称为 路由规则-默认
的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-默认
所对应的 IP 地址 1.1.1.3
。上海
:
23456
,那么该 HTTPDNS 请求会匹配到名称为 路由规则-上海
的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-上海
所对应的 IP 地址 1.1.1.2
。23456
,那么该 HTTPDNS 请求会匹配到名称为 路由规则-默认
的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-默认
所对应的 IP 地址 1.1.1.3
。云调度 GTM 结合地址管理功能和用户请求路由功能,把用户请求路由到一个服务端地址。
云调度 GTM 提供了地址、地址池、流量目标、地址池集合、路由规则来管理服务端地址。
如果您的 GTM 实例使用基础路由策略,您需要配置地址、地址池、地址池集合和路由规则。
说明
建议您把具有相同属性(可以是地理位置、运营商或其他您自定义的属性)的地址添加到同一个地址池。例如,多个 IDC 机房的 IP 地址都位于北京且使用中国电信作为网络运营商,那么您可以把这些 IP 地址都添加到名称为 北京-电信-机房
的地址池中。
如果您的 GTM 实例使用智能路由策略,您需要配置地址、地址池和流量目标。您无需配置地址池集合和路由规则,因为云调度 GTM 会根据您设为流量目标的地址池自动生成路由规则。
说明
您也可以手动创建路由规则。手动创建的路由规则的生效优先级高于云调度 GTM 自动生成的路由规则。手动创建路由规则时,您需要配置路由规则和地址池集合。
说明
建议您把具有相同属性(可以是地理位置、运营商或其他您自定义的属性)的地址添加到同一个地址池。例如,多个 IDC 机房的 IP 地址都位于北京且使用中国电信作为网络运营商,那么您可以把这些 IP 地址都添加到名称为 北京-电信-机房
的地址池中。
说明
自动生成的路由规则会在控制台中统一显示为 系统生成规则。您无法查看自动生成的路由规则的具体信息,也无法修改自动生成的路由规则。
用户请求的来源在云调度 GTM 中由线路定义。线路可以是网络运营商、地理位置或 IP 地址段。
在基础路由模式下,您可以为路由规则配置线路。云调度 GTM 会根据按线路为用户请求匹配一个路由规则。
在下面的示例图中:
在智能路由模式下,云调度 GTM 可以按照用户 IP 地址的网络运营商、地理位置等属性,自动探测用户到地址的访问延时,并自动创建路由规则把用户请求自动路由到访问延时最低的地址。
负载均衡配置包括权重、容量和负载。
说明
如果您在智能路由策略下创建了自定义路由规则,您为自定义路由规则设置的权重不会生效。
地址管理功能可以与负载均衡配置结合。下表展示了地址、地址池、地址池集合和路由规则支持的负载均衡参数。
权重 | 容量 | 负载 | |
---|---|---|---|
地址 | ✅ | ✅ | ✅ |
地址池 | ✅ | ✅ | ✅ |
地址池集合 | ❌ | ❌ | ❌ |
路由规则 | ✅ | ❌ | ❌ |
说明
在基础路由策略下,您可以分别为地址、路由规则中关联的地址池和路由规则设置权重。权重是一个正整数。
对于某一条线路,一个地址实际接收到的用户请求数的比例取决于该地址的实际权重值。
地址的实际权重 = 路由规则权重* 路由规则下地址池集合中的地址池权重* 地址权重
。例如,在下面的示例图的路由规则 1 中:
1.1.1.1
的地址的实际权重是 30*20*10 = 6000
。那么 6000/(6000+6000+3000+1000) = 3/8 的用户请求会被路由到该地址。1.1.1.2
的地址的实际权重是 30*20*10 = 6000
。那么 6000/(6000+6000+3000+1000) = 3/8 的用户请求会被路由到该地址。1.1.1.3
的地址的实际权重是 30*10*10 = 3000
。那么 3000/(6000+6000+3000+1000) = 3/16 的用户请求会被路由到该地址。2.1.1.1
的地址的实际权重是 10*10*10 = 1000
。那么 1000/(6000+6000+3000+1000) = 1/16 的用户请求会被路由到该地址。在智能路由策略下,您可以在容量优先路由模式下或负载反馈路由模式下进行负载均衡配置。 性能优先路由模式不支持负载均衡配置。
性能优先路由模式不支持负载均衡配置。
在容量优先路由模式下,您可以为地址或地址池设置容量。云调度 GTM 会在满足地址的容量限制的前提下,返回用户访问延时最低的地址。
容量是一个正整数,用来表示地址池或地址对用户流量的承载能力。您可以根据机房的带宽、并发连接数等参数为机房设置一个合理的容量值。容量是一个相对值,因此您无需输入地址的真实数据,但您需要确保不同地址或地址池之间使用统一的容量单位。
如果您选择为地址设置容量,那么地址池的容量就是地址池所包含的所有可用地址容量的和。如果您选择为地址池设置容量,云调度 GTM 会把地址池的容量平均分配给每个地址。
根据每个地址的容量比例,云调度 GTM 把对应比例的用户请求路由到各个地址。
在负载反馈路由模式下,您可以为地址或地址池设置容量。另外,您还可以向云调度 GTM 上报地址或地址池的负载。云调度 GTM 会按照您所反馈的当前负载值、目标负载值和容量,对地址的用户请求数比例进行动态调整。
负载是一个正整数,用来表示地址池或地址实际接收到的用户流量。您可以根据机房的带宽、并发连接数等参数为机房设置一个合理的负载值。负载是一个相对值,因此您无需输入地址的真实数据,但您需要确保不同地址或地址池之间使用统一的负载单位。
负载和容量必须使用相同的估算标准和单位。例如,如果容量是根据机房的带宽估算的,负载也必须是根据机房的带宽估算的。如果您选择为地址设置容量,您就只能向云调度 GTM 上报地址的负载。如果您选择为地址池设置容量,您就只能向云调度 GTM 上报地址池的负载。
根据您向云调度 GTM 上报的当前负载、目标负载和容量,云调度 GTM 会动态调整路由到各个地址的用户请求比例,使每个地址的实际负载不超过目标负载。
云调度 GTM 可以对地址进行定期健康检查。根据健康检查的结果和您的故障转移配置,云调度 GTM 可以:
云调度 GTM 可以通过一个或多个探测点定期向地址发起健康检查。健康检查的请求类型可以是 ICMP Ping、HTTP、HTTPS 或 TCP。根据健康检查的结果,地址会被判定为可用或不可用。您可以设置健康检查的时间间隔。健康检查时间间隔越短,云调度 GTM 越能及时发现故障地址。
每个地址池集合有一个 最小可用地址数 参数,表示该地址池集合被判定为可用所需要包含的最小可用地址数。如果一个地址池集合包含的可用地址数少于 最小可用地址数 ,则该地址池集合被判定为不可用。
下表展示了云调度 GTM 是否判定地址、地址池、地址池集合的可用性。
是否判定可用性 | |
---|---|
地址 | ✅ |
地址池 | ❌ |
地址池集合 | ✅ |
说明
健康检查参数可以在策略或路由规则中配置。
一条路由规则可以继承其所属策略的健康检查参数,也可以使用自定义的健康检查参数:
云调度 GTM 会根据地址的可用性进行自动故障转移。故障转移逻辑如下:
地址间的故障转移逻辑如下:
在一条路由规则中,只能有一个地址池集合生效。匹配这条路由规则的所有用户请求都会被路由到当前生效的地址池集合中的地址。
默认情况下,地址池集合的 地址池集合生效模式 参数被设置为 自动模式。当主地址池集合不可用时,云调度 GTM 会按照地址池集合优先级从高到低的顺序将所有用户请求转移到同一路由规则中的另一个可用的地址池集合。如果所有地址池集合都不可用,云调度 GTM 会把用户请求转移到优先级最高的地址池集合。如果更高优先级的地址池集合恢复可用,云调度 GTM 会再次把用户请求转移到更高优先级的地址池集合。
如果您需要在主地址池集合不可用时,手动选择可用的地址池集合。您可以把地址池集合的 地址池集合生效模式 参数设置为 手动模式。在这种模式下,地址间仍然会自动进行故障转移,但地址池集合间不会再自动进行故障转移。为了能让您及时得知地址池集合是否发生故障,您在云调度 GTM 中创建告警策略并把告警策略与 GTM 实例关联。如果一个地址池集合不可用,火山引擎云监控会通过您配置的沟通渠道发送告警通知。收到告警通知后,您根据您的容灾预案手动选择可用的地址池集合。
除地址池集合的状态之外,您可以通过告警策略监控 GTM 实例、路由规则、地址池集合、地址池和地址的状态。