具体方案如下:
1. 对于全站加速,节点内部的探测采用的非请求触发式探测(已实现),在首次访问时,使用配置的顶层父方案作为回源节点回源,具体如下:
master_parent_area: "area.parent1st.ctcdn.com" #动态区域中心的主域名,分区域解析
backup_parent_area: "area.parent2nd.ctcdn.com" #动态区域中心的备份域名,分区域解析
master_parent_country: "country.parent1st.ctcdn.com" #动态全国中心的主域名,做全量解析
backup_parent_country: "country.parent2nd.ctcdn.com" #动态全国中心的备份域名,做全量解析
master_parent_area_all: "area_all.parent1st.ctcdn.com" #动态区域中心全量解析的主域名,该域名允许配置为空
backup_parent_area_all: "area_all.parent2nd.ctcdn.com" #动态区域中心全量解析的备份域名,该域名允许配置为空
1)由于边缘主机角色,只会解析动态区域中心的主域名,只有当主域名解析失败或没配置,才解析动态区域中心的备份域名,并对区域父进行探测;而全站加速只有边缘主机会进行动态路径设置,所以,针对首次访问加速,边缘需要额外根据源站ip进行edns解析顶层父方案的域名并进行探测,顶层父方案定义:
- 若配置了动态全国中心的主域名master_parent_country且解析不为空,则顶层父方案为master_parent_country配置的父方案;否则,配置了动态全国中心的备域名backup_parent_country且解析不为空,则顶层父方案为backup_parent_country配置的父方案域名;
- 如果没有配置动态全国中心的主备域名或解析都为空,若配置了动态区域中心全量解析的主域名master_parent_area_all且解析不为空,则顶层父方案为master_parent_area_all配置的父方案;否则,若配置了动态区域中心全量解析的备域名backup_parent_area_all且解析不为空,则顶层父方案为backup_parent_area_all配置的父方案;
- 如果没有配置动态全国中心的主备域名或解析都为空、且没有配置动态区域中心全量解析的主备域名或解析都为空,若配置了动态区域中心分区域解析的主域名且解析不为空,则顶层父方案为master_parent_area配置的父方案;否则,配置了动态区域中心分区域解析的备域名且解析不为空,则顶层父方案为backup_parent_area配置的父方案;
2)将顶层父方案作为全站加速频道的回源节点与中转节点一起(回源节点和中转节点进行去重)加入到内部抽象域名dynamic.inner.ctyun.cn的探测中,并将顶层父方案解析出来的父节点列表按照频道粒度作为回源节点vip进行保存,上报dynamic.inner.ctyun.cn频道的所有父节点探测数据到ccs,ccs下发该频道的两两节点的最优路径到agent,agent对于不活跃的频道设置首次访问的加速路径,路径拼接逻辑如下:
a)查找所有属于加速频道的回源节点vip路径;
b)agent获取到本节点到回源节点的最优路径后,判断该路径中的中转节点(除回源父节点外)是否在该频道使用的资源池里面,如果不在里面则过滤掉;
c)剩余的路径再与源站ip进行路径拼接,每个源站ip可能存在多条回源路径,如果配置的是非fastest_simple回源策略,则将其中一条回该源站ip的回源路径放在path,其他回该源站ip的回源路径放在backup_paths的数组中供网关访问失败重试;否则,对于fastest_simple回源策略,将所有源站ip的多条回源路径进行混排,并放在path中,按照随机的顺序进行排序,backup_paths的数组为空;
3)删除全站加速原来根据源站ip进行源站区域覆盖解析组域名的edns解析及回源节点vip列表的更新,根据顶层父方案解析的回源节点来更新探测的回源节点vip列表,并添加回源节点vip的探测计数,针对旧的回源节点vip探测,如果其他频道都没有再探测,则直接剔除该回源节点vip的探测,并清理其探测数据;
2. 对于应用加速,由于没有规划父方案,都是采用节点互探的机制来进行动态选路,因此,不能使用和全站加速一样的方案来解决首次访问加速的问题,考虑到应用加速资源池数量少,维护管理起来没有全站加速那么复杂,仍然采用用户上网加速及首次访问加速优化方案,并在原来方案的基础上,增加回源节点是否在频道配置的资源池的判断,过滤掉不在频道资源池的回源节点路径,当没有任何可用路径时,则进行首次访问加速空路径的告警。
3. 执行分频道热加载及全局reload时,以下几种场景会立即重新按照首次访问动态加速拼接路径给网关:
- 回源策略变更;
- 源站ip列表及协议、端口变更;
- 父节点ip列表及协议、端口变更;
- 首次访问加速(还未触发探测选路或动态路径设置到网关失败);
备注:如果没有可用的首次访问加速拼接路径,则调用/roledel接口清空网关共享内存的动态路径,避免网关仍然使用旧路径。
废弃detect_conf_module配置块中的origin_view_cover配置项