0 前言
2020年12月19日,2020 TECHO PARK 腾讯开发者大会在北京顺利召开。网络专场以“全球互联、高速上云”为主题,腾讯云网络产品专家工程师周显平带来了《腾讯云网络VPC大规模演进实践》的演讲,子标题《百万级虚拟网络、千万级云主机规模下云网络的挑战与思考》,重点讨论云网络在支持超大规模节点和流量上在可扩展,高可用,高性能, 可运维上面临的挑战, 以及腾讯云在这方面的实践。本文主要从腾讯云网络VPC的产品架构、云网络VPC的挑战、以及腾讯云网络的解决方案、重点讲解SDN控制器、虚拟交换机、云服务网关的演进路线。
网络专场:全球互联、高速上云 https://cloud.tencent.com/edu/learning/live-3325
1 腾讯云网络VPC的产品架构
云网络的基本的概念和特点
Region:区域或者大区,Region之间相互隔离,实现最大程度的容错能力和稳定性。
Availability Zones:每个区域都有多个相互隔离的位置,称为可用区。当启动实例时,用户可以自己选择一个可用区。如果实例分布在多个可用区且其中的某个实例发生故障,则可对应用程序进行相应设计,以使另一可用区中的实例可代为处理相关请求。
云主机(服务器):是一种可扩展的计算服务,支持用户自定义一切资源,例如CPU、内存、硬盘、网络、安全等,并可以在需求发生变化时轻松地调整它们。
宿主机:云上的物理服务器,云主机运行的物理载体。
虚拟交换机:宿主机上运行的云网络的虚拟交换机,主要对云网络进行虚拟化,例如实现私有网络VPC、安全组、负载均衡等功能。
云服务网关:主要是实现私有网络VPC和云上的服务互通,例如对象存储、文件系统、数据库等。
公网网关:实现私有网络的VPC的云主机访问公网的能力。
混合云网关:实现云上的私有网络VPC和用户的机房互通。
目前腾讯云规模为百万级租户、百万级VPC、单VPC百万级云主机。也可以参考腾讯云的官网文档和腾讯云网络视频号了解更多。
腾讯云的官网文档:https://cloud.tencent.com/document/product/877
视频号:腾讯云网络。
腾讯云云联网产品和实现剖析
云网络科普(1): 私有网络VPC
2 腾讯云网络VPC的关键指标
安全稳定:租户隔离、访问可控、持续可用。
灵活弹性:灵活编排、弹性扩展。
超大规模:百万虚拟网络、百万云主机。
超高性能:高吞吐、低时延。
3. 腾讯云网络VPC的解决方案
腾讯云的虚拟化云网络是一种软件定义网络(Software-defined networking,SDN)。软件定义网络 (SDN) 旨在赋予网络灵活性和敏捷性。利用 SDN 设计、构建和管理网络,可以实现控制平面和数据平面的分离,通过直接对控制平面进行编程,并对用于应用和网络服务的底层基础设施进行抽象化。
主要包括三个方面,网络虚拟化、SDN软件自定义网络、高性能、低时延、大容量的云网关。
3.1 网络虚拟化
网络虚拟化是指将传统上在硬件中交付的网络资源抽象化到软件中,网络虚拟化可以将多个物理网络整合为一个基于软件的虚拟网络,或者可以将一个物理网络划分为多个隔离和独立的虚拟网络,例如云上的私有网络,专线网关、NAT网关等都是云网络虚拟化的实际落地的产品。
3.2 SDN软件自定义网络
SDN是软件定义网络,用应用软件参与对网络的控制管理,满足上层业务需求,腾讯云也使用SDN设计网络的思想来灵活、高效地进行云网络的管理和持续演进。
3.3 高性能、低时延、大容量的云网关
腾讯云在云网络演进时也在不断的追求高性能、低时延、大容量等指标,在云网络方面主要是在体验虚拟交换机、云服务网关做优化。
3.4 腾讯云网络架构
腾讯云虚拟化云网络架构
腾讯云虚拟化云网络架构的控制面既有全局的控制器,也有地域级的控制器,和Google的B4设计思路是相似。
- Global SDN Controller Cluster:控制跨大区之间的VPC通信、QoS等。
- Region SDN Controller Cluster:控制同大区、不同Zone之间的通信。
- Global和Region控制器的分级管理,可以更好实现分区缓存、就近接入、逻辑分组的能力。
- SDNGW:网关集群,是各种通信场景的物理承载实体,Region级容灾。
- BGP Peer:对接用户的IDC,自动学习用户IDC的路由变换,并把变换传递到控制器,再有控制器进行分发路由。
4. 腾讯云网络VPC大规模演进实践
4.1 云网络SDN控制器的架构演进
单个VPC虚拟网络能使用的最大ip数,决定了客户云上业务的云服务器最大规模,腾讯云的SDN控制器经过1.0,2.0,3.0的演进,单VPC可以支持300万的ip个数,如下图所示。
4.1.1 SDN控制器1.0
SDN控制器1.0是单集群的架构,缺点是容量有限,无法满足百万级租户VPC网络的编排。另外流表的下发是全量推送到网关设备,例如一个租户的VPC,有1万的子机,需要把子机的1W个流表都下发到网络设备上,其缺点是下发流表耗时长、流表收敛速度慢,也会消耗网络设备的内存和CPU等资源。
4.1.2 SDN控制器2.0
SDN控制器2.0是分区分服集群架构,通过业务编排可以把相互独立的流表分布到分区的SDN controller集群进行管理,做到的平行扩展,可以支持百万级租户网络的编排。但是在SDN控制器2.0架构和1.0架构一样,流表还是要全量预下发到网络设备上,缺点同上。
4.1.3 SDN控制器3.0
SDN控制器3.0引入了跳板网关集群,用主动推送和动态学习相结合的流表下发方式,以完成流表的高效下发。
具体实现原理是:源网络设备当前的流表规则无法满足转发时,会默认把报文转发到跳板网关,跳板网关有全量的流表配置,可以正确把流量转发到目的地,同时也会触发一次学习任务,进而把相关的流表配置下发到源网关设备。
流表按需自学习模式带来了以下好处:
- 流表学习发生在转发面,性能远高于控制面下发;
- 流表学习期间流量仍可由跳板网关正常转发,不影响业务,无首包时延;
- 相比于全量推送,流表按需学习可以极大降低推送流表的数量,提升推送的性能。
4.2 云网络VPC虚拟交换机的架构演进
虚拟交换机性能决定了云主机的网络性能,高性能的虚拟交换机是多租户VM共享网络的性能保证。腾讯云的VPC虚拟交换机经过1.0(Linux内核交换机),2.0(DPDK交换机),3.0(智能网卡交换机)的演进,单台云主机可以支持2千万的pps。
腾讯云VPC虚拟交换机演进
4.2.1 linux kernel的VPC虚拟交换机
上图左是通过Kernel来实现虚拟交换机,网络数据包从网卡到用户空间的应用程序需要经历多个阶段。以Linux网络数据包的处理流程为例,处理动作可以概括如下。
- 数据包到达网卡设备。
- 网卡设备依据配置进行DMA操作。
- 网卡发送中断,唤醒处理器。
- 驱动软件填充读写缓冲区数据结构。
- 数据报文到达内核协议栈,进行高层处理。
- 如果最终应用在用户态,数据从内核搬移到用户态。如果最终应用在内核态,在内核继续进行。
在10Gbps,40Gbps、100Gbps网卡盛行的时代,Linux内核模式包处理性能有比较大的瓶颈,例如网卡中断、内存拷贝、锁、缓存命中等问题。
4.2.2 DPDK 的VPC虚拟交换机
上图中通过DPDK来实现虚拟交换机。DPDK是工作在用户态,和进行内核的操作比更简单。DPDK也对多核的收发包进行了工程的优化,例如采用轮询模式,大页、预取、缓存对齐的技术,亲和性和独占,批处理等,可以较大的提升包处理的效率。腾讯云网络在实践DPDK到云网络时实现了网络转发性能从Kernel的100万pps到DPDK的6百万pps的提升。
4.2.3 智能网卡的VPC虚拟交换机
上图右通过智能网卡来实现虚拟交换机。智能网卡可以卸载了部分传输层和路由层的处理逻辑来加速转发性能。腾讯云网络在实践时实现了网络转发性能从DPDK的600万pps到智能网卡的2千万pps的跨越,极大提升了VPC虚拟交换机的包转发性能。
4.3 云网络VPC服务网关的架构演进
在云网络中需要云服务网关,一方面需要打通各种异构的网络,例如overlay和underlay网络、云上网络和用户IDC网络、不同的虚拟化技术的网络(GRE vs VxLAN),另外有一些服务需要云网络网关进行报文处理,例如流量清洗、地址转换、限速等。腾讯云网络服务网关经过1.0,2.0,3.0的演进,单台设备的的bps可高达3Tbps。
4.3.1 云服务网关单设备实现演进
如上图,云服务网关实现也是经过Linux内核、DPDK或智能网卡、P4的演进不断增强了报文的处理能力。
4.3.2 云服务网关集群架构演进
下面我们看看腾讯云服务网关的架构的演进。
第一代的云网络VPC服务网关是主备小集群模式,10G/40Gbps设备,单集群吞吐受限单机性能且资源利用率低。
第二代云网络VPC服务网关变成了多主集群模式,支持40Gbps、100Gbps、400Gbps设备,单集群吞吐最高可达1.6T,资源利用率高。
第三代云网络VPC服务网关是多主集群模式和快慢路径分离架构,切换为快速路径后,源网络设备可以直达后端服务网络设备,不需要再经过VPC的服务网关的转发,其中在同Region下VPC服务网关流量降低90%以上,访问时延降低30%。例如上图可以表示VPC的虚拟机服务云上的服务,例如对象存储、数据库等。
总结
从腾讯云网络VPC大规模演进实践可以看出,云厂商在不断的利用网络相关的软硬件发展,同时也一直在打磨云网络的数据面和控制面架构,持续为用户打造安全、稳定、高性能的云网络服务,实现“全球互联、高速上云”愿景。