腾讯 DCI 上线基于集中控制的 SR-TE 方案
作者:耿竞一 米鹏辉
交通拥堵已经成为当今时代与每个人息息相关的问题,它直接影响了我们在现代社会的生活体验。传统的分布式交警管控方式,已无法解决急速扩张的汽车保有量与紧张的公路资源之间的矛盾,这显然也不是互联网时代解决问题的一贯思路。所以我们有了品类繁多的互联网导航系统,它可以在出发前就根据全城的实时路况为驾驶者推荐最优路线,甚至当途中突遇堵车时,可以快速调整路线。这是一个看上去很棒的方法,前提是所有的驾驶者都会听从电子导航的指挥,但看看路上的漫漫长龙,就能感受到现实的骨感。假如能有一个超级警察,可以让所有的车辆都按照规定线路行驶;并且摩托车、小汽车、大货车的通行情况可以根据当前的路况随时调整;当发生拥堵时,可以让救护车、消防车、公交车等具有畅通无阻的特殊通道,相信城市交通问题将大大缓解。那么问题来了,这个超级警察什么时候才能降临呢,5年后,10年后,也许更久。但这科幻般的场景,在腾讯的网络世界里已然来临。
2017年12月,腾讯DCI网络深圳Region成功上线了全球首个基于交换机实现的SDN集中控制的Segment Routing Traffic Engineering方案。该方案经过三年多的研究探索及15个月的开发测试,基于Segment Routing技术和SDN思想,率先实现了对10w服务器级别的IDC园区间通讯,进行全局视角的、带宽利用率和链路质量等多维度、可定义约束条件的智能调度。腾讯DCI网络向着打造软件定义的、开放的高度智能化网络的目标又迈出了重要一步。
图1 网络拓扑展示示意图
背景介绍
腾讯DCI网络自创建之初,至今已经历过数次技术演进,其中2011年的IP向MPLS技术的演进,是腾讯DCI网络发展的重要里程碑之一。随着腾讯在各领域业务的极速增长以及开放生态的需求,DCI网络需要提供多业务承载的、灵活性和扩展性更强的QoS能力;另一方面,传统的基于IP路由技术的网络,在流量调度方面的能力显得捉襟见肘。
MPLS技术在运营商网络中已有超过十年的成熟应用,基于MPLS技术实现的RSVP-TE协议,提供了完整的流量工程方案,网络设备可以基于不同的服务等级进行隧道带宽预留和路径计算。但是RSVT-TE由于协议设计和实现的复杂性,在实际应用中遇到了很多问题。比如其复杂的协议交互流程,对设备的软件实现带来了很大的挑战,并且当网络规模不断扩大,TE Tunnel数量逐渐增多,所有隧道路径的首节点、传输节点、尾端节点都需要维护大量的LSP信息,这对于设备性能的消耗十分显著。
如今腾讯在全球已拥有百万级服务器规模,面对如此庞大的网络,以及在云上用户业务对网络性能提出的更加严苛的要求下,我们必须选择一个更加有效的流量工程方案。也正是在这样的背景下,腾讯DCI网络在刚刚过去的几周,完成了再一次的重大技术演进,基于SDN集中控制的SR-TE流量调度方案成功上线。
Tencent Defined SR TE
Segment Routing技术自提出以来就在行业内引发了广泛的关注和讨论,作为以太网领域“继MPLS之后最具革新意义的网络协议”,现在已经具备了多个RFC draft,同时业界主流网络设备供应商也纷纷在软硬件方面提供了全面支持。但是至少到目前为止,还没有形成一个统一的、标准的应用方案。腾讯作为全球互联网行业的领导者和先行者,结合自身网络场景特点和需求,借助SR和SDN技术自主设计了完整的SR TE集中控制流量调度方案。该方案无需网络设备供应商对现有IGP协议进行拓展开发,SR相关控制层面完全由控制器实现,为方案的快速落地和稳定运行奠定了基础。之所以选择了SR技术,除了其在设计理念上利用了源路由技术天然避免了LSP对传输节点和尾节点的压力,更是看重了其与SDN思想完美结合的能力。传统的分布式流量工程方案只能基于单一节点进行流量调度,引入了SDN控制器,就可以实现基于全局信息对Tunnel进行路径计算,从而达到提高整网利用率的效果;同时,将路径计算的控制层转移到控制器,为用户自定义、可编程的实现流量调度提供了极大的便利。
图2 方案部署流程示意图
为了提高方案的可靠性,我们设计部署了TE的Hot-Standby保护、多场景的BFD保护等方案,同时结合控制器和智能网管系统开发实现了一键隔离、一键逃生等功能,确保在链路故障、网络节点故障、控制器故障等场景下业务流量可以进行优雅切换。
开放定制的控制系统
作为一个SDN集中控制方案,在设计时对转发层面进行尽量简化的同时,势必将更多的控制层功能上移到了控制器,在逻辑上增加了控制器的实现复杂度,这也是SDN控制器最有价值的部分。考虑到腾讯复杂、多厂商设备共存的网络场景,我们选择了具有丰富南向协议、平行可扩展的开源控制器平台Opendaylight作为我们底层的核心控制器平台,并结合SR-TE流量调度方案进行了定制化的开发与增强。
图3 SDN控制器架构示意图
图3为我们控制器的一个整体架构。在南向,我们使用当前成熟的BGP-LS协议动态收集网络拓扑与TE属性,并结合腾讯智能网管平台所提供的多维度网络参数(i.e流量,延时,丢包率等),使用定制化的路径计算算法进行TE LSP路径的动态实时调整,以实现“上帝视角”的网络资源最优分配。在网络故障或拥塞场景下,算法可根据隧道优先级进行智能优化,优先将低优先级隧道绕行,解决网络拥塞问题,同时保障网络SLA。在腾讯复杂的网络场景下,存在着多厂商转发设备共存的环境。在控制器南向方面,我们使用成熟的NETCONF协议。同时,我们致力于推动基于OpenConfig YANG的配置标准化。通过统一模型,屏蔽多厂商设备差异,实现转发设备的统一管理和配置。未来,我们会继续探索更加高效的南向通道(如:BGP SR-TE Policy等),以实现控制器更加快速敏捷的调整网络路径。在可靠性方面,我们增强优化了开源ODL平台的集群机制,解决了网络延时场景下数据同步效率问题,实现了控制系统的跨区域部署容灾,提供了最可靠的DCI网络控制系统。网络的开放性一直是我们在SDN探索道路上的目标之一。在SR-TE流量调度系统中,我们将智能网络路径计算能力通过控制器北向接口开放给腾讯丰富的业务场景,实现业务定制化的网络算路请求。如:流量负载均衡、延时最短、丢包率最低等。
简化的数据平面
完善的SDN控制器设计和实现,大大降低了对转发设备的复杂度要求,让整个方案在基于ASIC芯片的交换机上实现成为可能。无论交换机厂商采用商用套片还是自研芯片,只需要在现有逻辑下增加对Segment Routing相关表项和标签栈封装的支持即可,无需对现有Pipeline进行改变;另外通过对现有ACL能力的运用,可以完整的实现CBTS(Class-Based Tunnel Selection)功能。这意味着我们不需要再通过购买昂贵的基于NP芯片的路由器来实现复杂的流量工程,每100G网络建设成本下降为之前的1/10甚至更低。随着ASIC芯片厂商对于用户最前沿技术需求的不断追逐,以及芯片设计上逐渐提升的可编程能力,我们看到尤其在OTT基础网络场景中,交换机和路由器在能力上的界限已逐渐模糊,相信未来成本相对较低的基于ASIC芯片的核心交换机会成为DCI网络的主流。
收益与展望
全新的流量调度方案帮助腾讯提升网络平均带宽利用率15%以上,在每年超过100T的数据中心互联带宽建设背景下大大降低了网络建设成本,并且对多点故障等极端场景下引发的流量拥塞可实现秒级自动检测和调度。未来随着骨干网IPv6技术的推进,基于Segment Routing技术的流量调度方案也将会随之进行更具有创造性的演进,诸君敬请期待。
本文转自“鹅厂网事”公众号
- .Net多线程编程—误用点分析
- Web开发常见的几个漏洞解决方法
- .Net多线程编程—同步机制
- .Net多线程编程—Parallel LINQ、线程池
- 没有自己的服务器如何学习生物数据分析(下篇)
- .Net多线程编程—并发集合
- .Net多线程编程—任务Task
- 学会WCF之试错法——安全配置报错分析
- 生物信息学技能面试题(第5题)-根据GTF画基因的多个转录本结构
- 学会WCF之试错法——超时
- 学会WCF之试错法——客户端调用基础
- 【直播】我的基因组58:用R包SNPRelate来对我的基因型跟hapmap计划数据比较
- 生物信息学技能面试题(第4题)-多个同样的行列式文件合并起来
- PHP 底层的运行机制与原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- docker搭建elasticsearch集群
- 用canvas实现手写签名功能
- Codeforces Round #547 (Div. 3)G. Privatization of Roads in Treeland
- 《 动态规划_ 入门_最大连续子序列_HDU_1003 》
- 2015 09CCF计算机软件能力认证试题第三题
- 《内蒙古自治区第十二届大学生程序设计竞赛试题_D: 正品的概率》
- Elasticsearch: Painless script编程
- mysql实现定时全量备份
- 在浏览器调起本地应用的方法
- 《内蒙古自治区第十二届大学生程序设计竞赛试题_G: 最大收益》
- Vue 实现前进刷新,后退不刷新的效果
- 2015 09 CCF计算机软件能力认证试题第四题高速公路
- 《hdu 4540 威威猫打地鼠》
- 多个请求下 loading 的展示与关闭
- 第13期:表统计信息的计算