6 月份,UPYUN 的云服务产品线进行了一次彻底的迭代,推出了全新的 CDN 2.0。
从技术上讲,这是一款具有行业领先性的产品。它的诸多功能亮点,如动静态资源一站加速、全节点自定义 SSL 、支持多源站配置、源站资源迁移等,都走在了同业竞品的前面。
今天的主题,就聚焦在其中的第三项——多源站配置的技术实现。将对它的原理进行简要的剖析。
功能特性
展开来讲,UPYUN CDN 2.0 多源站配置支持用户完全自主配置多个源站间的回源策略,包括:
- 支持自定义回源端口号
- 支持多条线路间的轮询策略
- 支持主备线路间的无缝安全切换
- 支持 HTTPS 方式回源
对于它的功能设置,可以通过 UPYUN CDN 空间管理后台一站式实现,详见下图
技术解析
回源 Host
在回源配置中,UPYUN 选用回源 Host 来代替 回源地址,以此大幅提升回源成功率,其原理如下:
回源地址指的是源站实际可访问的网络地址,可以直接填 IP 地址也可以填写域名地址,如果是域名地址,那么 CDN 在回源时会对该域名地址进行 DNS 解析,然后通过解析出来的 IP 地址再进行访问,所以若解析失败也会导致无法正常回源。而回源 Host 是 CDN 回源时 HTTP 请求头中 Host 字段的值,一般是域名形式的字符串,当然也支持任意字符串形式,因此可以避免因 DNS 解析导致的回源失败。
通过管理后台,用户可以选择以下两种回源 Host 的模式:
- 域名跟随
- 自定义
域名跟随表示该 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
最新评论
尝试了一下,居然被你发现了🥹
咦!这个月的视频居然翻译了,站长越来越勤劳了啊!
应该是通过 VMware 更新服务器偷鸡成功🤭
感谢!可以下载,使用多线程下载可以下的更快