HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

从纯软件转发到软硬一体化可编程,腾讯云网关技术演进之路

  • 2022-08-31
    北京
  • 本文字数:5147 字

    阅读完需:约 17 分钟

从纯软件转发到软硬一体化可编程,腾讯云网关技术演进之路

近十年来,国内的云计算业务取得了长足的进步,越来越多的企业认识到云的价值,将业务部署在云上,云也为客户提供了存储、计算、数据库、安全、大数据等丰富的服务。云服务规模的爆发式增长,对网络提出了巨大的挑战,传统网络方式已无法满足大规模云应用阶段网络的诉求,主要有以下几个方面。


  • 网络规模巨大,短视频、直播等业务应用快速发展,导致单一客户动辄要求 10T 级别带宽,10 万级别路由,数以万计的客户叠加情况下对网络系统规格挑战巨大;

  • 网络弹性要求高,客户业务发展变化快,并且存在秒杀、大促、公共突发事件、热点事件等正常业务活动,仅靠堆料式运营方式成本难以为继,网络需要具备极强的弹性能力;

  • 业务特性繁多,不同场景需求各不相同,有状态的、无状态的、加密的、非加密的、安全的、加速的等等,没有任何一个单一网络应用能解决所有问题;

  • 精细化调度要求高,不同客户对网络质量、网络成本要求各不相同,在越来越多的场景存在基于业务的精细化调度诉求;

  • 大象流、微突发等问题频发,业务吞吐的飙升、高性能网络应用的普及,导致网络面临大量的大象流、微突发问题,对转发性能、数据面定位能力等要求极高;


针对这些挑战,我们通过多年不断的尝试和技术革新,由早期的纯软件转发平台,演进到基于可编程硬件的转发平台,再到软硬一体化的可编程网络平台,提高了云网络的弹性能力,降低了网络运营成本,为各类云服务的大规模应用铺平了道路。


腾讯可编程网络技术演进


腾讯探索可编程网络相关技术,主要目的是降低网络运营成本、提升网络质量。早期也曾使用过专用硬件方式,例如使用 tilera 众核芯片的专用服务器等,随着开源社区 DPDK 的成熟,逐步迁移到了基于通用 x86 CPU 的 DPDK 平台,形成了可编程网关平台 1.0。可编程网关平台 1.0 主要基于 DPDK 的 PMD 能力,通过内存零拷贝、大页、无锁队列等方式极大的提高了网络处理性能,早期支持了 10G 级处理能力,后来随着硬件网卡和 CPU 能力的提升,逐步演进到 100G 级处理能力。由于底层基于通用的 x86 CPU 实现,可编程网关平台 1.0 最大的优势就是可编程能力极强,可以实现任意行为的网络处理能力,例如 L3 转发、VPN、LB、NAT、DPI、IDS 等等。同时,由于本身基于通用服务器实现,天然能够和虚拟化技术结合,支持基于业务需求的弹性扩展能力,实现了资源复用,提高了资源的利用率。



图 1 可编程网关平台演进


可编程网关平台 1.0 在网络应用的发展过程中起到了非常重要的作用,实现了很多网络业务从无到有的突破。但随着业务的持续演进和现网的大规模运营,数据面平台 1.0 逐渐碰到一些问题。首先,随着 4G/5G 基础设施的快速完善,以及以短视频、直播为主的视频类业务的快速发展,网络带宽需求在爆炸式增长,但基于服务器的网络处理能力,仍然停留在百 G 级别,无法跟上业务的增长。导致需要使用大量的服务器资源来扛住业务流量,以一个 6.4T 业务集群为例,需要 128 台服务器资源才能扛住所有的业务流量,运营成本极高。


其次,在硬件升级和技术演进的助力下,云上业务的处理性能同步得到大幅提升,导致频繁出现大象流、微突发等网络问题。这类问题由于出现时间短、难以复现,通常很难定位,但出现这类问题时通常会伴随网络丢包和业务抖动,并且会出现多租户之间互相串扰,严重影响客户体验,因而对基于服务器构建的网络系统产生了巨大的挑战。



图 2 网络带宽与服务器硬件演变趋势


