阿里云ECS网络增强型实例设计原理

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 为了满足直播、游戏、Hadoop、消息中间件等对网络转发能力有非常高要求的用户场景,主流的云计算厂商都推出了针对网络性能优化的虚拟机实例。如何实现高性能、低延迟、少抖动的虚拟机网络性能,一直都是非常有挑战的问题,业界的有多种实现的方法,但是都各有利弊。
摘要:为了满足直播、游戏、Hadoop、消息中间件等对网络转发能力有非常高要求的用户场景,主流的云计算厂商都推出了针对网络性能优化的虚拟机实例。如何实现高性能、低延迟、少抖动的虚拟机网络性能,一直都是非常有挑战的问题,业界的有多种实现的方法,但是都各有利弊。在云栖社区和阿里云网络团队联合主办的2017阿里云网络技术在线高峰论坛,阿里云高级技术专家李星就为大家分享了阿里云的网络增强型的解决方案和思考。

本文内容根据演讲嘉宾分享视频以及PPT整理而成。

一、传统虚拟化网络所面对的挑战和瓶颈


在传统虚拟化网络领域的用户痛点
在虚拟机领域中,CPU性能、内存性能以及IO性能早就都有了很多比较成熟的技术方案,但是网络性能的方案上却始终存在一些差距。这里面的原因其实是多方面的,比如网络性能的吞吐速率比正常的存储IO速率要快很多,甚至有可能很多用户的应用场景需要达到百万级别的报文转发速度,所以需要GB甚至10GB的带宽吞吐能力。另外一方面,不同于CPU和内存以及IO流量,网络数据包的转发、业务逻辑的处理也是非常复杂的,需要在整个网络转发流程中间增加常用的一些规则,比如路由查找、ACL查找、流量控制以及流量统计等非常多的业务逻辑处理。其实以上提到的是两个非常矛盾的因素,一方面需要有非常高速的网络数据的吞吐能力,另外一方面需要对于这些高速转发的数据进行复杂业务逻辑的处理,这样的矛盾也就导致了网络性能在非常长的一段时间内无法达到很高的水平。
567786ba67f2194781acc4d7223d55abb7af2271
站在网络用户的应用场景来看,由于网络性能存在着一些短板和一些瓶颈,所以面对一些对于网络性能要求比较高的用户,在吞吐和延迟上面远远没有办法满足用户的需求,在用户的网络流量达到高峰的时候也没有办法去保证整体网络性能的稳定性。而由于整体性能的不足,导致也非常容易触碰到网络隔离性的瓶颈,进而出现各种各样的资源竞争。

搞不定的用户场景
由于网络性能的不足,在面对需要支持高并发的网络业务场景的时候就会显得捉襟见肘。下图中就列举了一些“搞不定”的用户场景的例子。比如电信转发业务以及一些手游或者网游加速的业务,这两个场景本质上来说都是对于一些小包进行高速转发的场景,这些场景对于网络的吞吐能力要求非常高;再比如数据库、缓存以及消息中间件等业务,这些场景下对于网络带宽的要求非常高,并且需要对于网络整体的稳定性能够提供一个很好的保证;还有涉及到大数据生态领域的Hadoop以及Spark等开源组件的业务,这一类的大数据业务在对于网络性能要求比较高的同时也会有非常大的IO存储流量,所以需要在虚拟机层面能够保证在网络和存储两方面的性能都同时达到非常高的要求;除此之外,还有就是最近两年非常火的网络直播和流媒体业务,这类业务在对于网络性能要求的高的同时,对于延迟的敏感也非常高,这是因为在网络中可能出现的一些小的网络丢包或者延迟变大都会影响最终用户的观看体验。
c3cb7f29e127179cd2b1d9a4aa29abc8365a7313
因为网络性能存在着这样和那样的瓶颈和短板,所以现有的网络性能解决方案在很多的网络流量高并发场景上面其实是不够友好的,这也是阿里云持续地开发网络增强实例的初衷。

瓶颈在哪里?
上面提到了网络性能的提升存在着很多瓶颈,接下来就分享这些瓶颈究竟是什么。在网络转发流程的链路中间有一个非常关键的组件就是vswitch,全称是Virtual Switch,它承载着虚拟机的网络流量以及与外部网络进行互联互通的功能,所以vswitch的性能对于整体网络吞吐的性能会产生非常大的影响。vswitch处理的其实是多租户的云平台的虚拟机网络能力,由于多租户和虚拟化肯定会给网络的吞吐带来一定的性能损耗和下降,而传统虚拟网络的转发其实是依赖主机CPU能力进行处理的,所以它肯定会受限于CPU整体的计算能力。
7668cf948529a4ee388aeb33c933588ee9542163
另外由于转发流程是基于一些通用的转发框架实现的,所以往往会由于转发的流程过长进而造成一些性能的损耗。其实在网络转发的流程中存在着很多的共享资源,包括CPU、内存、Cache以及硬件设备等,而对于这些共享资源的争抢以及竞争或多或少都会引入一些锁的开销以及中断和调度的开销,而上述的这些开销都会对于整体的网络性能造成非常大的冲击。

vswitch是什么?
前面所提到vswitch是整个网络转发的链路中间一个非常重要的模块,那么它具体承载了哪些功能呢?首先vswitch承担了虚拟机和外部网络互联互通的基础设施功能,在vswitch之上才能实现整体的隧道网络——VPC网络,在VPC网络之上才能够衍生出来众多的网络业务,包括网络路由、安全组以及带宽限速、连接跟踪、流量统计等。所以可以看到vswitch的主要功能其实有两方面,一个方面是承载网络的互联互通,另一方面还需要承载网络之上的丰富的业务逻辑。
f0f581a34abbc42cafcd8acbf4f064b0418e6007

vswitch的关键技术
vswitch的目标其实非常简单,就是始终去追求更高的性能和更多的、更丰富功能。而vswitch的关键技术主要包括两方面,一部分是关于如何提高数据交换的效率才能获得整体的虚拟机网络性能的提升。另外一部分就是网络转发的功能,如果能够更好地支持网络转发的功能,最终就能反映到业务上的网络功能的叠加。
1ba2a5591d5addd4ce29ece8c61b6844057c30d4

二、业界传统的虚拟化网络解决方案

业界常用的方案
a30f4fdab328d2574cae8bed37cbcee5b558d041
在业界传统的方案中,vswitch的发展其实有一个非常清晰的脉络。最早大家都在使用Linux bridge,也就是Linux通用的内核转发模块。之后随着技术的发展,开始出现一些专用的模块来处理虚拟机网络的流量,比如业界的Open vswitch等。而在追求更高网络性能的场景下面,大家往往会去选择一些SRIOV方案,包括Asic SRIOV或者Smart nic SRIOV等都有一些厂商在应用这些方案,但是SRIOV方案在带来高性能网络的同时也带来了一些问题。

传统SRIOV方案
SRIOV的方案通过网卡直通到虚拟机内部,将PCIE设备直接暴露给虚拟机使用,通过网卡的DMA直接Pass掉了主机CPU参与转发的过程。由于不需要CPU的介入,网卡硬件直接和虚拟机进行交互,所以网络整体的性能会非常高。但是由于网卡的转发功能和策略都非常简单和单一,所以在SRIOV的方案之下就有可能出现因为网卡转发策略的过于简单而导致网络的隔离性不够好的情况。除此之外,因为网卡直通给虚拟机使用所以会带来另外一个问题就是在虚拟机内部可能会看到网卡的驱动,这样对于用户的使用也会造成非常大的问题。
f2466e827d8b269807895f7bc261e5b6623da9ee

三、云计算厂商的虚拟化网络方案

云厂商的方案
7693640588362e4270cceefdc01e6206056bee30
在云计算领域中,各个厂商为了推出具有更高的网络性能的实例都会提出一些自己的解决方案,典型的代表如下所示:
  • SR-IOV+NP,将SR-IOV和NP也就是Network Process进行结合的方案,通过SR-IOV来做高性能,并通过Network Process执行一些复杂的业务逻辑。
  • SR-IOV+FPGA,通过SR-IOV和FPGA来实现高性能和业务逻辑两者的综合,在追求性能的同时也能够通过使用FPGA来完成网络转发的业务逻辑。
  • 物理裸机,这种方式就是承认虚拟机的网络性能是无法达到与物理机同等水平的,所以直接选择向用户提供物理机托管的业务。让用户高并发的网络流量跑在物理机之上,但是这些硬件方案或者纯物理机的方案其实都存在着不少的问题,比如会带来硬件上的依赖、驱动兼容性的问题、对于物理网络的依赖以及可扩展性的问题。

