2019 年 4 月,Alibaba Cloud Linux 2 (Aliyun Linux 2) 正式開源。時至今日,已經走過三個月的里程。在這段時間內,這個剛誕生不久的爲阿里雲 ECS 環境定製優化的 Linux 操做系統發行版的裝機量穩步上升。咱們常常接到內部和外部的客戶諮詢 Alibaba Cloud Linux 2 相關的問題,所以本文將重點介紹 Alibaba Cloud Linux 2 的特性更新;此外,咱們認爲雲計算業務中,操做系統的角色至關於「水和空氣」的地位,平日裏的存在近乎透明,而一旦出問題卻使人難以忍受,所以除了瞭解特性列表,本文也將介紹 Alibaba Cloud Linux 2 開發過程當中的決策過程與質量保證細節,但願更高的透明度能夠加強用戶的信心。html
圖:Alibaba Cloud Linux 2 (官網產品名:Aliyun Linux 2) 在 阿里雲 ECS 上過去一個月 vcpu 保有量增加示意圖 (僅展現趨勢,不表明絕對數值)
2019 年 4 月正式對外開源的 Alibaba Cloud Linux 2 是下一代 Alibaba Cloud Linux (官網產品名 _Aliyun Linux_)操做系統發行版,以 CentOS 七、社區長期支持版 (LTS) 內核、其餘社區版用戶態軟件及阿里巴巴多個開源內部產品等多個來源爲上游,爲雲上應用程序環境提供 Linux 社區的最新加強功能,在提供雲上最佳用戶體驗的同時,也針對阿里雲基礎設施作了深度的優化和定製。linux
Alibaba Cloud Linux 2 開源的重要亮點是自帶的阿里云云內核(Cloud Kernel),同時也是開放在 GitHub 上的 Alibaba Cloud Linux Kernel 項目[1],它是開發團隊全體成員傾力打造的一款內核產品,旨在將阿里巴巴操做系統團隊多年技術積累分享給社區,也歡迎志同道合的開發者一同參與內核開發協做,共同創造更加有益的價值。git
Alibaba Cloud Linux 2 的開發團隊是阿里巴巴操做系統團隊,前身是淘寶內核組,團隊成員大可能是活躍在內核社區的開發者,九年來積累了深厚的操做系統和內核開發底蘊。github
Alibaba Cloud Linux 產品是阿里技術商業化和開源思想完美結合的範例。在阿里雲 ECS 產品中做爲官方鏡像之一,Alibaba Cloud Linux 與 CentOS, Ubuntu 等社區發行版一同做爲選項提供給客戶,併爲 ECS 環境定製了多項特性和性能優化;不只如此,Alibaba Cloud Linux 更天生帶着開源的基因。開放源碼是一種共享的黑客精神,從開放源碼運動誕生至今,無數優秀的開源產品給數以百萬計的軟硬件產品和雲產品提供了強大的基礎系統底座支撐。站在這些巨人的肩膀上,咱們繼承開源的精神,創造了 Alibaba Cloud Linux 產品,如今,又推出了 Alibaba Cloud Linux 2 操做系統發行版,並以相同協議開源,將咱們的工做成果回饋到社區。安全
Alibaba Cloud Linux 2 最主要的功能更新是內核更新,基於內核社區長期支持(LTS)的 4.19 版本定製,在 CPU、內存、文件系統、IO、網絡、cgroup 等子系統上增長了大量適用於雲場景的新特性、性能改進和重大缺陷修復,支持:性能優化
此外,和內核相關的功能和改進還有:服務器
過去三個月,Alibaba Cloud Linux 2 發佈了兩個鏡像更新。最新版本的系統的鏡像 ID 爲 aliyun_2_1903_64_20G_alibase_20190619.vhd
。網絡
在最初發布的版本中,咱們只容許用戶經過 ECS 控制檯購買的方式建立新的虛擬機。從 20190517 版本開始,咱們提供了可獨立下載的系統鏡像文件,用戶能夠更方便地基於 Alibaba Cloud Linux 2 系統鏡像建立並使用本身的虛擬機。咱們但願藉由此方式,讓用戶更積極地參與到 Alibaba Cloud Linux 2 的使用中。架構
當前的獨立系統鏡像文件爲 qcow2 格式,運行時支持基於 QEMU/KVM 的虛擬化環境,在虛擬機中使用 virtio 驅動。獨立鏡像下載後初始化須要依賴 cloud-init
機制,詳情請參考獨立鏡像說明文檔[2]。框架
除了鏡像迭代, Alibaba Cloud Linux 2 還持續保持系統 YUM 源的更新,用戶能夠在操做系統內經過 yum update
命令維持軟件包的最新狀態。
內核方面的更新,咱們持續基於社區 LTS 4.19 內核 rebase 代碼,加上自研功能和 Bug 修復。每三到四個星期,咱們會快速迭代發佈一個新的內核包。在迭代週期內,除了完成必要的穩定性測試,咱們也會積極修復內核BUG並反饋到內核社區。在接下來的章節會詳述。
在操做系統發行版基礎系統(BaseOS)功能方面,除了常規同步上游社區的修復與更新,咱們選擇性地更新了多個用戶態軟件包,以匹配最新的內核功能及其餘平常使用需求,而且對這些包進行了必要的測試和獨立的維護。更新的軟件包包括但不限於:crash
, e2fsprogs
, xfsprogs
, iproute
等。
此外,咱們還與阿里巴巴內部其餘團隊合做,持續將阿里巴巴的開源成果集成到 Alibaba Cloud Linux 2 中並輸出給用戶。目前集成並保持更新的阿里巴巴內部軟件有:
Alibaba Dragonwell
: Ali-JDK 的開源版本,6月下旬剛剛發佈 GA 版本,咱們及時跟進集成並完成了軟件測試後,輸出到 Alibaba Cloud Linux 2;PouchContainer
: 阿里巴巴開發的高效容器引擎;Dragonfly client
: 開源的基於P2P鏡像及文件分發系統;Tengine
: 在 Nginx 的基礎上,針對大訪問量網站的需求,添加了不少高級功能和特性的 Web 服務器項目;aliyun-cli
: 開源的用於管理阿里雲資源的工具;ossfs
: 用於將阿里雲 OSS buckets 掛載到本地的工具;eBCC
: 社區版 BCC 的功能擴展。用戶能夠在操做系統內經過 yum install
命令直接安裝對應的軟件包。
Alibaba Cloud Linux 2 是一個創建在社區協做基礎上的開源操做系統發行版項目,同時也很是重視回饋社區。
Cloud Kernel 是 Alibaba Cloud Linux 2 最重要的開源內核,也是在 GitHub 上的開源項目。如前所述,咱們保持三週到四周的迭代週期,在每一個迭代都保持對外推送最新開發補丁。在迭代開發過程當中,咱們屢次測得 4.19 版本 的 LTS 內核的 BUG,並及時向社區報告,或者經過定位將主線內核的修復移植回 LTS 內核,或者主動向社區提交補丁。
對於測試中發現的 LTS 內核 BUG,咱們首先會根據已劃分的內核領域進行初步判斷,若是難以直接定位,則會進行 bisect 尋找最有可能出現問題的代碼。通過初步的分析以後,根據問題的難易程度,咱們會選擇直接向社區提交修復補丁或者進行討論。
有一種常見的狀況是,某個內核 BUG 在主線內核中已經修復,可是因爲種種緣由,該修復沒有出如今 4.19 LTS 內核中,這種狀況下,咱們會選擇先將主線內核修復的代碼 cherry-pick 到 Cloud Kernel 的開發分支中,而且向 4.19 LTS 內核的維護者、以及對應內核子系統的維護者發送一封 backport 請求的郵件,提示維護者及時將該修復移植回來。
截止6月30日,團隊在開發 Cloud Kernel 過程當中,向內核社區提交併被接收的內核補丁有 19 個。此外,咱們還積極向知名的社區測試套件 LTP, xfstests 等項目貢獻了多個修復補丁以及新測試用例。
除此以外,Cloud Kernel 還與 Intel 0-day 項目等開源項目達成合做,0-day 項目團隊主動向 Cloud Kernel 推送了多個修復建議及補丁,均已被接受合入開發分支。
因爲 Aliyun Linux 2 的內核須要運行在通用的 ECS 系統上,或者用戶自定義的基於 QEMU/KVM 的虛擬機中,保持內核功能的通用性一直是咱們在增長 Cloud Kernel 功能時的原則。在開發自研內核功能時,咱們會對功能進行充分的評估,若是該功能的實現方式過於 Hack,或者引入該功能會形成內核維護成本急劇上升,咱們會從架構的完整性考慮而酌情放棄該功能的開發。下面是兩個近期自研的內核功能的例子:
在4月份 GA 版本發佈中,咱們提到了基於 cgroup-v2 的 cgroup writeback 功能是 LTS 4.19 內核的一項重要更新;發佈後,咱們收到多個客戶反饋,亟需此功能在 cgroup-v1 上的實現。在深刻分析以後,咱們意識到,cgroup writeback 功能天生適合 cgroup-v2 的平坦結構,卻也不是不可能在 cgroup-v1 上實現。關鍵點在於在使用 cgroup-v1 時,須要人爲保證對應的 blkcg 和 memcg 兩個 cgroup 保持合理對應的映射關係。在梳理清楚 cgroup 映射關係限制條件後,咱們完成了 cgroup writeback v1 在 Cloud Kernel 上的實現,並在 GitHub 上發佈[3] 對應的更新;同時爲了保證用戶對於使用時的映射關係約束有足夠的瞭解,咱們在內核中默認將此功能保持關閉,並製做了相關文檔[4]說明。
這個功能容許用戶動態調整 TCP 鏈接的 TIME-WAIT 狀態超時時間,容許其被設置爲小於默認的 60s 值,從而在大量短鏈接應用中,提升應用性能。這個功能其實是早期版本的 Taobao Kernel 已經實現並對外提供的功能,在決定是否要將此功能在 Aliyun Linux 2 上從新移植一遍時,咱們從新評估了該功能的風險。在翻閱了 RFC 793 標準中 「The TCP Quiet Time Concept」 相關的概念後,咱們認爲該功能不符合 TCP "Quiet Time" 的概念,在不知曉該風險的狀況下使用可能會形成系統不穩定;可是因爲該功能確實被客戶須要,且功能結構、代碼實現較爲獨立,維護成本和風險可控。因此咱們在內部實現時,顯性備註了接口使用風險後,將功能在 GitHub 上發佈[5]。
Alibaba Cloud Linux 2 使用了大量社區的功能,核心組件 Cloud Kernel 沒有使用 Red Hat 內核版本,而是使用了基於內核社區 4.19 LTS 版本。衆所周知,社區版的內核的穩定性一直爲人所詬病,咱們在採用此版本內核時,也有同樣的擔憂。所以在研發過程當中,咱們對 Cloud Kernel 進行了積極的測試。
首先,得益於阿里巴巴操做系統團隊中有多個內核子系統維護者、內核測試套件的維護者或前維護者,咱們對於開源社區主流的測試套件對內核子系統的覆蓋率及測試細節掌握較爲全面。經過這些開源測試套件,咱們發現了很多社區版內核的問題,併爲社區貢獻了多個補丁。
其次,在研發過程當中,咱們遵循「本身吃本身的狗糧」的原則,要求研發同窗自行完成單元測試用例開發,而且集成到內部測試平臺中進行迴歸測試。在測試平臺的選擇上,基於研發開發測試代碼的便利性原則,咱們選擇了成熟的測試框架 Beaker[6],這是一個源自 Red Hat 的社區開源測試框架項目,能夠很方便地集成測試代碼,而且輸出直觀的測試結果。咱們將本身開發完成的測試代碼放到 Beaker 測試平臺上,進行自動化的每晚構建迴歸測試(Nightly Regression Testing)。在每一個迭代中,咱們也發現了很多內核迴歸缺陷,都及時向社區提交了補丁或者參與了修復討論,爲穩定 4.19 LTS 內核作出了本身的貢獻。
此外,在阿里巴巴操做系統團隊內部有專業的質量保證團隊。質量保證團隊的測試平臺集成了 40多個測試套件,覆蓋了功能性測試、性能測試、冒煙及穩定性測試等各方面。在 Alibaba Cloud Linux 2 迭代週期進入交付測試階段,會由質量保證團隊負責相關測試,測試結果通過 Review 經過後,則可進行迭代發佈。
操做系統最近幾個月成爲了熱門的話題,此時推出這樣一篇介紹 Alibaba Cloud Linux 2 發行版的技術文章還顯得比較應景。做爲一個技術人,在平常的工做中,堅持技術的錘鍊,樂於思考與分享,對操做系統和內核領域不斷鑽研,才能立足於瞬息萬變的技術之潮中,而且遊刃有餘。
Alibaba Cloud Linux 2 由阿里巴巴操做系統團隊負責開發,誠招有志之士參與,共同在雲上操做系統領域探索更多的可能。簡歷可發至 caspar@linux.alibaba.com
本文爲雲棲社區原創內容,未經容許不得轉載。