You need to enable JavaScript to run this app.
导航
工作原理
最近更新时间:2024.10.18 14:42:30首次发布时间:2022.04.25 16:01:23

火山引擎云调度(GTM)把用户的 DNS 查询请求解析到一个地址。收到 DNS 响应后,用户会直接访问 DNS 响应中的地址。因此,用户流量不会经过云调度 GTM。

云调度 GTM 如何基于 DNS 路由用户请求

云调度 GTM 可以通过以下方式基于 DNS 路由用户请求:

  • 通过云调度 GTM 的权威 DNS 服务器路由用户请求:用户向互联网上的递归 DNS 服务器(例如 Local DNS 服务器或公共 DNS 服务器)发送 DNS 查询请求。互联网上的递归 DNS 服务器从云调度 GTM 的权威 DNS 服务器获取 DNS 查询结果,并把 DNS 查询结果返回给用户。
  • 通过移动解析 HTTPDNS 的递归 DNS 服务器和云调度 GTM 的权威 DNS 服务器路由用户请求:用户通过客户端 SDK 或 API 向火山引擎移动解析(HTTPDNS)的递归 DNS 服务器发送 HTTPDNS 请求。移动解析 HTTPDNS 的递归 DNS 服务器返回从云调度 GTM 的权威 DNS 服务器下发的 DNS 记录。参见 什么是移动解析 HTTPDNS

通过云调度 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 层面路由用户请求的步骤如下:

  1. 客户端向递归 DNS 服务器发送 DNS 查询请求,查询 example.com 域。
  2. 递归 DNS 服务器找到 example.com 域的权威 DNS 服务器,并向该服务器发送 DNS 查询请求。权威 DNS 服务器返回一条 CNAME 记录。该 CNAME 记录指向调度域名 example.com.gtm.volcdns.com
  3. 递归 DNS 服务器找到调度域名 example.com.gtm.volcdns.com 的权威 DNS 服务器。调度域名的权威 DNS 服务器是由云调度 GTM 提供的。递归 DNS 服务器向权威 DNS 服务器发送 DNS 查询请求,查询 example.com.gtm.volcdns.com 域。
  4. 云调度 GTM 的权威 DNS 服务器收到 DNS 查询请求后,会根据您在云调度 GTM 中配置的策略返回包含匹配的地址的 A 记录。假设云调度 GTM 返回的地址是 1.1.1.1
  5. 云调度 GTM 的权威 DNS 服务器把包含地址的 A 记录返回到递归 DNS 服务器。
  6. 递归 DNS 服务器把 A 记录返回到客户端。
  7. 客户端直接与地址 1.1.1.1 建立连接。用户流量不会经过云调度 GTM。

通过移动解析 HTTPDNS 的递归 DNS 服务器和云调度 GTM 的权威 DNS 服务器路由用户请求

这种路由方式需要结合云调度 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 条路由规则。

  • 路由规则 1:
    • 名称为 路由规则-北京
    • 线路的类型是地理位置线路,线路的值是 中国内地/华北/北京
    • 开启了软件定义解析 AnyMatch 功能。自定义标识的值是 12345,匹配方式是精确匹配。
    • 包含一个 IP 地址 1.1.1.1
  • 路由规则 2:
    • 名称为 路由规则-上海
    • 线路的类型是地理位置线路,线路的值是 中国内地/华东/上海
    • 开启了软件定义解析 AnyMatch 功能。自定义标识的值是 23456,匹配方式是精确匹配。
    • 包含一个 IP 地址 1.1.1.2
  • 路由规则 3:
    • 名称为 路由规则-默认
    • 线路的类型是 默认
    • 包含一个 IP 地址 1.1.1.3