在虚拟网络的领域之中,目前大致有如下图所示的三类方案。
119a6665022fca73d7c831215edda8a18d0e723c
传统的方案具有最好的通用性,但是性能的瓶颈也非常明显。第二类方案则是利用硬件加速的方案,可能能够达到最好的性能,但是本身也会存在扩展性、驱动以及热迁移方面的各种各样的局限。还有一种方案就是目前阿里云增强网络实例所采用的策略:软硬件结合方案,由于在软件优化方面具有巨大的空间,再结合卸载掉部分硬件的功能就能够得到非常好的网络性能,同时也能够非常好地兼容原有的驱动以及工具栈,并且能够复用原有的网络转发的生态。

vswitch的演进
接下来回顾vswitch的整个演进过程。在最早的时候,基于Linux通用的工具栈和协议栈来实现自己的虚拟机网络转发,在发现这样的方案过于简单和单一之后,很多人选择了定制Linux转发模块来满足自己的需求。再往后出现了基于流的转发策略以及隧道技术和VPC网络技术,在这个阶段SDN控制器越来越多地参与到虚拟网络的控制中。再往后的性能优化路线上面出现了快速和慢速路径相结合的解决方案以及软硬件相结合的整体方案。
57c26661e3a00ba192ab0ef3f3d8962483c2a7ef

四、阿里云ECS网络增强实例的设计

阿里云网络增强
bd7960dc350b8e73a5d29fa520696dcd55cf7455
阿里云在网络增强实例的研发上面做了很多工作,包括持续地版本演进、架构优化、专用场景下的性能调优以及持续地更快地推动更丰富的功能上线,并且还结合一些硬件加速的功能同时做到平台的兼容解耦。

设计原理-流程优化
1282a1c84744ea935c88a4c780e75a6cf687d734
阿里云在增强实例上面所做的流程上优化主要包括对于主机协议栈的bypass,其能够节省掉很多不必要的业务逻辑的处理并提升性能。而由于对于主机协议栈的bypass就带来一个问题也就是需要自己去实现一些更加轻量级的协议栈。于是阿里云网络团队实现了一套快速和慢速转发相结合的框架,通过慢速路径执行一些复杂的业务逻辑,并通过快速路径实现高性能的网络流量转发。并且在架构上面做到了减少调度和切换以及无锁转发支持转发规模的线性扩展,最大可能地去利用转发系统的特性实现通过软硬件相结合提升整体的吞吐。

设计原理-数据和资源
dacfc983af44f78308e4514f7ae61bbbb77c42de
阿里云网络团队在数据和资源层面也做了相当多的优化工作,包括优化数据结构,保证Cacheline对齐,减少内存访问次数,通过将原来的内存动态申请策略调整为静态预留的策略。并且通过对于架构的改进实现设备的解耦以及资源的独立,通过稳定的流量限速和防攻击的策略来保证整体网络吞吐的稳定性和隔离性。

Apsara vswitch介绍
0d3ed3d424be87bdeae154bcd6ddb351a889416b
Apsara vswitch是阿里云自研的虚拟机网络交换平台,它能够做到每秒数百万级别的数据包转发,并且同时完成对于Internet公网、私网以及用户专用网络的同时接入。通过Apsara vswitch也能够同时实现ECS与阿里云众多网络的对接,ECS能够通过Apsara vswitch直接访问阿里云所提供的众多云服务,包括云OSS、RDS以及SLB等。