基于服务器处理网络业务可行的最主要原因,是充分利用了服务器的多核并行处理能力,实现了性能的大幅度提升,满足了网络传输的高性能转发诉求。而产生上述这些挑战的根本原因,也是在于服务器的系统架构在处理更大规模网络流量方面并不擅长。网络流量流经服务器的典型路径是由网卡收发报文,再通过 PCIe 总线将数据 DMA 到内存,再由 CPU 来处理内存中的数据,整个处理过程非常漫长,需要经历至少 4 种不同的物理器件,导致成本很难降低,并且任意器件的性能问题都会导致整体性能变差。以 CPU 为例,最近十年间,由于 CPU 制程工艺逐渐接近物理极限,摩尔定律放缓成为事实,依靠 CPU 制程提升来提升处理性能的方法已不可持续。在此背景下,单核性能基本趋近于极限,大多数 CPU 厂商采用多核架构来提升性能。这种趋势的问题在于微突发问题严重依赖单核处理性能,同时共享数据的存在使得网络处理性能无法随核数线性扩展。其他硬件单元,如网卡、PCIe 总线、内存等,也存在类似的问题。从图 2 可以看到网络带宽在近十年取得了爆发式的增长,CPU 制程、PCIe 传输率等影响硬件处理性能的关键指标增长却越来越平缓。在这种背景下,可编程硬件为解决这些问题提供了一种全新的思路。



图 3 可编程网关平台 2.0 软件架构


可编程网关平台 2.0 基于可编程硬件构建,实现了 Tbps 级别数据转发能力,相比 1.0 提升了一个数量级,同时成本也得到大幅度优化。在可编程网关平台 2.0 中,数据面流量不再需要经过复杂的物理器件路径,仅在一颗 ASIC 芯片上就可以完成所有的处理逻辑,处理过程十分高效。同时,通过 P4 语言实现了对数据面流水线的灵活编程,以满足业务灵活的可编程诉求。在 2.0 阶段,由于所有业务逻辑基于可编程芯片实现,受限于芯片 SRAM/TCAM 等表项资源限制,业务规格无法做到太大。虽然通过流水线折叠方可以一定程度缓解这类问题,但在某些要求超大规格的网络场景就无法适用。针对这种情况,我们推出了可编程网关平台 3.0,通过软硬件一体化方式,充分发挥异构硬件的优势,通过软硬协同实现超大规模 Tbps 级数据面处理能力。



图 4 可编程网关平台 3.0 硬件架构


可编程网关平台 3.0 将可编程 ASIC、FPGA、高性能 CPU 一体化,并且通过模块化的硬件设计,实现针对不同场景的灵活定制,满足全业务场景的高性能可编程诉求。在一些业务规格要求不高的场景,可以通过低配 CPU+ 可编程 ASIC 退化为类似 2.0 的方式应用,尽可能减少成本,提高资源利用率。在一些业务规格要求较高的场景,可以通过 FPGA 扩展的方式实现大规格表项,满足业务大规格诉求。在一些特殊应用场景中,还可以将高性能 CPU 作为数据面慢路径,可编程 ASIC 作为快路径,通过软硬协同方式满足特殊场景需求。


可编程网关平台已经在腾讯网络中大规模部署应用,以下内容将就可编程网关平台的典型应用场景进行介绍。


企业专线接入


许多企业客户基于既有资源利用、数据安全、合规要求等原因,会采用混合云的方式来利用云上的各种服务。如何将企业云上资源与自有资源打通是一个重要问题,企业专线接入是解决这种问题最常用的手段之一。腾讯企业专线接入服务的主要特点是能够提供大带宽、低时延、高性能、高可靠的专线接入能力,可编程网关平台是提供这些能力的基础。目前基于可编程网关平台,腾讯企业专线接入服务已支持 10Tbps 级别带宽接入,2us 转发时延,单机支持 Tbps 级转发能力,在可靠性方面支持多线接入、跨 AZ 容灾、单节点 NSR 等能力,为企业客户业务上云提供了坚实可靠的底层能力。



图 5 企业专线接入


数据面可编程能力在企业专线接入场景有多方面的应用。在基础互联互通能力方面,为保护客户私有数据的安全性,腾讯云采用了定制 GRE 的方式来实现 Overlay 隔离,基于可编程网关平台可以便捷的实现这种定制转发行为,实现租户之间的安全隔离。同时,企业专线服务需要具备软件能力迭代、故障处理、跨 AZ 容灾等能力,这些能力要求数据面能够高效响应业务变化,并且在变化过程中业务无感知,可编程网关平台通过 RPC 方式与云上各类业务系统联动,支持快速故障感知、秒级业务迁移。另外,作为网关类型业务,企业专线业务要屏蔽云上网络细节,因此专线网关上需要支持大规模路由表项的维护,大型企业客户甚至达到 10 万级别的路由量,可编程网关平台通过流水线折叠扩展了业务表项,满足了大规格业务需求。


