B 站接口类请求主要通过 DCDN 加速回到源站,DCDN 节点分为两种类型,通过公网回源的公网节点和通过专线回源的专线节点。正常情况下 DCDN 公网节点可通过双公网 POP 回到源站,DCDN 专线节点则通过内网专线回到源站。并且在 DCDN 层面,有针对源站的 Health Check 功能,会自动摘除探测异常的源站 IP。比如当 DCDN 节点请求回源 POP A 发生异常时,会重试到 POP B。DCDN 公网节点常态可通过双 POP 交叉回源站,应对 DCDN 到某一个源站 POP 点出现丢包或中断,容灾方案自动生效,对业务几乎无影响。
然而本次故障中双 POP 至机房 A 故障,相当于机房 A 公网脱网。不同于单 POP 故障,常规双 POP 之间互相容灾方案无法生效。除了几个核心业务场景因前置配置了机房级别的故障容灾策略未受影响外,非自动容灾的多活业务需要执行机房维度切流进行止损。由于DCDN 专线节点可以通过 B2-CDN 环网专线回源不受本次故障影响,最终成为了非多活业务的逃生通道。
部分业务当前是没有多机房多活部署的,仅在一个机房可以处理流量;因此在原来的方案中,这部分非多活业务流量只会回源至机房 A,无法应对机房 A 公网入口故障。如同本次事故中,非多活业务流量无法切流止损,依赖降级走CDN专线节点。
为了应对单机房公网入口、四层负载、七层负载故障等场景,我们计划在DCDN侧为非多活业务规则也配置源站级别自动容灾,在七层负载SLB实现多机房多集群的路由配置合并统一,确保非多活业务的流量在故障时可进入机房 B 路由至API网关;在API网关侧判断接口是否多活,非多活接口通过内网专线进行流量转发,实现流量逃生。