Apsara vswitch实现了一整套快速和慢速相结合的方案,通过慢速路径去执行业务逻辑的查找,包括路由、隧道、QOS、ACL、统计和NAT等,但是这些业务逻辑通常只会在数据包中的首包进行查找并形成一些转发的策略和规则下发到fastpath的Cache之中。后续的操作会通过fastpath的一次查找完成高速转发。这样通过快速和慢速相结合的策略,使得整体的转发业务能够兼顾到业务逻辑的复杂性和高性能转发的需求。
1a0ec7c5c866cfb5459566ac03189ac7fd18ee50

ECS网络多队列
在实现vswitch底层的高速转发通路之后,对于端点设备,阿里云在ECS网络的网卡层面也做了相当多的优化工作,其中就包括支持ECS网络网卡的多队列。通过打开多队列就能够将网络的流量分摊到多个虚拟机的CPU上进行并行处理,这样就能够非常显著地提升虚拟机网络的整体吞吐能力。当然目前具体的网卡队列个数和ECS实例的规格还是一个绑定的关系,用户在购买相应的ECS网络规格的时候会获得相应的网卡队列数量,通常是ECS规格越大,网卡队列的数量也就越多,性能也会得到更大的提升。
855ae5857441d8085630ba28ebb0bf60db3fbc21
下图所展示的数据是阿里云普通实例和网络增强实例的一些纯粹转发能力上的对比。其中上侧图片中绿色的部分表示的是网络增强实例的吞吐能力,可以看到相对于普通实例,网络增强实例的整体吞吐能力会有将近4倍的提升。另一方面如下侧图所示,阿里云网络增强实例在网络延迟方面也会显著下降,10G网络和25G网络增强实例相比于普通实例都会显著地下降。
79214c6c5fd794e2b0da89c66d257177455dc189
接下来分享在具体的业务场景下面使用网络增强实例和普通实例的测试数据的对比。sysbench是在数据库领域里面非常常用的测试方法,下图中的第一幅图展示的是95%以上的延迟数据统计,可以看到使用网络增强实例相对于普通实例,数据库的延迟可以得到非常显著的下降。第二幅图展示的是数据库处理的QPS能力数据,这里的网络增强实例相比于普通实例也是会有一个非常明显的上升。
50d0931a1364638e9717173b28428169a9de6ac0
综上所述,无论是从网络流量转发的角度,还是到具体的数据库这样端到端的典型业务场景的角度,都可以看到网络增强实例相比于普通实例无论是在延迟还是网络吞吐能力上都有显著的优化效果。

阿里云ECS网络增强实例的功能
79f153bb9db2810c3fa9be073f0fc78622d36229
除了能够提供非常高的网络吞吐能力之外,阿里云网络增强实例还对于功能上的支持做了非常完整的工作,包括虚拟机能够兼容原有的virtio接口,在不需要更换网卡驱动的情况下就能够无缝地迁移到网络增强实例的规格之上,这与其他的云厂商的方案是不同的。传统情况下,其他厂商的网络加速方案需要用户去修改或者更换内部的网卡驱动,而这对于用户而言将会造成比较高的使用门槛和不便利性。除此之外,阿里云的网络增强实例也能够支持弹性多网卡的扩展能力,支持虚拟机内部直接去使用DPDK这一类的标准PMD来加速用户内部的网络应用转发能力,并且支持虚拟机使用网卡多队列和RSS打散的能力,支持虚拟机将网络数据包的部分业务逻辑offload到后端,由后端来完成。通过卸载部分数据包的处理逻辑,在提高整体性能的同时能够很大幅度地降低虚拟机内部的CPU开销。阿里云网络增强实例目前已经能够支持覆盖到原有的万兆网络和现有的25G网络,并且能够支持现在阿里云提供的多种异构计算实例规格族,包括GPU以及FPGA等。增强实例同时也能够和实例存储技术相结合,在提供百万级别PPS的同时向用户提供百万级别的IOPS,从而达到存储和网络性能均处于一个非常好的状态。增强实例还支持VPC网络中的所有功能,支持虚拟机进行热迁移,并且支持用户使用SLB负载均衡和高防这一类的网络业务。

目前,在阿里云官网上已经发布了多类网络增强实例的规格,包括计算网络增强型和通用网络增强型等。增强型网络实例的规格还和阿里云最新的Skylake CPU以及25G网络相结合推出了G5、R5以及C5这一类的超高规格实例,无论是从CPU计算性能、存储能力还是网络的转发能力都做到了业界领先的水平,也非常欢迎大家到阿里云的官网上查看网络产品和ECS产品的最新信息。
0a093f7694e88620d67af9cb4f9e74b346c774a5