客户端使用移动解析 HTTPDNS 的客户端 SDK 或 API 发送 HTTPDNS 请求,获取域名解析结果。
图片
云调度 GTM 结合移动解析 HTTPDNS 在 DNS 层面路由用户请求的步骤如下:

  1. 客户端向移动解析 HTTPDNS 的递归 DNS 服务器发送 HTTPDNS 请求,查询 example.com 域。
  2. 移动解析 HTTPDNS 的递归 DNS 服务器收到 HTTPDNS 请求后,会根据云调度 GTM 中下发的策略向客户端返回包含匹配的地址的 A 记录:
    • 如果客户端 IP 地址的地理位置是 北京
      • 如果 HTTPDNS 请求中的自定义标识是 12345,那么该 HTTPDNS 请求会匹配到名称为 路由规则-北京 的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-北京 所对应的 IP 地址 1.1.1.1
      • 如果 HTTPDNS 请求中的自定义标识不是 12345,那么该 HTTPDNS 请求会匹配到名称为 路由规则-默认 的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-默认 所对应的 IP 地址 1.1.1.3
    • 如果客户端 IP 地址的地理位置是 上海
      • 如果 HTTPDNS 请求中的自定义标识是 23456,那么该 HTTPDNS 请求会匹配到名称为 路由规则-上海 的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-上海 所对应的 IP 地址 1.1.1.2
      • 如果 HTTPDNS 请求中的自定义标识不是 23456,那么该 HTTPDNS 请求会匹配到名称为 路由规则-默认 的路由规则。因此,移动解析 HTTPDNS 的递归 DNS 服务器会返回 路由规则-默认 所对应的 IP 地址 1.1.1.3
  3. 客户端直接与地址建立连接。用户流量不会经过云调度 GTM 和移动解析 HTTPDNS。

云调度 GTM 如何实现流量管理

云调度 GTM 结合地址管理功能和用户请求路由功能,把用户请求路由到一个服务端地址。

  • 地址管理:指您使用地址、地址池、流量目标、地址池集合和路由规则对您的服务端地址(例如 IDC 机房的 IP 地址)进行管理。
  • 用户请求路由:指云调度 GTM 根据您的配置路由用户请求。请求路由功能可以被分类为:
    • 按请求的来源路由用户请求。
    • 按负载均衡配置路由用户请求。
    • 按健康检查和故障转移配置路由用户请求。

地址管理

云调度 GTM 提供了地址、地址池、流量目标、地址池集合、路由规则来管理服务端地址。

基础路由

如果您的 GTM 实例使用基础路由策略,您需要配置地址、地址池、地址池集合和路由规则。

  • 地址:地址可以是一个 IPv4 地址、IPv6 地址或域名。例如,在实际业务中,地址可以是 IDC 机房的 IP 地址、负载均衡服务的 CNAME 域名或 CDN 服务的 CNAME 域名。
  • 地址池:一个或多个地址可以被添加到同一个地址池。一个地址也可以被添加到多个地址池。

    说明

    建议您把具有相同属性(可以是地理位置、运营商或其他您自定义的属性)的地址添加到同一个地址池。例如,多个 IDC 机房的 IP 地址都位于北京且使用中国电信作为网络运营商,那么您可以把这些 IP 地址都添加到名称为 北京-电信-机房 的地址池中。

  • 地址池集合:一个地址池集合可以包含一个或多个地址池。一个或多个地址池集合可以包含同一个地址池。
  • 路由规则:一条路由规则可以包含一个或多个地址池集合。在一条路由规则中,只有一个地址池集合作为主地址池集合生效,其他地址池集合只能作为备地址池集合且处于不生效状态。用户请求只会被路由到生效的地址池集合中的地址。一个 GTM 实例可以包含一个或多个路由规则。

图片

智能路由

如果您的 GTM 实例使用智能路由策略,您需要配置地址、地址池和流量目标。您无需配置地址池集合和路由规则,因为云调度 GTM 会根据您设为流量目标的地址池自动生成路由规则。

说明

