云原生时代的华为新“引擎”:iSula

云原生时代的华为新“引擎”:iSula

云原生时代的华为,不但打造了迅猛发展的云服务业务,也为自己的云服务打造了新“引擎”。

云原生时代的容器引擎的变化

随着“云原生”逐渐从一个流行词变成了一个不那么新鲜的技术基座。以 Kubernetes 为代表的容器编排技术、以 Docker、Containerd 占据主要份额的容器引擎,云原生技术也在不断的迭代升级中日益发展成熟。

Sysdig 2019 年的容器使用报告统计,全球整体容器市场规模以高达 30% 的速度增长,容器的规模、密度愈加扩大。在企业内部的容器规模方面,9% 的企业用户容器规模已经达到 5000 以上;在容器密度方面,与 2018 年相比,每台主机中的容器密度提高了 100%,从 15 个增加到了 30 个,其中最大节点密度已经达到 250 个。

而在这一切的背后,容器技术在某些场景中也呈现了一些不足,比如:

  • 在资源敏感环境,或需要部署高密度容器节点时,容器对基础设施的资源占用会急剧升高;
  • 当大规模应用拉起或遇到突发流量时,并发速度可能成为了瓶颈。

因此,主流的 Docker 等容器引擎在特定用例下,看起来有一些力不从心,因此一些针对某种用例进行过专门优化的容器引擎技术这些年纷纷入场。比如说,以 Kata Container 为代表的专门针对容器隔离性不够严格而设计的安全容器技术;以 Container Linux 为代表的专门针对重型应用而设计的系统容器;以 iSula 为代表的专门针对资源受限的边缘计算和 IoT 环境设计的轻量级容器技术。

这里,让我们来看一个源自于摄像头场景中的轻量级容器引擎。

来自摄像头的容器引擎

说起来你可能不信,一个摄像头里面居然还能有容器引擎。

起初,华为为了在智能摄像头上达到快速、简单切换算法应用部署的功能,经过技术研究,他们决定使用容器来实现所需的功能。

一开始,技术团队考虑对开源容器引擎 Docker 进行轻量化改造,对其裁剪和精简化、去除不需要的功能、优化组件结构等,甚至还对 Go 语言环境的编译进行了优化。但是,由于要运行在端侧的嵌入式设备上,这种裁剪和压榨资源的做法所能取得的效果有限。

在这种情况下,针对端侧和 IoT 环境,华为的 iSula 容器团队做了一个大胆的决定,使用 C/C++ 来量身打造一套轻量级的容器引擎!这真是一个大胆而充满勇气的决定。要知道,随着容器技术时代被 Docker 的出现而引爆,开发 Docker 所使用的 Go 语言就成为容器技术领域的首选,几乎所有的容器技术的组件和框架,都是采用 Go 语言开发的。而要使用 C/C++ 语言全新开发一个容器引擎,面临着所有基础组件,甚至一些开发语言缺乏的特性都需要另行解决。比如说,在 C 语言中要解析容器技术中普遍使用 JSON 数据,而 C 语言并没有 Go 语言等现代编程语言内置的反射机制,这就需要自行实现一个合理的 JSON 数据解析引擎。

2017 年,iSula 容器团队开始了重新开发一个容器引擎的计划。

旁白:iSula 是中南美洲亚马逊丛林中的一种非常强大的蚂蚁,被称为“子弹蚁”,因为被它咬一口,犹如被子弹打到那般疼痛,它是世界上最强大的昆虫之一。

所幸的是,虽然拦路虎众多,但是这些付出是有丰厚回报的,采用 C/C++ 开发的容器引擎,也因此具有了 Docker 所不具有的一些优势。相比 Golang 编写的 Docker,使用 C/C++ 实现的 iSula 容器引擎,具有轻、灵、巧、快等特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。在严苛的资源要求环境下,轻量模式下的 iSulad 本身占用资源极低(< 15M),再结合上特殊的轻量化镜像,可以达成极致的资源占用效果。

2018 年,iSula 开始在华为内部的部分产品上使用。2019 年,华为决定将 iSula 开源出来,让开源社区和 iSula 共同发展,因此针对 CRI 接口进行了一次大范围的重构和补全后,与 openEuler 操作系统一并开源发布。

新造的轮子野心大

以 2019 年的统计数据看,容器引擎领域中,Docker 占据了 80% 左右的份额,但是随着 Docker 引擎自身的发展不明朗,以及容器引擎规范的标准化,出现了更多的容器引擎竞争者。这其中,iSula 作为一个悄悄发展了 3 年的轻量级容器引擎,已经迭代到了 2.0 版本,并凭借其“轻快易灵”的优势,逐渐显露出了更大的“野心”。