五、阿里云ECS网络增强型实例实践与案例

实践说明:NFV
f6753ddbed6bbad75be2b5011030a9cd3f9d953b
阿里云经常会在用户那里得到一些反馈,很多用户往往需要运行一些NFV,也就是在虚拟机之上运行一些网络功能虚拟化的业务,所以希望阿里云能够提供SR-IOV的驱动。其实很多的用户将NFV和SR-IOV将这两类的需求做了等同,但是实际情况上是NFV的核心诉求是需要在实现高性能转发能力的同时,对于转发能力提供一个稳定性的保障,还有就是需要对于一些已有的NFV生态进行支持。其实在这里面一个非常关键的因素就是虚拟机能否支持DBDK这类的virtio的polling mode driver。而这个问题的回答是肯定的,阿里云支持用户在虚拟机内部直接运行DBDK做网络应用加速,并且支持用户在ECS内部执行原有的NFV生态中的各种应用程序,来实现自己的业务。

实践说明:ECS配置
0e0e9e7a33048d56b5bd3819ec46a9c9091ee7dc
接下来分享在结合网络增强实例规格的时候,如何去配置ECS才能够获得更高的性能。首先阿里云非常推荐用户打开虚拟机内部的网卡多队列,并且执行一些网卡中断的静态绑定,因为这样能够帮助用户使用更多的CPU来处理网络报文,使得网络能力能够实现线性扩展。另外也推荐用户在ECS内部关闭RPS和irqbalance,因为在虚拟化的场景下,某些业务可能会受到这一类中断漂移和中断转发的影响,在虚拟化的场景下这类的功能可能会带来性能的损耗。除此之外,阿里云还推荐用户使用更高版本的Guest镜像,因为只有使用更高版本的Guest镜像才能够更加友好地支持网卡多队列以及GRO、TSO这些特性,用户也能够在使用更高的版本镜像的时候获得更高的网络转发性能。

客户应用案例
046db3d64aea357846611f9124df68d46dbceae8
目前,已经有大量的企业级用户在应用阿里云的ECS网络增强型实例,其中包括了一些流媒体的创业公司、比较火爆的直播APP创业公司以及非常多的网游加速业务,除此之外还有微博这类大客户。甚至是阿里云自己的一些NFV业务以及阿里巴巴集团的电商交易数据库和核心中间件也都在使用阿里云的ECS网络增强型实例。
相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
弹性计算 监控 开发工具
【阿里云弹性计算】阿里云ECS的网络优化实践:VPC配置与网络性能提升
【5月更文挑战第29天】阿里云ECS通过虚拟私有云(VPC)提供高性能、安全的网络环境。VPC允许用户自定义IP地址、路由规则和安全组。配置包括:创建VPC和交换机,设定安全组,然后创建ECS实例并绑定。优化网络性能涉及规划网络拓扑、优化路由、启用网络加速功能(如ENI和EIP)及监控网络性能。示例代码展示了使用Python SDK创建VPC和交换机的过程。
153 3
|
2天前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
7 1
|
2天前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
6 0
|
2天前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
7 1
|
2天前
|
前端开发 网络协议 JavaScript
网络原理 - HTTP / HTTPS(1)——http请求
网络原理 - HTTP / HTTPS(1)——http请求
5 0
|
2天前
|
域名解析 网络协议 程序员
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
11 0
|
2天前
|
网络协议 程序员 定位技术
网络原理(6)——IP协议
网络原理(6)——IP协议
12 0
|
2天前
|
存储 网络协议 网络架构
网络原理(5)——IP协议(网络层)
网络原理(5)——IP协议(网络层)
8 0
|
2天前
|
网络协议 算法 程序员
网络原理(4)——TCP协议的特性
网络原理(4)——TCP协议的特性
6 1
|
2天前
|
网络协议 前端开发 Java
网络原理(3)——TCP协议的特性
网络原理(3)——TCP协议的特性
5 0