容器應用帶來的困擾
容器應用在2019年迎來新的一輪浪潮,全球整體容器市場規模以高達30%的速度高歌猛進,大多數企業開始全面擁抱容器化,容器的規模、密度愈加擴大。
根據Sysdig 2019年容器使用報告統計,在企業內部容器規模方面,9%的企業用戶容器規模已經達到5000以上;在容器密度方面,與2018年相比,每台主機中的容器密度提高了100%,從15個增加到了30個,其中最大節點密度已經達到250個。

- 本統計數據來自sysdig-2019-container-usage-report
在這樣的應用規模下,也許大家有類似的經歷:
- 當部署高密度容器節點或資源敏感環境時,容器的基礎設施資源占用超乎了想象;
- 當大規模應用拉起或突發流量時,原本覺得夠用的並發速度卻成為了瓶頸;
面對這兩個問題,是否有什么解決方案么?本文將和大家一起探討一下解決這兩個問題的一些“心路歷程”。
重新造個“輪子”?!
上述兩個問題在大規模容器化應用的過程中不斷出現,並且隨着IoT、邊緣計算產業的興起變得愈發緊迫:邊緣節點資源敏感,留給容器基礎設施的資源屈指可數,一個更輕量、更快速的容器引擎呼之欲出。
接下來我們想分享一下應用過程中的一些嘗試:
首先考慮“能否對開源容器引擎軟件進行輕量化改造”,沿着這個思路,我們嘗試過對Docker容器引擎進行了裁剪和精簡化,例如去除不需要的功能、組件結構優化等,甚至對Golang本身編譯進行優化,但是效果不甚理想。因為我們的使用范圍並不只是服務器等通用場景,我們的容器甚至會運行在端側的嵌入式設備上,單單裁剪容器引擎其實也並不能完全滿足我們的要求。
另外,由於覆蓋雲、IoT、邊緣計算等多個場景,我們的裁剪和輕量化並不能通用適配所有場景,因此需要維護多個容器引擎版本,這對我們的升級和維護造成了不少麻煩。
這時候,一個大膽的想法涌入了我們的腦海,是不是可以重新造個“輪子”!對於軟件工程師來說,沒有什么是比重新造個“輪子”更棒了!
對, 那我們就重新造一個“大一統”的容器引擎!
千呼萬喚,iSulad來了
2017年,iSula容器團隊開始了重新開發一個容器引擎的計划,並在2018年開始在華為內部分產品進行替代。
2019年,我們針對CRI接口進行了一次大范圍的重構和補全,並最終決定將它與openEuler操作系統一並開源出來。
現在的iSulad項目的目標是成為通用的端、邊、雲平台一體的容器引擎,可提供統一的架構設計來滿足雲、IoT、邊緣計算等多個場景的應用。
最后,我們的小螞蟻iSulad終於出生了!

看到這里,同學們可能會有點疑惑,iSulad到底是啥呢?
iSula 在居住中南美洲亞馬遜叢林的巴西原住民眼里,它是一種非常強大的螞蟻,學術上稱為“子彈蟻”,因為被它咬一口,猶如被子彈打到那般疼痛,它是世界上最強大的昆蟲之一。
iSula為全量的容器軟件棧,包括引擎、網絡、存儲、工具集與容器OS;iSulad 作為其中輕量化的容器引擎,可以為多種場景提供最靈活、最穩定、最安全的底層支撐,與子彈螞蟻"小個頭、大能量"的形象不謀而合。

iSulad的特點:
- 輕
- iSulad的第一個使用場景是在端側設備上,你很難想象在一個智能攝像頭上會使用容器來達到快速、簡單切換算法應用部署的功能,在那樣嚴苛的資源要求環境下,iSulad (Light Mode)本身占用資源極低(<15M),並結合特殊的輕量化鏡像,達成極致的資源占用的效果。
- 當然,在通用場景下,iSulad也有着不錯的輕量化表現。iSulad將端側的優秀實踐繼承到通用服務器場景,利用輕量化的lxc運行時以及極其輕量的monitor進程,簡化了整個調用鏈路
- 快
- 隨着Serverless的快速興起,Serverless Container也成為雲計算的一個重要的基礎設施。為了滿足Serverless Container的訴求,iSulad進行了一系列的嘗試和努力:
- )iSulad采用C/C++語言實現,具備運行速度快、底噪低等特性,且LXC運行時優秀的並發設計也為iSulad並發性能提供了基石;
- )架構設計上,除了啟動容器部分需要通過fork/exec的方式,其他部分均使用調用函數庫的方式加快執行速度;通過將鏡像和rootfs部分獨立為服務,以及優化鏡像模塊元數據的隔離性,實現了不同鏡像和rootfs之間的操作完全隔離。
- 易
- 根據Sysdig的統計,當前79%的用戶仍在使用Docker作為其主力容器引擎

- sysdig-2019-container-usage-report
- 應用的遷移一直是一個很令人頭疼的問題,iSulad為了使開發者遷移方便,正在籌備開發一系列遷移工具,幫助開發者將自己的應用平滑遷移到iSulad上來。
- 更激動的是,iSulad很快就會支持熱遷移啦,那時候就能更便捷的遷移開發者的應用了。
- 靈
- iSulad針對不同的使用場景提供不同的模式供大家組合切換,開發者可以根據自己的使用需要靈活配置切換注重性能的performance模式和注重資源占用的light模式。
- iSulad支持多種不同的容器形態,iSulad內置支持系統容器、安全容器和普通容器以及輕量化容器支持。
iSulad應用實測
經過上文的介紹,是不是想看看iSulad的實際效果呢?
- 在內存資源占用方面,100容器啟動情況下,iSulad比Docker所占用的內存資源消耗下降68%。

- 在並發啟動速度方面,100容器並發情況下,iSulad比Docker要快上35%:

更多信息
想要進一步了解iSulad項目並參與iSulad項目嗎?
歡迎來我們的社區玩兒哦~
openEuler開源社區:https://openeuler.org
iSulad項目源碼:https://gitee.com/openeuler/iSulad
