注本文在大模型辅助下完成。1. 需求场景目前互联网的服务普遍部署在数据中心Data Center内。数据中心是一个复杂的系统涉及供电、制冷、网络、供水等一系列环节。由于设备故障、供电中断、网络割接甚至自然灾害等因素数据中心随时可能出现故障。从服务高可用的角度一般需要将服务部署在多个数据中心内以便在单个数据中心故障时仍然保证服务的持续提供。在多数据中心场景下核心问题是如何将用户流量在多个数据中心之间进行调度。如下图所示有2个数据中心每个数据中心内都部署了相同的服务服务集群1和服务集群2各有一个网络接入点。我们需要解决的是用户流量应该通过什么机制在这多个数据中心之间做调度图1多数据中心场景下的流量调度2. 三种调度手段概述与适用场景在多数据中心流量调度中业界通常有三种手段可供选择DNS调度、路由切换和基于七层负载均衡的调度。这三种手段作用于网络的不同层次各有其适用场景和局限性。调度手段作用层次调度粒度生效速度适用场景DNS调度应用层域名级分钟级受TTL和缓存影响兜底容灾、跨地域调度路由切换网络层IP前缀级秒级~分钟级单机房故障、接入点故障七层负载均衡应用层请求级秒级服务级故障、精细流量均衡核心原则没有一种手段是万能的多数据中心流量调度需要分层协同各司其职。3. 基于DNS的调度方案兜底手段3.1 方案说明DNS调度是目前最普遍的跨数据中心流量调度方案。每个数据中心的接入点分配不同的VIP如1.1.1.1和2.2.2.2。客户端通过智能DNS将域名解析为IP地址智能DNS根据客户端IP地址和预设策略返回对应的接入点IP。图2基于智能DNS的调度方案智能DNS根据源IP地址确定解析的结果当某个数据中心发生故障接入点故障或服务集群故障时可以通过修改DNS解析策略将流量切换到其他数据中心。图3基于智能DNS实现故障切换智能DNS将流量从数据中心1切换到数据中心23.2 方案的问题DNS方案存在两个明显缺陷(1) 生效速度慢DNS采用缓存机制客户端和Local DNS都会缓存解析结果。即使TTL设置为5分钟最终生效延迟往往达到8-10分钟。部分Local DNS不遵循TTL甚至长期不更新导致部分用户长时间无法完成切换。(2) 调度精度低权威DNS无法判断每个Local DNS所代表的用户规模难以实现精确的流量比例控制。图4权威DNS难以判断Local DNS代表的用户规模3.3 重新定位DNS是兜底手段鉴于上述问题DNS更适合作为兜底手段而非日常精细调度的首选工具。在以下场景下DNS可以发挥最后防线的作用七层负载均衡系统本身故障当BFE等七层负载均衡集群整体不可用时通过DNS将流量切到其他数据中心。单机房整体故障且路由切换失效在路由层面无法完成切换的极端情况下DNS提供最后的容灾能力。跨地域调度对于地理跨度较大的数据中心如北京与上海在没有充足内网互联时DNS仍是必要的流量引导手段。4. 基于路由切换的调度方案机房级故障的首选4.1 方案说明路由切换是在网络层实现的流量调度常见方式包括BGP Anycast和静态路由切换。以BGP Anycast为例同一个IP地址如1.1.1.1同时在多个数据中心的接入点宣告。正常情况下用户流量根据BGP路由策略进入最近的数据中心。当某个数据中心发生故障时停止该节点的BGP宣告流量会自动通过路由收敛切换到其他存活节点。图5基于路由切换的调度方案静态路由切换则是通过在网络设备上调整路由优先级或下一跳将流量引导至其他数据中心。4.2 为什么路由切换更适合单机房故障在单机房故障场景下如果需要对大量域名进行流量调度高频修改DNS记录会带来严重问题DNS服务器压力剧增每个域名的解析策略变更都需要在权威DNS上修改域名数量越大操作复杂度和服务器负载越高。缓存不一致风险大量域名同时变更不同Local DNS的缓存刷新节奏不一致可能导致流量调度出现混乱。生效时间不可控部分用户可能长时间停留在旧解析结果上故障恢复时间难以保证。相比之下路由切换一次操作即可影响所有经过该IP或IP地址段的流量与域名数量无关生效速度取决于BGP收敛时间通常在秒级到分钟级更适合大规模、机房级的故障切换。4.3 适用场景与局限适用场景单机房整体故障如供电中断、网络接入层故障接入点故障VIP不可达需要快速、批量切换大量业务的场景局限性调度粒度较粗只能做到IP/前缀级别无法感知应用层状态如服务是否真正可用需要网络层支持如BGP宣告权限、运营商配合5. 基于七层负载均衡的调度方案服务级精细调度5.1 方案说明在数据中心内部署七层负载均衡系统如BFE可以实现跨数据中心的精细流量调度。图6引入七层负载均衡系统后的调度方案各数据中心内部署BFE集群BFE按照指定权重W11, W12, W21, W22将流量转发至多个后端集群包括其他数据中心的服务。这要求多个数据中心之间有较好的内网互联在同城数据中心之间网络延迟通常可控制在1-2ms内对整体转发延迟影响不大。5.2 为什么七层负载均衡更适合服务级调度与DNS和路由切换相比七层负载均衡在以下场景具有不可替代的优势(1) 服务级故障的快速响应当某个数据中心内的部分服务出现故障而非整个机房通过调整BFE的分流权重可以仅将故障服务的流量调度到其他数据中心而不影响该数据中心内其他正常服务。DNS和路由切换都无法做到这一点——它们只能将整个域名或IP的流量全部切走。(2) 服务级的多机房流量均衡七层负载均衡可以精确控制每个服务在多机房之间的流量分配比例。例如服务A按 70% : 30% 分配在数据中心1和2服务B按 50% : 50% 分配在数据中心1和2这种服务级的差异化调度DNS和路由切换均无法实现。(3) 生效速度快、控制精度高BFE的权重配置加载后立即生效秒级且流量分配严格按给定权重执行为容量管理和过载保护提供了精确手段。5.3 适用场景服务级故障单个服务异常需要快速止损外网流量突增流量突增单机房容量不足灰度发布与容量调配精细控制多机房流量比例外网故障后的负载再平衡DNS或路由切换导致某机房流量突增通过BFE反向调度6. 分层协同多数据中心调度的最佳实践在实际生产环境中三种手段应当分层协同互为补充而非相互替代协同工作示例场景数据中心1发生单机房故障路由切换优先停止数据中心1的BGP宣告用户流量在分钟级内收敛到数据中心2。七层负载均衡跟进BFE自动或手动调整权重确保数据中心2内的服务能够承载新增流量必要时将部分流量回切到数据中心1的健康服务如果部分服务仍可用。DNS兜底如果路由切换未能完全生效或需要长期引导流量通过DNS将域名解析到数据中心2的接入点。场景数据中心1内服务A故障其他服务正常七层负载均衡处理BFE将服务A的流量调度到数据中心2数据中心1内的其他服务不受影响。无需动用DNS和路由切换避免一刀切导致不必要的跨机房流量。7. 应用场景详解场景1服务故障服务级数据中心1内的服务集群1因灰度发布出现问题容量下降。通过调整BFE的分流权重将数据中心1的流量调度到数据中心2的服务集群2实现精准止损。图7服务故障场景下的处理七层负载均衡服务集群1故障→ BFE集群1将流量调度至 → 服务集群2场景2外网流量突增服务级某地区用户流量突增导致单个数据中心压力超过容量。通过BFE将部分流量调度到其他数据中心实现负载分担。图8外网流量突增场景下的处理七层负载均衡流量突增→ 服务集群1过载→ BFE集群1将部分流量调度至 → 服务集群2场景3单机房整体故障机房级数据中心1因供电故障整体不可用。通过路由切换BGP Anycast快速将流量收敛到数据中心2无需逐条修改DNS记录。场景4外网故障后的再平衡协同外网故障DNS或路由切换将流量从数据中心1调度到数据中心 2数据中心2压力突增。此时通过BFE将部分流量反向调度到数据中心1的服务实现跨机房负载再平衡。图9外网故障场景下的处理七层负载均衡与DNS/路由协同外网故障→ 数据中心1接入点不可用→ 流量经DNS/路由切换至数据中心2服务集群2压力突增→ BFE集群2将部分流量回切至 → 服务集群18. 总结多数据中心流量调度不是二选一的问题而是什么时候用哪种手段的问题。七层负载均衡BFE是日常调度的核心工具适合服务级故障、精细流量均衡和灰度发布生效快、控制准。路由切换是应对机房级故障的利器特别适合域名数量大、需要批量快速切换的场景避免了高频DNS调度的压力。DNS则作为兜底手段在七层负载和路由切换均无法生效时提供最后的容灾保障也是跨地域无内网互联场景的必要选择。三种手段分层协同才能构建真正高可用、易运维的多数据中心流量调度体系。作者简介章淼博士1994年进入清华大学计算机科学与技术系学习2004年获得博士学位2004年至2006年在清华大学留校任教在清华期间曾参与中国第一代核心路由器的研制工作。2012年起在百度工作超过十年聚焦云网络基础架构的研发工作是BFE开源项目的发起人。在百度期间积极推动软件工程能力提升曾担任百度代码规范委员会主席2021年10月被授予百度代码规范委员会荣誉主席。2022年出版《代码的艺术用工程思维驱动软件开发》。2023年4月起担任瑛菲网络CEO聚焦研发面向云和大模型场景的现代化流量管理平台。