雲原生時代的華為新「引擎」: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 容器引擎只是華為雲這輛快車上的一枚新引擎,它將會同其它開源組件將華為雲帶到什麼高度,讓我們拭目以待。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive