各种应用程序、数据的指数级增长,以及云服务的快速普及等因素,导致由孤立的单体系统构成的传统基础架构变得过时。基础架构的融合成为数据中心的根本转变,融合或超融合基础架构应运而生,其将计算、存储、网络和虚拟化组合构建成一个统一架构,以便简捷高效地配置和横向扩展。在网络方面,以太网成为现代数据中心实际采用的互联方式。基于以太网的统一网络架构用于传输各种类型的通信流,为这种融合奠定了基础。虽然这种统一和融合式网络有着诸多好处,但也带来了新的挑战。
由于传统数据中心网络在数据传输中采取“尽力而为”的方法,以太网络是“有损”的。当以太网络发生拥塞时,数据包会被丢弃,然后由上层(如TCP中的重新传输)保障数据的完整性。在重新传输的情况下,这些数据包通常不按顺序抵达目的地,进而需要重新排序。随着数据流汇聚到以太网络上,这种重新传输和重新排序将导致应用程序的性能严重下降[1]。考虑到融合性质,这种情形还可能会导致网络上的其他数据流的应用性能下降。因此,需要一套措施来确保流量在以太网网络上实现无损传输。
1 传统网络问题分析
无论是构建公有云,还是用作企业云服务的私有数据中心,都需要解决一组常见的问题:如何为快速变化的环境构建一个高度灵活的组网,以承载多种类型的流量,从而使网络可以最小化,甚至消除丢包损失;在提供高吞吐量的同时,保持低延迟。数据中心流行的CLOS网络架构通过等价多路径实现无阻塞性能,并拥有弹性,交换机之间的连接方式使其具有可扩展、简单、标准和易于理解等优点[2]。在CLOS网络中,机架顶部的交换机被称作叶交换机,它们连接在被当作核心的脊交换机上。叶交换机之间互不相连,而脊交换机只与叶交换机连接。目前,数据中心已经采用了很多技术,试图解决拥塞控制问题。尽管拥塞控制有所改善,但仍不能为今后的使用场景提供无损的网络,以下问题仍然存在。
1.1 等价多路径冲突
通过散列流标识符来选择路径,这样的做法很简便,但缺乏考虑路径本身是否拥塞。如图1所示,很容易发生多个流被散列到相同的路径上的情况,从而导致链路过载。此外,流量的大小通常呈双模态分布:大多数的流是老鼠流,而大部分传输字节则来自大象流。ECMP选择路径时不会考虑流量的大小,而对ECMP的改善应该涉及选择路径时的拥塞感知和细粒度的流量负载均衡。
1.2 显性拥塞通知的控制环路延时
大型的网络拥有更多的跳数,因此ECN控制回路的往返时间(Round-Trip Time,RTT)会更长。大型的网络也会支撑更多的数据传输,在ECN生效前很难处理突发流量。通过增加交换机缓存去处理突发流量是不可取的,因为这样不仅会增加成本,也会增加那些正常流的排队时间。端到端的拥塞控制对有序的网络至关重要,但为确保网络可以有效地避免丢包损失,额外的帮助也同样重要。
1.3 基于优先级的流控引起的队头阻塞
PFC是一种避免丢包的技术,但这一技术应该作为最后的手段使用。当交换机的某一个出口发生拥塞时,数据被缓存到备份里,并同时调用PFC。由于PFC会阻止特定等级的所有流量,所以流向其他端口的流量也有可能会被阻隔,这种现象被称为队头阻塞。为了避免队头阻塞,很有必要去尽早识别引起拥塞的流,并提供针对流特征(一般引起拥塞的流通常是大象流)的拥塞缓解技术。
队头阻塞可能会引起上游的额外阻塞。由于PFC隔离了所有流,包括那些发往没有拥塞路径的流。这使得所有流必须在上游交换机处排队,产生的队列延时反过来又会引起上一个上游交换机的拥塞。如果上游交换机的缓存被填满,一个新的PFC信息会被调用并发送到网络,循环往复,造成更多的队头阻塞和拥塞现象,这被称为拥塞扩散。
1.4 多打一场景下的拥塞
CLOS架构在未来数据中心新场景下存在丢包、时延、吞吐等多方面的挑战,这些挑战主要来自many-to-one流量模型和all-to-all流量模型。流量模型many-to-one有时候也被称为Incast流量模型。在高度并行的云应用中,Incast是一个很自然发生的现象,它被证明是数据中心大部分丢包产生的原因。
图2是many-to-one流量模型示例。在这个示例中,leaf1、leaf2、leaf3 和 spine1、spine2、spine3形成一个无阻塞的Tier-2 CLOS网络。流量从server1到server5、从server7到server5、从server9到server5,形成一个many-to-one,这里是3打1,整网无阻塞,只有leaf2向server5的方向出端口方向buffer是瓶颈。
2 数据中心无损网络应用场景分析
数据中心里的应用和存储架构需要不断地进化,以满足日益增长的对实时和交互的数字技术的要求,业界主流热门的应用场景均对数据中心提出了越来越高的要求。
2.1 在线数据密集型服务
在线数据密集型服务和线下的通信(如MapReduce计算)之间最根本的区别在于,在线数据密集型服务需要对高速率涌进的请求做出立即回答。对此,延迟是一个关键问题,终端的用户体验高度依赖于系统的响应,即使是一个少于1 s的适度延时也会对个人查询以及相关的广告收入带来可观的影响。而且使用云作为决策源和信息源的系统先天性地拥有一大部分不可避免的延时,这给数据中心的内部响应时间带来更大的压力。为了处理延迟问题,在线数据密集型服务将单个请求同时分配部署在几千个服务器上,并把这些服务器的响应进行协调和叠加以形成最优的推荐和答案。
2.2 深度学习
深度学习是机器学习的一个分支,人类日常生活中的语音识别和图像识别由大型神经网络掌控,通过对百万级,甚至十亿级参数的训练形成模型,并集成到在线服务中。一旦模型建立,一些复杂的任务例(如社交网络过滤、欺诈和异常识别等)都可以毫不费力地被执行。深度学习网络也可以被抽象成一个有百万量级神经元互联的大脑,网络的规模越大、模型参数越多,网络的工作表现通常会越好。现如今的深度学习网络可以拥有数十亿级的参数和百万级的互联。
深度学习模型不断地被训练和优化,伴随着这一持续过程的一个挑战是高昂的通信成本。大量的数据不断地被共享,如果发生同步延时,计算过程就会被拖延,而网络通常被认为是引起延时的原因。在训练过程中,网络里使用的训练服务器先天地存在Incast问题,因为集群几乎是在同一时间返回结果,Incast场景会导致在连接参数服务器的交换机处产生拥塞,从而带来丢包损失和同步延时。由于更多的节点需要更多的通信请求,所以更多的并行处理可能会增加延时,增加网络拥塞。在网络有损情况下,数据拷贝会引入延迟抖动、拥塞丢包等性能损失,造成处理器空闲等待数据,并拖累整体并行计算性能,导致无法通过简单增加处理器数量来提升整体计算性能。
2.3 NVMe over Fabrics
Non-Volatile Memory Express(NVMe)是一种存储通信接口和规范,它基于固态硬盘(Solid-State Driver,SSD)提供了一套低延迟、内部并发化的接口规范。NVMe快速可靠的特点十分适用于未来云数据中心的高并行环境。全闪存阵列(All-Flash-Arrays,AFA)需要NVMe访问网络,因而需要极低的延迟,以形成竞争优势。
在融合基础架构数据中心中,NVMe over Fabrics被指定基于UDP运行在RoCEv2上,或者基于TCP运行在iWARP上。当网络检测到拥塞时,ECN指示符会被标记在数据包上,接收端收到后就会通知发送端降低发送速率,以避免丢包损失。如果信息的往返时间太长,丢包损失仍然不可避免,而丢包则需要重新传输,这将严重降低NVMe存储的访问速度。基于有损网络的存储云化,因为网络存在拥塞丢包、延迟抖动、故障倒换而严重影响NVMe存储云化的效果。
2.4 分布式并行系统
为了使大规模云服务能满足实时交互的延迟要求,应用和存储必须分而治之。目前,有太多的数据需要处理,而数据的真正价值在于能否快速地被提炼出有用的信息。高性能分布式并行计算,本质上是网络性能要向内存访问看齐(见图3)。在有损网络下,数据拷贝会引入延迟抖动、拥塞丢包等性能损失,造成处理器空闲等待数据,并拖累整体并行计算性能,导致无法通过简单增加处理器数量来提升总体计算性能。分布式系统里的并行性取决于同步信息和参数分布,信息传递时,由于Incast和混乱流,网络流量模型会先天性地引起拥塞,如果不加以管控,拥塞就会导致网络的全面损失:丢包损失、延迟损失和吞吐损失。
高性能传输技术的产生,40 G/100 G/400 G以太网和RDMA等高性能的网络技术的快速发展,可以很好地替代原先昂贵的专属存储网络。如何利用网络将计算资源和存储资源结合起来,并进行统一的管理和协同操作,提供具有低时延和高带宽的互联网络,对于提升资源利用效率和满足应用程序的性能需求具有重要的实际意义。
2.5 Server SAN
在过去的很长一段时间内,CPU的发展速度是普通机械硬盘的几十万倍,对于低速的存储介质磁盘来说,存储网络带来的影响相对不明显。因此,在低速存储盛行时期,集中式的存储部署架构被广大企业所接受,并保持很长时期的主要地位。近年来,“软件定义”概念的兴起,闪存技术的应用,正在改变这一趋势。Server SAN可以用标准的x86服务器和高速通用网络来搭建实现一个更高性价比的系统。
Server SAN的网络相比于传统存储网络具有更高的要求,如在时延和带宽上要能够配合存储的需求,减小处理器到存储的时间。利用现有的技术,通过组建各种子网的方式,如高性能子网、大数据子网和元数据子网等,可以很好地满足不同业务的需求。Server SAN的需求也推动了网络技术的快速发展,从低延时、高带宽的传输网络,到智能网卡的出现以及融合网络技术的发展。但是,大型的网络企业更多地希望能够利用现有的低成本的网络技术来解决网络传输过程中遇到的性能瓶颈问题。
3 数据中心无损网络的关键技术
3.1 流控机制
现在市面上有很多不同架构的交换机,如果这些交换机的入口端和出口端缺少协调,那么将很难用这些交换机去搭建一个无损的网络环境。通常路由器会在入口队列采用PFC机制,也就是当入口端的缓存区存满时,PFC会被激发并反馈到上游邻近交换机[3]。然而,在Incast场景中,由于缺少入口端和出口端之间的协调,在入口端的各个队列达到阈值之前,出口端的队列就已经溢出。
虚拟输入队列(Virtual Input Queuing,VIQ)是一种协调出口端可用资源和入口端需求资源以用来传输数据的方法。利用VIQ,出口端将可用缓存告知入口端,以避免交换机内部带来的丢包损失,数据包可以自然地备份在入口端处,如果需要,PFC也可以适当地被采用。VIQ可以被抽象成一种模型,也就是在入口端有一个协调所有入口端的专有队列,用于公平地、有计划地去共享利用离开交换机的流量。VIQ具有避免交换机内部由于拥塞所引起的丢包损失的优点。此外,VIQ建模可以使流量公平有序地离开交换机,是实现无损的基础之一。
3.2 拥塞控制
网络拥塞会引起数据包在网络设备中排队甚至导致队列溢出而丢弃,是导致网络高动态时延的主要原因。网络拥塞从根源上可以分为两类,一类是由于流量调度不均引起的拥塞,另一类是对网络或接收端处理能力过度订阅(或称“超卖”)。前面所说的ECMP冲突属于前者,Incast拥塞属于后者。拥塞控制技术根据其应对拥塞的时机不同,可以分为被动拥塞控制和主动拥塞控制两类。
被动拥塞控制包括传统TCP拥塞控制技术,如CUBIC[4],数据中心中改进的TCP拥塞控制技术如DCTCP[5-6],应用于RDMA协议的拥塞控制技术如DCQCN、Timely[7],交换机进行拥塞反馈的拥塞控制技术如 QCN[8]等。尽管它们拥塞反馈的方式不同,有些是基于丢包,有些是基于ECN,有些是基于时延,但一个共同的特点是发送端根据网络的拥塞反馈信号,对发送速率进行调节。这类技术由于实现简单、易于部署被广泛使用,但通常被认为存在拥塞反应滞后、控制回环时间长、容易引起吞吐率振荡、速率收敛慢、误伤老鼠流等问题,因此有很大的优化空间。
主动拥塞控制是相对比较新的拥塞控制技术,成熟的应用还比较少。主要技术是网络设备或接受端直接建议或指导发送端发送速率的方式,比如RCP(Rate Control Protocol)[9],接收端驱动的基于信誉的速率控制技术等。主动拥塞控制能有效解决被动拥塞控制拥塞反应滞后和速率收敛慢等问题,同时也给解决Incast拥塞等网络顽疾带来了曙光。主动拥塞控制技术展现了解决拥塞问题的新思路,是有前景的新型拥塞控制技术,但也存在准确建议速率确定困难,实现机制相对复杂,引入额外的信令开销等问题。
值得注意的是,被动拥塞控制和主动拥塞控制并不是两类互斥的技术,它们存在优势互补,可以结合使用。数据中心无损网络对这两类技术各自的优化研究和它们之间的组合研究提出了需求。动态虚拟通道(Dynamic Virtual Lanes,DVL)是拥塞隔离的一个工具,拥塞隔离可以消除因过度使用PFC所造成的队头阻塞。DVL识别出引起拥塞的流,并把它们隔离到单独的流量类别,然后向上游邻居发送信号让它执行相同操作。相比于端到端的控制环路需要一定时间才能生效,DVL可以有效地将拥塞暂时移开。
图4描述了DVL的实施过程。当流量在交换机的出口端发生冲突时,该方法会检测到冲突并识别违规流,来自违规流的后续数据包将被引向一个拥塞流的专有队列(即被有效地移出),一旦拥塞流队列到达阈值,DVL将会向上游邻近交换机发送拥塞隔离包(Congestion Isolation Packet,CIP)。CIP包含足够的信息可以让上游交换机识别出该拥塞流,上游交换机同样也会隔离该拥塞流,并监控拥塞流队列的深度。来自拥塞流的数据包被传输的优先级要低于非拥塞流队列,如果拥塞一直持续,拥塞流队列就会被填满,在这种情况下,采用DVL的交换机会利用VIQ去协调拥塞流队列和入口端。同时,当拥塞流队列填满时,入口端也会发出PFC以避免丢包。流量控制只会阻塞拥塞流队列,而其他未拥塞的流量则可以由非拥塞流队列自由通过。
3.3 负载均
在以Clos架构为代表的网络架构中,由于源节点和目的节点间有多条路径,因此存在两节点间的流量如何在多条路径上分发的问题,即负载均衡问题。如前所述,流量调度不均是引起网络拥塞的一大重要根源,因此负载均衡技术一直是业界关注的重点技术[9]。
负载均衡技术存在丰富的设计空间,主要可以从三个维度去考虑:第一个维度,集中式还是分布式。前者易于实现并容易获得全局信息,但存在扩展性和控制回环时延大的问题;后者实现相对复杂,但可扩展性好。第二个维度,网络状态无关还是网络状态感知(拥塞感知)。前者实现简单,但难以适应网络状况的变化;后者能及时感知网络拥塞的变化,做到自适应的负载均衡,但实现复杂度高且存在拥塞测量困难和滞后的问题。第三个维度,流量调度的粒度。从大到小,存在流、Flowlet、Flowcell、包等不同的流量调度粒度,在封闭系统中甚至还有更小的以Cell为单位的流量调度。流量调度粒度越小,流量分发越均匀,但小粒度的流量调度容易带来数据包乱序的问题,从而对要求保证顺序的传输协议的性能产生影响。
对上述维度的不同选择和组合,产生了一系列的负载均衡技术方案,比如ECMP、Hedera、CONGA等。但随着网络速率的提高,时延的降低,流量动态性的增强,大象流冲突、控制回环时间太长等问题越来越突出,越来越需要更细粒度、反应更快、能适应网络负载动态变化的负载均衡技术。本文提出负载感知逐包负载均衡技术(Load-Aware Packet Spraying,LPS),它是一种分布式、以包为调度粒度、拥塞感知的负载均衡技术,可以实现细粒度负载均衡,且不引入包乱序。通过LPS,两个ToR(Top of Rack)交换机之间的流量会根据测量到的各路径拥塞程度,以包为粒度均匀地分发在多条路径上,并在到达目的ToR时进行重排序。