运营商公网接入


云上客户存在一个普遍诉求就是通过云上资源触达用户,运营商公网接入主要承载此类业务。早期腾讯运营商公网接入主要依赖商业设备来实现,但传统网络解决方案主要基于路由相关策略进行业务支持,无法精细化感知业务细节。通过可编程网关平台可以基于业务应用进行差异化调度,提升公网服务能力。以精品网业务为例,云上众多客户对网络质量要求各不相同,有些要求时延低,有的要求带宽高,有些要求成本低。而公网资源十分宝贵,如果对每个客户都采用相同的策略提供公网服务,将无法满足客户个性化需求,也无法收回成本。将质量敏感成本不敏感的业务走质量较好的链路,成本敏感但质量容忍度高的业务走带宽较大的链路,通过这种方式将网络流量分而治之,为不同客户提供差异化服务。



图 6 BGP 精品网服务


通过可编程网关,可以将不同的客户不同的业务区分开来,达到差异化服务的目的。可编程能力在公网服务中应用较多。在基础业务特性上,通过基于源 IP 选路的方式实现业务感知,公网服务通常是基于 IP 来提供服务的,通过源 IP 进行路径选择,可以较好的基于业务诉求来调整网络路径,实现差异化服务。另外,公网服务本身为公域流量提供服务,难以避免的存在网络攻击等安全问题,通过可编程网关可以在公网入口将流量调度到腾讯安全清洗中心,保证正常业务的安全。公网业务可编程应用较多,这里不再赘述,可编程网关平台丰富了公网业务的武器库,为公网业务的进一步演进提供了可能性。


边缘互联网络


随着分布式云的出现,大量客户选择根据业务的特点将云计算资源分布式地部署在中心云、边缘云,甚至是客户机房以取得性能和成本的折中。趋势之一是越来越多的云资源被部署在靠近数据和业务发生的网络边缘,以满足高带宽、低时延、数据不出局等需求。分布式云的典型场景包括在线课堂、自动驾驶、云游戏、AR/VR 等对带宽和时延有着严苛要求的新兴应用。


分布式云的快速生长引入了大量的边缘云节点,将原本只连接中心云的骨干网络(DCI/vDCI)通过互联网向外扩张,形成了复杂、异构的边缘互联网络。传统的骨干网通常由稳定的大容量专线提供业务承载,边缘互联网络则由互联网承载,如何在不安全、欠稳定的互联网之上构建高可靠、高性能的边云、边边互联是我们发展分布式云遇到的全新课题;边缘云节点规模小,通常只能容纳数百台服务器,如果照搬中心云的设计,用于部署机房间加密互通、VPC 互通、虚实互通、NAT 等功能的网关服务器将占据 15%~30% 的机架空间,大大增加了边缘云节点的成本。如何通过软硬一体化设计融合网关功能降低网关成本是我们遇到的另一关键问题。此外,边缘互联网络发展过程中还涌现出了其他新的问题,包括但不限于智能化的管控、灵活的选路、路径优化等等。为此我们基于可编程网关平台 3.0 研发了新一代超融合边缘网关 HyperSGW, 以满足边缘互联网络在新功能、低成本、高集成度方面的诸多需求。



图 7 边缘网关系统架构


通过 HyperSGW 我们实现了多种适用于边缘场景的特性。


首先,实现了多链路优选,实时调度,支持边云、边边加速。腾讯中心 - 边缘一体化网络是由成百上千个 HyperSGW 构成的 full mesh 网络,任意两个边缘节点的 HyperSGW 之间存在多条不同运营商提供的直连(边边互联)和非直连(边 - 云 - 边)链路。不同运营商的链路在成本和质量上存在一定的差异性,而同一链路的质量(时延、带宽、丢包率)随网络负载的波动呈时变特性,使得租户的链路优选变成了一个含时间参数的动态规划问题。结合 HyperSGW 的高精度立体探测机制,控制器系统实时采集网络拓扑和节点流量,周期性地更新优化问题的约束条件,求取最优解并下发转发面,实现租户的全局路径优化和边云、边边加速。


另外,实现了基于成本、时延、质量的意图转发,满足云租户的个性化网络需求。利用 HyperSGW 的可编程能力,支持业务自定义调度标识,帮助客户按照不同的业务类型进行差异化调度选择。通过与底层物理网络在控制面和转发面的联动提供灵活的多级调度,客户可以在多个网络路径中,按需选择时延最低、成本最低或质量最优的线路。我们通过自研的多目标多约束调度算法,实现了客户可自定义的、多维度组合的调度策略,比如“在满足指定的时延范围内,选择成本最低的线路”,“在满足指定可用率范围内,选择时延最小的线路”等等,以尽可能满足云租户个性化的网络需求。


结   语


互联网建立至今的数十年时间里,网络一直在不断演进,实现了人、信息、商品、服务等各种元素的丰富连接。在这个过程中,网络的承载技术也在不断演进,从早期的窄带宽带,到移动互联网,到现在的云网络时代。可编程网络为大规模云上服务而生,是云上服务与企业客户、终端用户之间的桥梁。在可编程网关平台的助力下,云网络将为不同的客户不同的应用提供更加灵活、高效、安全的连接服务。


作者简介:


郑胜利,腾讯网络平台部网关团队负责人,致力于网络领域产品研发,先后负责腾讯公网传输系统、对等连接、专线接入网关、公网接入网关等产品研发,熟悉高性能包处理、可编程硬件、高可靠 BGP 等网络技术。


2022-08-31 16:084161

评论 1 条评论

发布
用户头像
66666666
2022-08-31 17:22 · 上海
回复
没有更多了
发现更多内容

这样理解Java中的函数式编程就对了

jerry

java8 函数编程

第一篇InfoQ的博客

程序员小岑

写作 体验

中年危机,我们如何面对?

石云升

Flutter 中SharedPreferences 的初始化?

三爻

flutter android

地址收录

gogogo

基于大疆无人机SDK二次开发

sydMobile

android 无人机

为什么很多技术都觉得前端很简单?

极客时间

大前端

关于架构的几件小事:架构是什么

北风

架构 企业架构

MyBatis 3 解析mybatis-config.xml配置

杨家昌

深度解析 mybatis 初始化 XMLConfigBuilder Configuration

MyBatis 3 解析Mapper映射配置

杨家昌

mybatis 配置 Mapper XMLMapperBuilder

一种消息消费失败的处理方案

redis kafka

没有业务规则的技术实现

wd

吐槽

Flink 作为现代数据仓库的统一引擎:Hive 集成生产就绪!

Apache Flink

大数据 flink 流计算 实时计算

【预告】千亿数据的潘多拉魔盒:从分库分表到分布式数据库

kimmking

分布式数据库 分库分表 分布式系统 中间件

IT人的职业提升只靠技术精进行的通吗?

MavenTalker

程序员 程序人生 职业规划 技术人

快速开发那点事儿 | 选择最合适的轮子,量产跑车

Java_若依框架教程

敏捷开发 JAVA开发 RouYI 快速开发

自助设备系列——自助设备的春天

孙苏勇

产品

讨论:应不应该用存储过程?

kimmking

算法篇之数组右移

月夜

算法 数组右移

言简意赅,聊聊RPC的123事

一叶而不知秋

RPC

new[]和delete[]为何要配对使用?

泰伦卢

c c++ C#

MyBatis 3 XML配置

杨家昌

mybatis mybatis-config.xml XML配置 配置

开源一个自研的基于Netty的高性能网络通信框架

Geek_373e87

TCP dubbo Netty

小米手机广告在日本「炸」了,背后的教训是什么?

葛仲君

产品 本地化 小米 日本 文化

游戏夜读 | 有哪几种游戏玩家?

game1night

源码分析shared_ptr实现

泰伦卢

c c++ C#

专题:快速开发那点事儿 | 轮子怎么选

Java_若依框架教程

Java 敏捷开发 Ruoyi 快速开发

iTerm2使用小技巧-密码管理器

小菜与老鸟

iTerm

hive 建表语句迁移

飞哥

央行:取消境外机构投资者额度限制,推动金融市场进一步开放

kimmking

spring boot 集成 elasticsearch 7.x (一)

wd

elasticsearch high level client

从纯软件转发到软硬一体化可编程,腾讯云网关技术演进之路_服务革新_郑胜利_InfoQ精选文章