01 引言
根据2022年Q3财报数据,B站的MAU已经稳定增长至3.3亿。用户在闲暇之余刷刷视频、看看直播,给自己喜爱的UP主一键三连,已经成为了生活中不可缺少的一部分。B站基础网络团队本着社区优先的理念,持续优化互联网接入网络架构,近2年内根据IDC规模发展和业务需求,对公网架构进行了有序升级改造,从稳定性、经济性等方面为B站业务提供了坚实保障。
02 B站公网1.0结构
在B站IDC公网1.0结构中,每个机房有独立的静态带宽线路,部分重要业务基于延迟要求配置BGP带宽提供服务。网络结构如图1所示:
图1 B站IDC公网1.0结构
B站公网1.0结构中,核心网络设备相当于整个网络枢纽,最大化的利用了核心网络设备硬件资源和转发能力。公网出口线路直连本机房核心网络设备,同时核心网络设备旁挂LB、NAT等基础组件,另外下挂机房内DCN网络。
控制层面:两台核心网络设备采用堆叠技术虚拟成一台。在提升单台设备硬件接入能力的同时,降低了整体运维成本。
线路资源:各家运营商资源至少冗余链路接入,提供静态带宽和BGP带宽接入,保证公网出口冗余能力。
服务组件:机房内LB(Load Balance)、NAT(Network Address Transfer)等基础网关服务采用One-Arm的方式旁挂核心网络设备,主动提供对外、对内的Internet服务访问能力。
路由策略:由于核心网络设备在网络中的角色特殊性,对于特定流量需要做特定的路由策略,才能进行正确转发,如:公网流量需要通过技术手段将流量先引入LB,再转发到机房内特定服务器。
该架构组网简单,涉及设备较少、网络层面配置简单,但是随着B站的业务发展,在长期的运维过程中,我们也发现了几个值得仔细考虑的问题。
问题一:网络故障域
在B站公网1.0的网络结构中,核心网络设备在网络中承担的角色非常重,所有流量都要经过核心设备转发,这就造成核心网络设备上任何一个故障,都会有较大的影响。比如单个端口器件异常,有可能会影响到公网和内网服务。长此以往网络运维将面临巨大挑战,该问题也成为了B站网络团队需要重点解决的问题之一。
问题二:网络可靠性
在B站1.0公网架构中,每个IDC都会引入静态三线带宽和BGP带宽。公网出口的可用性与运营商网络强耦合,更多依赖运营商公网的稳定性。当运营商公网出现故障时,网络上缺乏主动隔离故障的手段和能力,从而导致业务受损。处理方式上只能主动告知业务进行线路切换,缓解由运营商网络故障的带来的异常影响。
问题三:网络扩展性
B站公网出口以静态带宽为主,BGP带宽为辅。静态带宽资源基本上被运营商强绑定,扩容周期长且流程繁琐,甚至部分地区受运营商网络影响,扩容存在一定困难。结合B站业务的特殊性,在重大活动期间需要具备公网大带宽能力,如果运营商带宽资源准备不足,B站将会面临业务损。网络上需要考虑临时应急方案,直接后果是因扩展性问题增加了网络的复杂性。
问题四:网络资源
众所周知,全球公网IPV4地址资源日渐缺乏,且公网IP地址与运营商及机房有一定的强捆绑性,部分机房申请公网IPV4地址困难,面临没有公网IPV4地址问题。带宽利用率方面,由于B站各个机房部署的业务不同,出入带宽模型有所差异,不同机房公网带宽利用率差别较大,无法充分利用各个机房公网带宽资源。
问题五:带宽成本
每个IDC出口同时提供静态带宽和BGP带宽能力,当新建核心机房时,都需要寻找合适的公网资源并对资源进行评估及测试,整个过程复杂且周期长。不同地区的公网带宽相互隔离,Buffer都需要单独预留,造成了浪费;同时因为没有相互调度的能力,为了保证业务质量,所以使用了大量的BGP带宽资源。然而此举不可持续,随着业务的发展,BGP带宽量每年持续增长,会导致BGP的带宽成本持续增加。
问题六:容灾能力
IDC日常使用中,任何一个机房的公网出口都有可能出现异常情况。当公网出口发生故障时,以同城双活业务部署为例,业务按降级预案进行切换,从A机房降级到B机房,在底层带宽资源上A和B两个机房需要按照降级预案准备同等容量的公网带宽,以达到A/B两个机房之间公网冗余能力,从而保证业务不受影响。然而当发生地域性级别的公网故障时(如:某运营商某个省骨干网异常),同城双活方案将失效,因此业务还需要考虑异地容灾降级方案,这样会使业务的整体容灾能力变得非常复杂。
03 B站公网2.0结构
为了解决公网1.0结构中存在的问题,2020底B站基础网络团队调研了国内外互联网头部公司的网络架构,开始重新设计机房整体网络结构,包括DCN内网、DCI骨干网、外网、基础服务网络。重点从如下几个方面因素进行优化设计。
网络区域化:网络按功能区划分,各功能区域划清界限,职责清晰;
SLA差异化:不同的网络模块按不同的SLA要求设计,满足不同业务的需求;
资源集中化:新建区域级公网POP节点,对外接入不同公网带宽资源,对内统一接入,为各机房提供公网服务能力;
硬件差异化:基于不同的网络需求,配置不同的硬件,比如公网更多关注路由能力,考虑使用路由器;内网更多关注带宽能力,考虑使用交换机;
基于以上因素考虑,B站基础网络团队设计了B站公网2.0结构,包含B站外网骨干网2.0结构和IDC公网2.0结构,分别如下图2和图3所示:
图2 B站外网骨干网2.0结构
B站外网骨干网2.0结构说明
B站外网骨干网做为底层承载网,为业务提供公网接入能力,实现对用户接入;
B站外网骨干网采用路由器设备,同时具备高性能转发和故障快速收敛能力;
单区域至少部署双POP节点,每个POP节点接入不同的付费公网带宽资源,免费带宽资源;
对内统一接入,将公网带宽资源下发到各个机房,提升公网带宽利用率的同时保障公网容灾能力;
减少人力成本投入,新建IDC可以共用外网骨干网带宽资源,无需再走一遍重复的接入流程;
各机房集中资源接入,规模效应能够具备更优的谈判条件,从而获取更优质更经济的公网资源;
由于接入了异地资源,能够实现单个机房公网出口跨地域级的容灾能力,大大简化业务的多活架构;
降低公网故障带宽和降级预案复杂度,仅需DNS将业务调度至本机房的另一套公网资源即可;
图3 B站IDC公网2.0结构
B站IDC公网2.0结构说明
每个机房内部存在独立的外网区域,并可根据业务需求灵活扩展;
外网核心(E-CORE)与公网组件(LB/NAT)组成机房的外网区;
组网完全去堆叠化,每个层级的设备均独立运行,控制层面完全独立;
每个机房上联外网骨干网,提供静态带宽和BGP带宽资源以及免费带宽资源;
加强公网安全能力建设,SGW(Security GateWay)旁挂于外网核心,用于检测公网异常流量;
LB/NAT采用Two-Arm的方式串联在外网与内网之间,起到内外网隔离的作用,降低网络运维复杂度;
LB以集群的方式对外提供服务,保障服务高可用,不同的LB机器发布相同的公网地址,为业务提供服务;
NAT与内网核心(I-CORE)建立BGP邻居并发布默认路由至DCN网络,为机房服务器提供Internet服务;
B站公网2.0结构,经过半年建设、半年灰度验证,在业务部门的配合下,2022年初项目已完成上线,各IDC机房公网业务平稳完成迁移并稳定运行至今。
04 外网骨干网扩展
CDN网络
一个视频网站要为用户提供服务就避不开CDN与源站。海量视频文件需要从存储系统分发到用户终端,为了缩短B站与用户端的距离,提升用户体验,B站尽可能的在全国甚至全球部署CDN网络,以达到就近覆盖用户的目的。一般单个CDN节点规模小,存储、算力均有限,所以B站会在全国范围内部署多个大容量的区域级缓存CDN节点提供服务能力。B站视频业务数据分发存储与地址位置关系大致如下图4:
图4 视频业务数据分发及存储示意图
CDN/边缘节点:规模小,提供算力、数据存储能力有限,就近为用户提供服务,业务利用相对少量的计算和存储资源缓存热门数据,并且会根据用户观看偏好等行为进行缓存内容的及时更新调整;
区域级骨干节点:规模适中,区域性集中的算力和数据存储,作为边缘节点的容量溢出以及故障备份,也可说为二级缓节点,同时也对用户提供服务;
核心IDC:即源站IDC机房,规模大,承担整个公司的规模化算力和数据存储,具有B站所有服务资源。
CDN回源
早期B站CDN均是采用公网回源的方案,该方案实现简单,对公网强依赖,有链路不稳定的风险,公网带宽占用较大,成本较高。示意图如下图5:
图5 B站早期视频播放链路简易示图
中期为了降低公网带宽成本,业务采用CDN分级部署方案,一级节点就近公网回源二级节点,减少了公网链路长度,有效提升了回源的稳定性。示意图如下图6:
图6 B站中期视频播放链路简易示图
后期为了规避公网波动对回源的影响,进一步降低公网回源带宽成本,对于部分CDN节点,建设专线用于业务回源。结构如下图7:
图7 B站后期视频播放链路简易示图
从外向内共分为5级,连接关系、接入方式如下:
CDN节点单规/双规就近接入城域网节点,优先通过专线网络回源,公网回源则作为兜底策略;
城域网节点就近单规/双规上联至区域级骨干网节点,接入方式取决于物理位置及成本考量;
骨干网节点就近接入B站POP节点,通过POP节点打通CDN与源站网络;
总体来说,CDN节点做为B站外网骨干网的扩展网络,在有限的资源和成本下,提供了更稳定的网络服务,为B站用户提供了更优的冲浪体验。
05 未来展望
B站基础网络团队从稳定、成本、效率出发,以持续优化用户体验为目标,将用户始终放在第一位。依托运营商资源逐步优化公网服务,减少上层业务及用户对网络异常的感知。下一步我们将加快B站外网骨干网的覆盖范围,加强跨大区级的公网调度能力。同时结合业务发展需求与行业内发展趋势,优化公网部分组件及探索更前沿的技术,为B站提供更稳定、更高效、更低成本的网络服务。