cdn中的用户请求路由(Request Routing,RR)调度,也就是通常说的全局负载均衡(Global Server Load Balancing,GSLB),是指从CDN RR调度设别根据预先设定的策略把用户请求路由或调度引导到最佳的边缘节点访问,从而保证某一地区的用户请求能够就近的访问和快速响应。用户请求根据路由的设计涉及到就近性判断、路由调度机制和流量分配策略问题。
目前线上比较常用的调度方法有
- 基于DNS的重定向
- 基于HTTP的重定向,可以理解为302
- HTTP DNS调度
看资料说还有一种路由调度,目前没有接触过
1.基于DNS的调度
通过修改dns的解析和ttl值等做到流量的分配调度,基于请求端 local DNS 的出口 IP 归属地以及运营商的 DNS 调度,以www.jd.com为例
如上图所示,解析的步骤为root-servers.net(根dns服务器)—>gtld-server.net(通用顶级域)—>ns1.jdcache.com(主域名)
主域名的最后一个为最后一级调度域名,最后一级调度域名对应着A记录,为最后实际请求的ip。
DNS调度的缺点
- DNS 缓存时间在 TTL 过期前是不会刷新的, 这样会导致节点异常的时候自动调度延时很大,会直接影响线上业务访问
- 大量的 local DNS 不支持 EDNS 协议,拿不到客户的真实IP,CDN 绝大多数时候只能通过local DNS ip来做决策,经常会出现跨区域调度的情况。
有些时候,我们使用dns调度的方式,往往不能达到我们想要的效果,大概率是运营商对dns做了劫持,这样流量会一直留在省内,不会出省,本省运营商就有的钱赚。
举例来看,如下图,同一个调度域名,local dns的解析与权威dns的解析会不同,这种情况就是发生了劫持
2.基于http的重定向
谈到302,不得不说pcdn,那么pcdn是什么呢?
pcdn是利用电信边缘网络海量碎片化闲置资源而构建的低成本高品质内容分发网络服务,我们现实中见到的京东无线宝、迅雷玩客云等都属于pcdn的一种。
302 调度的优势:
-
实时调度,因为没有 local DNS 缓存的,适合 CDN 的削峰处理,对于成本控制意义重大
-
准确性高,直接获取客户端出口 IP 进行调度
-
带宽价格便宜,对于节省成本有着很大的帮助
302 调度的劣势:
-
每次都要跳转,对于延时敏感的业务不友好,或者说从请求开始,到拿到资源的时间会延长,一般只适用于大文件。
302的原理:
-
首先edge-dns(可以理解为302管理模块)下发配置,通告全部节点,某个域名如果将请求打到正常节点,都要将其302到pcdn节点
-
某个域名将正常请求打到正常节点,正常节点返回给302,告诉请求去pcdn节点再次重试
-
在pcdn节点获取资源
3.HTTP DNS调度
使用HTTP/HTTPS协议将域名解析请求直接发送至HTTPDNS服务器,绕过运营商的Local DNS,避免Local DNS存在的域名污染、劫持、调度不精准问题。
-
精准调度:基于用户真实来源IP,获取精准解析结果,将用户导向最近、最优业务节点。
-
防劫持:绕过运营商LocalDNS,避免域名劫持。
-
稳定可靠:多机房容灾,秒级故障切换。
-
快速生效:解决Local DNS不遵循权威TTL,解析结果长时间无法更新的问题
如上图所示,http dns的客户端直接访问HttpDNS接口,获取业务在域名配置管理系统上配置的访问延迟最优的IP(也会根据实际设置ttl的时间)。(基于容灾考虑,还是保留次选使用运营商LocalDNS解析域名的方式),客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可。
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/31380