使用AWS Nitro系统重塑虚拟化

2020-09-18 19:16:32

经营一家像亚马逊这样规模的企业,我们经常不得不解决其他公司以前从未面临过的问题。这样做的缺点是我们没有“如何”指导我们--很多事情是未知的。但好处是,当我们解决一个新问题时,这是一个重新发明我们的服务并为我们的客户创造新利益的机会。事实上,当我们进入未知领域时,我们已经创造了一些最具创新性和最成功的想法。

当你是一家以客户为中心的公司时,你经常会发现自己置身于巨大的未知之中,因为客户总是想要更多更好的东西。你将需要代表他们进行发明创造。这种创新和问题解决方法的一个很好的例子是创建AWS NitroSystem,它是我们的EC2实例的底层平台。

经过多年对传统虚拟化系统的优化,我们知道,如果我们要继续提高客户的性能和安全性,我们就必须在体系结构上做出重大改变。这种认识迫使我们重新思考一切,并成为我们创建Nitro系统的火花,Nitro系统是第一个将虚拟化功能卸载到专用硬件和软件的基础设施平台。现在,有了Nitro系统,我们可以在云中提供最佳的性价比、最安全的环境和更快的创新速度。

让我们来看看我们的团队在创建NitroSystem方面的历程,以及结果对我们的客户意味着什么。

虚拟机管理程序是一款提供虚拟机(VM)的系统软件,用户可以在其上运行操作系统和应用程序。虚拟机管理程序提供独立运行的虚拟机之间的隔离,并允许不同的虚拟机运行自己的操作系统。现成的虚拟机管理程序从来都不打算在多租户云环境中使用。但是,通过深度调整和定制,虚拟机管理程序可以适应真正的多租户,从而简化机器配置和管理,同时提高利用率并降低客户成本。

在EC2的早期,我们使用纯基于软件的Xen虚拟机管理程序来保护物理硬件和系统固件;虚拟化CPU、存储和网络;并提供一组丰富的管理功能。但使用此架构时,一个实例中多达30%的资源被分配给虚拟机管理程序以及用于网络、存储和监控的运营管理。

百分之三十是很重要的,而且这种浪费并没有给我们的客户带来直接的价值。我们清楚地意识到,如果我们想要显著提高客户的性能、安全性和敏捷性,我们必须将大部分虚拟机管理程序功能迁移到专用硬件上。2012年,我们开始了设计硝基系统的旅程。

在亚马逊,我们经常谈论单向和双向门决策。双向门的决定很容易逆转,就像测试一种新的网页格式一样。有了这种类型的决定,你可以快速行动,因为即使需要一点时间,你也可以逆转决定。单向的决定几乎是不可能逆转的,所以你必须有条不紊地、仔细地、缓慢地、深思熟虑地、深思熟虑地作出决定。

创建硝基系统是一个单向的决定。我们知道,我们的发展已经超出了传统虚拟化技术的能力,我们必须创新。但我们并不是迅速或轻率地做出决定的,我们的旅程由五年的仔细试验和错误组成,每一步都证明了我们所走的方向是正确的。

Nitro系统由三个主要部分组成:Nitro卡、Nitro安全芯片和Nitro管理程序。Nitro卡是一系列卡,可卸载和加速虚拟私有云(VPC)、弹性块存储(EBS)和实例存储等功能的IO,从而提高整体系统性能。

我们在2013年推出了第一个C3实例类型的Nitro减载卡,将我们的网络进程卸载到硬件上。接下来是2014年的C4Instance类型,将EBS存储卸载到硬件中。对于C4实例类型,我们第一次与一家名为Annapurna Labs的公司合作。我们对那里的技术和团队印象深刻,以至于我们在2015年初收购了安纳普纳实验室(Annapurna Labs)。到2017年,我们已经卸载了最后一个组件,包括控制平面和剩余的I/O,并且我们引入了一个新的虚拟机管理程序,即具有C5实例类型的Full NitroSystem。

这对我们来说是一个难以置信的时刻。建造硬件是具有挑战性的。这不仅是一项重大的财务投资,而且对这么多员工来说也是一项巨大的承诺。当硝基系统启动时,辛勤的工作是值得的。

Nitro体系结构还使我们能够使虚拟机管理程序层成为可选的,并提供裸机实例。裸机实例为应用程序提供对底层服务器的处理器和内存资源的直接访问。

这对于需要访问硬件功能集的工作负载(如英特尔®VT-x)以及需要在非虚拟化环境中运行以满足许可或支持要求的应用程序非常重要。例如,i3裸机实例使VMware能够直接在AWS托管基础架构上运行其完整的软件定义数据中心(SDDC)堆栈,包括ESXi虚拟机管理程序。

