系统极客一直在努力
专注于操作系统及软件使用教程

UPYUN CDN 2.0 多源站配置技术实现

UPYUN

6 月份,UPYUN 的云服务产品线进行了一次彻底的迭代,推出了全新的 CDN 2.0。

从技术上讲,这是一款具有行业领先性的产品。它的诸多功能亮点,如动静态资源一站加速、全节点自定义 SSL 、支持多源站配置、源站资源迁移等,都走在了同业竞品的前面。

今天的主题,就聚焦在其中的第三项——多源站配置的技术实现。将对它的原理进行简要的剖析。

功能特性

展开来讲,UPYUN CDN 2.0 多源站配置支持用户完全自主配置多个源站间的回源策略,包括:

  • 支持自定义回源端口号
  • 支持多条线路间的轮询策略
  • 支持主备线路间的无缝安全切换
  • 支持 HTTPS 方式回源

对于它的功能设置,可以通过 UPYUN CDN 空间管理后台一站式实现,详见下图

UPYUN CDN 2.0 多源站

技术解析

回源 Host

在回源配置中,UPYUN 选用回源 Host 来代替 回源地址,以此大幅提升回源成功率,其原理如下:

回源地址指的是源站实际可访问的网络地址,可以直接填 IP 地址也可以填写域名地址,如果是域名地址,那么 CDN 在回源时会对该域名地址进行 DNS 解析,然后通过解析出来的 IP 地址再进行访问,所以若解析失败也会导致无法正常回源。而回源 Host 是 CDN 回源时 HTTP 请求头中 Host 字段的值,一般是域名形式的字符串,当然也支持任意字符串形式,因此可以避免因 DNS 解析导致的回源失败。

通过管理后台,用户可以选择以下两种回源 Host 的模式:

  1. 域名跟随
  2. 自定义

域名跟随表示该 CDN 空间实际回源域名总是和当前 CDN 访问域名保持一致,例如:

  • 若用 foo.yourdomain.com 访问,那么回源 Host 就设置为 foo.yourdomain.com
  • 若用 bar.yourdomain.com 访问,那么回源 Host 就设置为 bar.yourdomain.com

自定义则表示回源 Host 就设置为此处自定义的值。特别地,如果该自定义值为空,则该空间的原始域名就会作为回源 Host。

回源方式

用户可以自主选择三种回源方式

  • HTTP 协议回源
  • HTTPS协议回源
  • 协议跟随

在默认时会以 HTTP 协议回源。而如果用户选择 HTTPS 协议回源,在源站开启 HTTPS 支持并配置可用的证书的情况下,所有回源请求都将以 HTTPS 协议访问源站。

当用户选择”协议跟随”选项时,回源协议始终会和客户端访问 CDN 的协议保持一致,即客户端用 HTTP 协议访问 UPYUN 的 CDN,那么回源时我们也会用 HTTP 协议进行回源,同样,若 HTTPS 访问,那么回源也是 HTTPS。

此外,用户可以手动指定回源地址的端口号。以 HTTP 协议回源时,回源地址的端口号默认为 80,而选择 HTTPS 协议回源时,端口号默认为 443,用户可以自主对这两个值进行修改。

源站线路

UPYUN CDN 2.0 支持 电信、移动、联通、BGP 及 其它 5 种源站线路配置。用户可以根据自身源站的网络情况选择合适的源站线路,例如源站有电信和联通双线地址,那么这里可以同时选择 电信 和 联通 并分别配置上相应回源地址等信息即可。源站线路完全根据客户自身的情况,不受 UPYUN 中转机房回源线路影响,配置方便而自主。

举例来讲。如果客户源站是 BGP 网络,那么这里直接选 BGP 即可。此时,我们任意线路的中转机房都会直接回该源站。而如果客户源站是长宽、教育网等小众网络,那么这里可以选择 其他线路。一旦配置完成,UPYUN 就会调度到 BGP 的中转机房进行回源,以最大程度低确保用户的回源质量。

回源地址

UPYUN CDN 2.0 允许同一个源站线路配置多个回源地址。“回源地址”选项既可以填写 IP 地址也可以填写域名地址。同时,在这里还可以自定义设置回源端口号。

1)线路属性和负载均衡策略

在同一个源站线路的回源地址配置中,除了默认的 主线路外,UPYUN 还支持备份线路的配置。用户的自主程度因此得到进一步深化。

默认情况下,主线路多个回源地址会以 RR 轮询方式进行调度。仅当所有主线路回源地址均不可达时,UPYUN 才会使用备份线路进行转发。而若备份线路有多个回源地址,那么负载均衡方式也和主线路一样,以 Round-Robin (https://en.wikipedia.org/wiki/Round-robin_scheduling)轮询方式进行调度。

2)轮询权重

在默认情况下,轮询权重都为 1。这表示所有回源地址轮询到的概率均等。用户也可以自定义轮询权重。

  • 轮询权重范围:整数(>=1)

举例来说。当主线路两个回源地址权重分别是 1 和 2 时,此时主线路集群在轮询调度中会有 1/3 的概率选中 192.168.11.1:80 这个节点,而选中 192.168.11.2:80 节点进行转发的概率则为 2/3。即当前节点轮询到的概率可按 当前节点权重 / 集群所有节点权重之和 这个公式计算。

3)最大失败次数和静默时间

  • 最大失败次数范围:整数 (>=0) 静默时间范围:整数 (>=1),单位秒

这点表示在一个静默时间 ( fail_timeout ) 内如果某个节点异常次数累计达到当前设置的 最大失败次数 ( max_fails ),那么在下一个 静默时间 ( fail_timeout ) 内,我们就认为这个节点宕机了,即在这段时间内不会再将请求转发给它。而当最大失败次数 ( max_fails ) 其值为 0 时,表示不会进行失败累计,静默时间 ( fails_timeout ) 也同时失效。

通过管理后台,用户可以自主对最大失败次数和静默时间进行设置,以最优化这两项的值。这有助于在后端异常的情况下最大程度减少对用户线上请求的影响。

这里实际上跟 Nginx 核心的 upstream 模块实现机制类似,以下文档可供进一步参考:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

分享到:更多 ()