您也可以手动创建路由规则。手动创建的路由规则的生效优先级高于云调度 GTM 自动生成的路由规则。手动创建路由规则时,您需要配置路由规则和地址池集合。

  • 地址池集合:一个地址池集合可以包含一个或多个地址池。一个或多个地址池集合可以包含同一个地址池。
  • 路由规则:一条路由规则可以包含一个或多个地址池集合。在一条路由规则中,只有一个地址池集合作为主地址池集合生效,其他地址池集合只能作为备地址池集合且处于不生效状态。用户请求只会被路由到生效的地址池集合中的地址。一个 GTM 实例可以包含一个或多个路由规则。
  • 地址:地址可以是一个 IPv4 地址、IPv6 地址或域名。例如,在实际业务中,地址可以是 IDC 机房的 IP 地址、负载均衡服务的 CNAME 域名或 CDN 服务的 CNAME 域名。
  • 地址池:一个或多个地址可以被添加到同一个地址池。一个地址也可以被添加到多个地址池。

    说明

    建议您把具有相同属性(可以是地理位置、运营商或其他您自定义的属性)的地址添加到同一个地址池。例如,多个 IDC 机房的 IP 地址都位于北京且使用中国电信作为网络运营商,那么您可以把这些 IP 地址都添加到名称为 北京-电信-机房 的地址池中。

  • 流量目标:在智能路由策略下,路由规则默认由云调度 GTM 基于流量目标自动生成。您可以把一个或多个地址池设置为流量目标。自动生成的路由规则中所包含的地址池就是您设置为流量目标的地址池。

    说明

    自动生成的路由规则会在控制台中统一显示为 系统生成规则。您无法查看自动生成的路由规则的具体信息,也无法修改自动生成的路由规则。

图片

按请求的来源路由用户请求

用户请求的来源在云调度 GTM 中由线路定义。线路可以是网络运营商、地理位置或 IP 地址段。

基础路由

在基础路由模式下,您可以为路由规则配置线路。云调度 GTM 会根据按线路为用户请求匹配一个路由规则。

在下面的示例图中:

  • 来自北京电信的用户请求会匹配线路为北京的路由规则,然后请求就会被路由到路由规则所关联的生效地址池集合下的地址池中的地址。这些地址是北京机房的中国电信 IP 地址。
  • 来自上海移动的用户请求会匹配线路为上海的路由规则,然后请求就会被路由到路由规则所关联的生效地址池集合下的地址池中的地址。这些地址是上海机房的中国移动 IP 地址。

图片

智能路由

在智能路由模式下,云调度 GTM 可以按照用户 IP 地址的网络运营商、地理位置等属性,自动探测用户到地址的访问延时,并自动创建路由规则把用户请求自动路由到访问延时最低的地址。

按负载均衡配置路由用户请求

负载均衡配置包括权重、容量和负载。

  • 仅基础路由策略支持权重。
  • 仅智能路由策略支持容量和负载。

    说明

    如果您在智能路由策略下创建了自定义路由规则,您为自定义路由规则设置的权重不会生效。

地址管理功能可以与负载均衡配置结合。下表展示了地址、地址池、地址池集合和路由规则支持的负载均衡参数。

权重

容量

负载

地址

地址池

地址池集合

路由规则

  • ✅:支持
  • ❌:不支持

说明

  • 在一条路由规则中,只能有一个地址池集合生效。因此,地址池集合与负载均衡配置无关。
  • 对于旗舰版的 GTM 实例,您可以在一个地址池集合中为关联的地址池设置权重。如果一个地址池被多个地址池集合关联,那么您可以分别在不同的地址池集合中为该地址池设置权重。

基础路由

在基础路由策略下,您可以分别为地址、路由规则中关联的地址池和路由规则设置权重。权重是一个正整数。

  • 地址权重:一个地址在一个地址池中的权重。
  • 地址池集合中的地址池权重:一个地址池在一个地址池集合中的权重。
  • 路由规则权重:一条路由规则在与一条相同的线路匹配的多条路由规则中的权重。

对于某一条线路,一个地址实际接收到的用户请求数的比例取决于该地址的实际权重值。

  • 如果一个地址仅属于一个地址池,则该地址的实际权重值的计算方法是:地址的实际权重 = 路由规则权重* 路由规则下地址池集合中的地址池权重* 地址权重。例如,在下面的示例图的路由规则 1 中:
    • IP 地址为 1.1.1.1 的地址的实际权重是 30*20*10 = 6000。那么 6000/(6000+6000+3000+1000) = 3/8 的用户请求会被路由到该地址。
    • IP 地址为 1.1.1.2 的地址的实际权重是 30*20*10 = 6000。那么 6000/(6000+6000+3000+1000) = 3/8 的用户请求会被路由到该地址。
    • IP 地址为 1.1.1.3 的地址的实际权重是 30*10*10 = 3000。那么 3000/(6000+6000+3000+1000) = 3/16 的用户请求会被路由到该地址。
    • IP 地址为 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 可以:

  • 根据健康检查的结果进行自动故障转移。
  • 向您发送告警通知,提醒您进行手动故障转移。

