Unikraft将您的云计算成本降低一半

2020-12-16 01:59:15

新颖的模块化Unikernel可以根据应用程序的需要对操作系统进行极端定制。在Xen Project子项目Unikraft上构建的概念验证显示,与AWS EC2上的标准Linux相比,效率提高了50%。

云计算彻底改变了我们对IT基础架构的思考方式:另一台Web服务器?更多数据库容量?您的人工智能用例的资源?只需旋转另一个实例,您就可以开始工作了。虚拟化和容器使我们能够部署服务,而不必担心物理硬件的限制。结果,大多数公司都严重依赖微服务,微服务是高度专用于执行特定任务的单个服务器。

问题是诸如Linux之类的通用操作系统正在努力跟上这种不断发展的专业化趋势。现状是,大多数微服务都建立在完整的Linux内核和发行版之上。好像您想让每架飞机只有一个乘客座位来实现个人航空旅行,却保留了巨型喷气式飞机的强大引擎一样。通用操作系统在云中扩散的结果是膨胀的实例,它们在内存和处理能力上大吃一顿,同时无用地消耗电能和基础架构预算。

尽管如此,节制Linux和其他单片OS并非易事。由于内核子系统之间的相互依赖关系,从Linux内核中删除不需要的组件是一项繁琐的工作:上面的图1说明了很多这样的相互依赖关系,一行表示一个依赖关系,蓝色表示两个组件之间的这种依赖关系数量。

另一种方法是构建所谓的unikernel,它们是为特定应用程序量身定制的图像,通常在更小的内核上构建。 Unikernel已显示出巨大的希望和性能数字(例如,启动时间为几毫秒,运行现成的应用程序(例如仅几MB的nginx)时的内存消耗,以及高吞吐量)。但是,他们的致命弱点是他们经常需要大量的专家工作才能创建它们,并且对于每个其他应用程序都必须重做至少一部分工作。这些问题以及大多数unikernel项目没有一套丰富的工具和生态系统(例如Kubernetes集成,调试和监视工具等)的事实,导致1GB Linux实例的工作可能像提供静态网页。

Unikraft的使命是改变这种状况。与其他unikernel项目形成鲜明对比的是,Xen Project子项目Unikraft开发了真正的模块化unikernel通用代码库,从中构建定制的(uni)内核比过去快了几个数量级。

“在没有Unikraft的情况下,您必须在仅适用于特定语言或应用程序的Unikernel项目之间进行选择,或者在旨在支持POSIX但牺牲性能的同时这样做的项目之间进行选择,从而使使用Unikernels的初衷落空”,Felipe说。 Huici,Unikraft团队的核心贡献者之一。 “

Unikraft的目标是运行大量现成的应用程序和语言(支持C / C ++,Python,Go,Ruby,Lua和WASM,同时支持Rust和Java),但仍允许轻松进行自定义和甚至删除不需要的内核部分;它还提供了一组丰富的,面向性能的API,通过将应用程序插入堆栈的不同级别以实现更高的性能,可以进一步进行自定义。”

就POSIX兼容性而言,Unikraft已经支持130多个系统调用,并且这个数目还在不断增加。尽管这肯定比Linux支持的300+还差,但事实证明,运行大多数主要服务器应用程序只需要其中的一部分。这项工作以及为支持Kubernetes和Prometheus等标准框架所做的持续努力,使Unikraft成为一个诱人的主张,标志着Unikernel进入主流时代。

但是,最终用户真正拥有什么呢?为了展示Unikraft的功能和效率,该团队创建了一个实验性的运行nginx的Unikraft AWS EC2映像,nginx是当前全球最受欢迎的Web服务器。 “我们已经构建了Unikraft nginx图像,并将其与在现成的Debian图像上运行的ngnix进行了比较,以比较提供静态网页时两者的性能。我们对结果感到非常满意。” “在Unikraft上,nginx每秒处理的请求数量是Debian实例的两倍。或者,您可以以一半的价格购买性能较低的AWS EC2实例,并完成相同的工作。此外,Unikraft需要大约六分之一的内存来运行。吞吐量结果可以在下面的图3中看到。

到目前为止,这仅是概念的证明,但是Huici和Unikraft团队正在迅速发展。 “我们目前正在开发一种系统,以使创建Unikraft图像的过程像在线购物一样容易” –这包括分析旨在在其上运行的应用程序,并提供可立即使用的操作系统具有特定用例所需的一切,仅此而已。 “为什么我们要浪费金钱,资源,并在后台运行特定服务不需要的软件污染环境?”

关于作者:Simon Kuenzer是Unikraft的项目负责人和维护者,它是Linux基金会Xen项目的一部分。