在智能摄像头资源的端侧大显身手之后,iSula 容器团队决定将它更进一步。得益于 iSula 所打下的良好基础,iSula 团队认为这个引擎具备更大的潜力,可以发展为通用的端、边、云平台一体的容器引擎,提供统一的架构设计来满足云、IoT、边缘计算等多个场景的应用。

虽然由于发展时间较短,加之其起源于端侧场景,目前 iSula 还没有大规模地应用在云计算集群方面,但是从与 iSula 团队沟通了解到,他们对下一步将其推广至更广泛的云计算集群领域充满信心。按照他们的说法,鉴于华为优质的软件开发质量品控,以及社区对 iSula 特有优势的青睐,它的发展值得期许。

当然,事物总是具有两面性,iSula 在取得“轻快易灵”的独特优势的同时,其使用 C/C++ 作为开发语言,也对 iSula 的快速发展带来了一些影响。因为我们知道,合格甚至优秀的 C/C++ 程序员是有多么的难得,这也造成了 iSula 项目开源后,社区贡献者数量和参与的贡献难以取得大的突破。

鉴于此,据 iSula 团队内部消息,他们正在计划将 iSula 逐渐迁移到 Rust 语言来实现,目前已经有部分模块采用 Rust 开发。Rust 作为近些年来一个明星级的系统编程语言,已经在系统编程语言方面显露出来取代 C/C++ 的潜力。如果能够顺利地平滑过渡到 Rust 语言,想必对 iSula 的开发进展、软件质量和社区参与程度,有着积极的作用。

何以轻快易灵?

iSula 是全量的容器软件栈,包括了引擎、网络、存储、工具集与容器操作系统;而 iSulad 作为其中轻量化的容器引擎,可以为多种场景提供灵活、稳定、安全的底层支撑。

根据 iSulad 的设计目标和实现情况,它具有轻、快、易、灵等优势。

iSulad 之轻

iSulad 的第一个使用场景是在端侧设备上,这自然要求这个容器引擎具有轻量级资源占用的特性。再结合为端侧设备特殊定制的轻量化镜像,它可以达成极致的资源占用的效果。

除了在端侧环境,在通用场景下,iSulad 也具有不错的轻量化表现。利用轻量化的 LXC 运行时以及极其轻量的 monitor 进程,这简化了整个调用链路。

iSulad 之快

顺理成章的,采用 C/C++ 语言实现的 iSulad,自然具备运行速度快、底噪低等特性。再加上 iSulad 独特的架构设计,除了启动容器部分需要通过 fork/exec 的方式,其他部分均使用调用函数库的方式加快执行速度。

iSulad 之易

在对 CRI 接口进行了大范围的重构和补全后,iSulad 已经能在相当程度上兼容标准化的容器规范和工具,让使用者的使用习惯和应用迁移变得轻松。

为了使开发者迁移方便,iSulad 在开发一系列迁移工具,以帮助开发者将自己的应用平滑迁移到 iSulad 上来。甚至据透露,iSulad 还会支持热迁移,能更便捷的迁移开发者的应用。

iSulad 之灵

iSulad 还针对不同的使用场景提供了不同的模式,可以根据需要灵活配置切换注重性能的性能模式和注重资源占用的轻模式。

另外,作为一个具有支持全场景容器环境的引擎,iSulad 也支持了多种不同的容器形态,它内置了支持系统容器、安全容器和普通容器以及轻量化容器的支持。

iSula 和 openEuler

iSula 是华为的 openEuler 开源社区旗下的项目之一,因此这个项目也是根植于 openEuler 系统的。这对于推动 openEuler 在企业级应用的发展具有积极意义。

不过,作为一个野心勃勃的容器引擎来说,必然不会将自己局限在某个特定操作系统之上。根据 iSula 团队的信息,目前 iSula 在 openEuler 系统上具有一些独特的优势,但是该团队也在做将 iSula 向其它 Linux 系统迁移的工作,这涉及到内核的一些特殊特性和补丁,需要得到 Linux 主线内核的支持和与内核开发者社区的沟通。

推动云原生的新引擎

毋庸置疑,容器计算已经成为云计算领域的主流。无论你是否愿意,考虑将企业的传统计算环境和古典虚拟机环境迁移到以容器计算为代表的现代云计算平台,已经是大部分 CTO 和架构师们需要迫切考虑的工作了。

而华为开源的 iSula 容器引擎,相比 Docker,是一种新的容器解决方案,它提供了统一的架构设计来满足 CT 和 IT 领域的不同需求。这匹崭露头角的新黑马,是华为攻略云原生领域的新引擎之一。

无需去历数华为在云原生领域做了多少事情,这个崭露头角的 iSula 容器引擎只是华为云这辆快车上的一枚新引擎,它将会同其它开源组件将华为云带到什么高度,让我们拭目以待。