健康检查

云调度 GTM 可以通过一个或多个探测点定期向地址发起健康检查。健康检查的请求类型可以是 ICMP Ping、HTTP、HTTPS 或 TCP。根据健康检查的结果,地址会被判定为可用或不可用。您可以设置健康检查的时间间隔。健康检查时间间隔越短,云调度 GTM 越能及时发现故障地址。

每个地址池集合有一个 最小可用地址数 参数,表示该地址池集合被判定为可用所需要包含的最小可用地址数。如果一个地址池集合包含的可用地址数少于 最小可用地址数 ,则该地址池集合被判定为不可用。

下表展示了云调度 GTM 是否判定地址、地址池、地址池集合的可用性。

是否判定可用性

地址

地址池

地址池集合

  • ✅:是
  • ❌:否

说明

健康检查参数可以在策略或路由规则中配置。

  • 如果 GTM 实例的策略类型是基础路由策略:
    • 健康检查参数可以在策略或路由规则中配置。
  • 如果 GTM 实例的策略类型是智能路由策略:
    • 如果您没有创建自定义路由规则,那么健康检查参数只能在策略中配置。
    • 如果您创建了自定义路由规则,那么健康检查参数可以在策略或自定义路由规则中配置。

一条路由规则可以继承其所属策略的健康检查参数,也可以使用自定义的健康检查参数:

  • 如果一条路由规则继承了其所属策略的健康检查参数,那么该策略的健康检查参数在路由规则中生效。
  • 如果一条路由规则使用了自定义的健康检查参数,那么自定义的健康检查参数在该路由规则中生效。

图片

自动故障转移

云调度 GTM 会根据地址的可用性进行自动故障转移。故障转移逻辑如下:

地址间的故障转移

地址间的故障转移逻辑如下:

  • 当某个地址不可用时,云调度 GTM 会在域名的 DNS 解析记录中移除该地址。更新后的 DNS 解析记录在一个递归 DNS 服务器处生效后,使用该递归 DNS 服务器获取域名解析结果的用户请求将不再被路由到该地址。云调度 GTM 会按您的负载均衡配置重新在可用的地址之间分配用户请求。
  • 当该地址恢复可用后,云调度 GTM 会在域名的 DNS 解析记录中重新包含该地址。更新后的 DNS 解析记录在一个递归 DNS 服务器处生效后,使用该递归 DNS 服务器获取域名解析结果的用户请求将会再次被路由到该地址。云调度 GTM 会按您的负载均衡配置重新在可用的地址之间分配用户请求。

图片

地址池集合间的故障转移

在一条路由规则中,只能有一个地址池集合生效。匹配这条路由规则的所有用户请求都会被路由到当前生效的地址池集合中的地址。

默认情况下,地址池集合的 地址池集合生效模式 参数被设置为 自动模式。当主地址池集合不可用时,云调度 GTM 会按照地址池集合优先级从高到低的顺序将所有用户请求转移到同一路由规则中的另一个可用的地址池集合。如果所有地址池集合都不可用,云调度 GTM 会把用户请求转移到优先级最高的地址池集合。如果更高优先级的地址池集合恢复可用,云调度 GTM 会再次把用户请求转移到更高优先级的地址池集合。

图片

手动故障转移

如果您需要在主地址池集合不可用时,手动选择可用的地址池集合。您可以把地址池集合的 地址池集合生效模式 参数设置为 手动模式。在这种模式下,地址间仍然会自动进行故障转移,但地址池集合间不会再自动进行故障转移。为了能让您及时得知地址池集合是否发生故障,您在云调度 GTM 中创建告警策略并把告警策略与 GTM 实例关联。如果一个地址池集合不可用,火山引擎云监控会通过您配置的沟通渠道发送告警通知。收到告警通知后,您根据您的容灾预案手动选择可用的地址池集合。

除地址池集合的状态之外,您可以通过告警策略监控 GTM 实例、路由规则、地址池集合、地址池和地址的状态。

图片