那么,这一切对我们的客户意味着什么呢?更高的性价比、更高的安全性和更快的创新步伐。

有了Nitro系统,EC2在CPU、网络和存储方面的性能更好,因为我们将这些功能转移到了专用Nitro卡中。不再为管理软件保留资源意味着可以将更多的节省传递给客户。

Nitro系统还会影响虚拟机管理程序抖动。在云中,能够将抖动降低到微秒级,这使得原本不可能存在的记录得以实现。例如,我们有一个管理卫星的客户,它需要一个实时计算环境来支持与其机队的通信。具体地说,对网络数据包的响应必须在150µs以内,工作负载才能正常工作。传统的虚拟机管理程序根本无法支持这种类型的工作负载。

下面的图3显示了该客户使用不同实例类型时的抖动比较:C4(Pre-Nitro)、C5和I3.Metal。如你所见,C5和I3.Metal的抖动明显较低。您还可以看到,在非裸机实例中,虚拟机管理程序对性能的影响很小。

此外,Nitro系统改善了存储延迟。在图4中,您可以看到通过从本地磁盘存储卸载开销实现的存储延迟改进。事实上,我们的网络优化实例的性能提升高达4倍。即使不是存储优化实例的R5dInstance也提供了比第四代实例更好的延迟。

最后,Nitro系统还提供增强的联网性能。AWS是第一个也是唯一一个提供100 Gbps增强型以太网联网的云。这对于需要更高吞吐量或受网络限制的工作负载(如HPC应用程序)非常有用。只有通过硝基系统才能做到这一点。

Nitro系统最大的好处之一就是增强了安全性。首先,我们设计的Nitro系统可以在我们能想象到的最具敌意的网络中运行。这不仅意味着加密所有通信通道,还意味着提供安全引导功能。虽然我们的数据中心网络高度安全,但这种设计使我们能够推出新产品。例如,去年,我们推出了AWS前哨,它将AWS体验带给使用Nitro系统的内部数据中心。

其次,我们使用Nitro安全芯片为系统设计了基于硬件的信任之根,允许我们以密码方式连续测量和验证系统。与使用传统硬件相比,这提供了对正在运行的内容的明显更高的信任级别。通过卸载和简化整个堆栈,我们还最大限度地减少了可信计算基础(TCB),增加了对整个系统的信心。

第三,我们将硝化系统设计为操作员可及性非常有限。在典型的现成虚拟机管理程序中,管理员拥有对系统的完全访问权限,并且可以修改任何组件。相比之下,对于Nitro系统,操作员唯一的接口是受限的API,这使得无法访问客户数据或以未经批准的方式改变系统。没有“root”用户或SSH的等价物,因此,Nitro系统提供了不能通过简单地锁定传统虚拟机管理程序获得的信任级别。

第四,传统虚拟化和其他云提供商的虚拟化使用通用服务器。就其本质而言,这些包括额外的和不必要的组件和功能。这增加了安全漏洞的表面积。相比之下,Nitro系统在使用专门为运行虚拟机管理程序而设计的硬件和服务器方面向前迈进了一大步-仅此而已。这不仅降低了安全漏洞的风险,而且还使我们能够将特定功能卸载到专用硬件和软件上,从而进一步最小化虚拟机管理程序的攻击面。

最后,对于Nitro系统,我们可以进行正式的验证,证明Nitro系统没有错误,并且可以按照预期的方式工作。

有了Nitro系统,我们可以通过将虚拟化功能卸载到专用硬件上,将EC2的体系结构分解为更小的块。这些模块可以以多种不同的方式组装,使我们能够灵活地设计和快速交付EC2实例,并提供不断扩大的计算、存储、内存和网络选项选择。从下面的“Nitro Enabled Innovation”图表中可以看到,自2017年推出Nitro系统以来,我们已经推出了近4倍的实例。因此,我们的客户在优化价格和性能时有更广泛的工具可供选择。我们创新得越快,我们的客户就能创新得越快。

无论你选择把某件事看作是问题还是机会,都会对你如何处理有很大的影响。我们选择将传统虚拟机管理程序的局限性视为创建全新体系结构的机会。

现在,有了Nitro系统,我们的客户可以享受到更好的性能、增强的安全性和更广泛的实例类型可供选择。当你是一家以客户为中心的公司时,你的产品永远不会完成,因为客户总是想要更多,他们总是想要更好。我期待着每次都能把这个送给他们。