作者:蔣偉 網易雲信客户端首席架構師
簡介
2020年,移動互聯網 DevOps 領域顯現出了規模化運營的趨勢,多數 App 研發大廠均配備了上百人的研發團隊規模,編譯計算的訴求也是與日俱增,用自動化測試節約人力的行為也是不斷涌現。Mobile DevOps 在解決大規模編譯、自動化測試、交付路上的挑戰十分艱鉅,但在新冠疫情的背景下,研發預算卻趨於保守,如何在這個時代背景下解決高增長的計算需求與低預算之間的矛盾,成了一個亟待解決的難題。
本文將介紹 Proxmox 在網易智企旗下網易雲信的實際運用,並提供了節流提效的最佳實踐。我們將首先介紹 Mobile DevOps 工作中的挑戰,再介紹 Proxmox 的實踐,最後結合移動應用研發 CI/CD 持續集成、持續交付給出具體的效果。
什麼是 Mobile DevOps?
當今 DevOps 應該為很多後台服務端研發所熟知,從字面意思上講,他是開發+運營的合體,實際上他是一個優秀的軟件交付理念,以加速軟件研發交付一整套工作流程為目標,不斷改進,持續創新。因此這套理念也常常跟敏捷的工作文化聯繫起來,可以説敏捷離不開 DevOps,DevOps 是敏捷理念的實踐。
移動應用開發領域與服務端開發有顯著的不同,但在 DevOps 上的理念、目標是一致的,通用的。Mobile DevOps 就是以加速移動應用領域的研發交付流程為目標,儘快響應市場瞬息萬變的需求的一套實踐方法。在2020年,可以毫不客氣的説,如果要想在激烈的市場競爭中脱穎而出,那麼 Mobile DevOps 就是必備選項。
Mobile DevOps 的現狀與挑戰
Mobile DevOps 的實現存在一些挑戰,因為移動端和服務端場景的差異,導致 Mobile DevOps 在實現上與服務端 DevOps 會有所不同,主要因為以下幾點原因:
移動端構建天然碎片化嚴重
iOS App 的所有編譯都依賴 MacOS 系統的電腦:Mac Mini / Mac Pro,外形大小不一,通常購買超過10台後就需要自建 Mac 機房,對可維護性、穩定性都是一個巨大的挑戰。
Android App 依賴的工具鏈通用性較強,可以使用廉價的 PC (Win/Linux)來滿足要求,依賴較多不同版本的 Android SDK,NDK,Gradle 支持。
Mac App 編譯依賴不同操作系統版本,有的團隊對 Xcode 版本也有特定的要求。
Windows 操作系統版本,SDK 多樣的操作系統版本匹配的 Visual Studio 的版本也很複雜。
移動端應用研發迭代週期越快越好
絕大部分 Top 10 的團隊基本都能做到2周內發正式版本,1天內針對嚴重問題發佈 hotfix。這就要求 Mobile DevOps 能夠做到自動化測試1天內全量完成,不同研發小組、各個的 feature 對應 branch 的測試是每天都在併發進行的。因此 DevOps 必須要解決高計算量的需求。
維護 CI 設備成本越來越高
一個10人的團隊至少需要一套自動化編譯、測試機器,如果團隊達到上百人,上千人,這個設備的數量就會呈指數級增長。編譯機器這裏指 Mac Mini、Mac Pro、PC、Linux 服務器,自動化測試手機Android、iPhone 若干等。
以筆者工作過的幾家單位為例,每年採購自動化測試編譯機器均以百萬計,再算上設備折舊更新,這筆成本已經事實上變成了每年的固定支出。
不僅採購設備成本居高不下,編譯機器越多,維護成本越大。Mobile DevOps 的每個操作都需要複製粘貼到數十台不同機器,每次機器升級、設備更新,Mobile DevOps 人員是忙得像熱窩上的螞蟻。
為什麼考慮企業私有云計算的解決方案?
移動構建任務“雲化”聽起來有些超現實,但是隻要解決掉移動構建碎片化的難題,就可以享受後端開發 DevOps 雲的同等便利。接下來我們談談考慮私有云的幾個思考過程、遇到的挑戰和解決辦法。
為什麼考慮私有云的 DevOps 方案?
私有云 DevOps 方案主要能帶來以下幾點優勢:
- Security 安全性:私有云意味着代碼的絕對安全,所有編譯都發生在物理機房內,絕無外部訪問的安全性漏洞;
- High availability 高可用性:私有云與 Git 代碼倉庫在同網絡下擁有無與倫比的優勢。以網易為例,代碼內網checkout 速度高達 150M/s,一份 WebRTC 代碼高達 20GB 之巨,如果使用公有云方案几乎是噩夢,而且有很多工程有天然的複雜性,很有可能引用了多個內網的 submodule 或者是外網的庫依賴,遷移改造代價大,收益低;
- Scalability 高擴展性:跟許多公有云方案一樣,私有云同樣具備集羣式管理,可以簡單的複製粘貼,一台新的構建機器就創建成功了;
私有云的挑戰
找到支持虛擬化的軟件並不難,難在要找到同時具備全平台虛擬化、擴展性、穩定性、還免費的產品。
我們嘗試了各種選項組合,列舉了市面上的軟件供應商,如下圖:
| 支持平台 | 穩定 | 易擴容 | 費用 | |
|---|---|---|---|---|
| Hyper-V | Windows | 是 | 容易 | 付費 |
| vSphere Hypervisor | Windows,Linux,MacOS | 是 | 容易 | 付費 |
| Oracle VM | Windows,Linux,MacOS | 是 | 難 | 免費 |
| Proxmox VE | Windows,Linux,MacOS | 是 | 容易 | 免費 |
於是很自然的 Proxmox VE 進入了我們的視線,他擁有高穩定性、易擴展並且支持多平台的特性。在進行篩選調研之後,我們決定使用 Proxmox VE 來實現網易雲信的私有云方案,助力 Mobile DevOps 工作。接下來我們先對它做一個簡單的介紹。
Proxmox VE 簡介
Proxmox VE 是一款強大的企業級虛擬化開源軟件,通過一個簡單的 Web 界面即可管理容器,定義機器 CPU、磁盤容量、網絡配置並且具備集羣式管理功能,它支持虛擬化 Windows、Linux 以及各種其他操作系統。在這裏我們基於 Proxmox V6.2 的版本展開討論。
這裏先貼上圖,直觀感受一下它的管理界面。
Mobile DevOps 工作大變樣
詳細的安裝過程我們將在本文最後詳細展開。先來看一下使用了 Proxmox 之後,網易雲信在私有云方案的 Mobile DevOps 上發生了什麼變化。
撬開了性能猛獸
左側為一台普通聯想 PC 的磁盤讀寫性能,右側是一台 Proxmox Windows RAID 磁盤的性能,可以對比看出使用了 Proxmox 後文件讀寫直接提高了8~10倍。
因為高效率的內存共享,平時 16GB 緊巴巴的機器,直接共享直至 256GB 的內存,完全無壓力。CPU 也可以設置非常高的配置,讓 Proxmox 動態分配直至最高性能。
下圖是一個 Jenkins Job 不同硬件的前後對比,編譯時間直接從 15 分鐘提速到只需要 3 分鐘!
維護輕鬆易管理
還記得 Mobile DevOps 每天在不同的機器之間逐個進行配置維護管理嗎?不僅容易犯錯,丟三落四的腳本沒有執行到位,還會發生不可控的風險。
使用 Proxmox VE 之後,再也不必如此費心處理了。只需要配置完成一個樣本機器,直接複製、粘貼,一台一模一樣的機器就製作完成了,只需要修改一下節點機器的 IP 設置,即可完成機器配置。如果使用的是 DHCP,那就徹底免維護搞定。
節約成本
兩台 R730 價格大約 15w,相當於團隊購置多少台機器呢?
- 2台2020款新 Mac Pro (20w);
- 20台聯想台式機 PC (20w);
- 20台 Linux 編譯機器 (15w);
- 額外再配備 2-3 名 DevOps 維護人員;
價格優勢,顯而易見,而且購買各類機器閒時資源浪費嚴重,遠不如共享私有云服務器效率高。
雲信使用 Proxmox VE 詳細安裝流程
下面我們詳細為大家介紹,網易雲信從採購流程開始到安裝完成 Proxmox 的全過程。
採購服務器機器
簡單來説, Proxmox VE 是一個基於 Debian 操作系統+虛擬化軟件的套餐。軟件一般是安裝在服務器上,放入機房交給 IT 統一託管的,畢竟大家都知道 UPS 電源、統一製冷,這些都是不小的硬性要求。因此採購刀片式服務器放入機房就是第一步。
那麼採購多大的服務器配置就成了第一步慎重的選擇,這裏可以談談我們的配置計算方式。
- 一款 2020 年 Intel CPU 的標準高配是 8核,i9, 2.3GHz, 16GB 內存;
- 一款聯想啓天商用 PC 差不多是 6核,i5-9500, 3.0GHz, 16GB 內存;
那麼測算基本可以用:團隊成員數量 x 0.5 得出每時每刻都有需求在編譯的 CPU 數量、內存需求等等。
以網易雲信為例,我們經過測算,平均需要 iOS/Android/Windows/MacOS 每個平台同時 3 個 Job 的併發能力,那麼就是需要台 12個MBP 的算力,於是我們選擇了2台 Dell R730 從線上機房退役下來的機器。(節約公司成本,技能點 get 了嗎~)
內存是越多越好,高併發的編譯計算非常耗內存,我們乾脆升級配置到 256GB 的內存條。
磁盤空間是按需配置,一般來説 MacOS 必須要配置 SSD 的,Windows 設備可以使用 Raid 磁盤矩陣,速度也可以做到非常快,待會兒會有圖説明。以我們為例,為每台機器配置了 1TB SSD,8TB RAID HDD。
好了,廢話不多説,採購流程完畢,下面進入安裝服務器軟件階段。
這時候我是不會告訴你服務器機房冷到讓人瑟瑟發抖,原因我就不多説了,反正我是穿着T袖進去的。
安裝流程
第一步到這裏 https://proxmox.com/en/downloads/category/iso-images-pve 下載 ISO,燒錄到 USB 磁盤作為引導安裝盤,進入引導畫面後的安裝過程了,一路點 Next按照步驟填寫即可。
一般機房是要求固定 IP 地址的,建議這一步慎重配置好,另外建議網口使用 10GB 帶寬的網線。
至此畫面,安裝完畢,自動重啓後,你就可以離開瑟瑟發抖的機房了。
設置虛擬服務器集羣
在所有的機器安裝好了之後,先登錄每台機器對應的管理界面,例如 https://192.168.1.141:8006,只需要找到一台作為主控制器,點擊 Create Cluster,複製粘貼加入信息,到其他機器上粘貼,即可一鍵加入集羣管理。至此,你就可以在任意一台管理界面上管理您的所有集羣。
磁盤分配
先跑到這個界面,熟悉一下機器的磁盤配置分區信息,為接下來的系統安裝做準備。
要想安裝幾個操作系統,每個分別需要多大磁盤、多少 CPU、多少內存,這些都得提前做好計劃。我們第一期規劃是這樣子做的,如下圖:
準備安裝虛擬機
安裝操作系統的 ISO 都是放在/var/lib/vz/template/iso 目錄下面。一般可以使用 ssh 命令登錄到 Proxmox 終端,直接命令行下載操作系統,也可以支持 SFTP 直接傳輸,甚至是 NFS 的方式去掛載遠程磁盤。
等完成了系統的下載,便可以在 local 磁盤的 content 內看到 ISO 安裝盤。
虛擬機的安裝
首先給你的虛擬機取一個名字,這裏一般推薦 OS+Version+IDE 工具鏈+version,例如 Ubuntu18.04+AndroidR10 以便於區分。
注意要勾選 Advanced 選項,選中 Start at boot,這樣就算 Proxmox 機器重啓,你的虛擬機也會自動啓動。
下拉選擇啓動 ISO 文件:
磁盤就要根據需求選擇 HDD 還是 SSD,設置容量大小,Cache 模式默認即可,一般來説 Write Back 模式可以獲得更好的性能。
值得一提的是,SCSI 雖然提供了最佳的性能,但並不是所有操作系統默認就支持,Linux 默認是支持的,Windows 則不支持,需要在啓動盤區域提前下載好驅動盤,添加第二個 CD ROM,並且動態的搜索驅動安裝 SCSI 硬盤支持。
CPU 一般可以選擇 2 個 Core,Sockets 插座意味着物理 CPU 的數量,因此實際 Total Core 是他們相乘的結果。如果你需要超強的性能,你可以設置32核,甚至更多,Proxmox 會動態分配 CPU 計算力,如果只有你的任務在執行,那麼則會分配至高到你的設置數值。
內存配置,你可以選擇彈性共享內存,最低 2GB 最高 16GB 內存。這樣比較節約資源,一般來説 Ubuntu 只需要 16GB 內存,Windows 就需要 16~32GB 內存最佳。
網絡適配器,選擇默認或者 RealTek 網卡適配器都是可以的。
最終確認,記得勾選 Start after created 即可。
至此你已經學會了如何安裝配置一台虛擬機,操作系統的安裝與單機安裝操作系統基本一致,就不在此贅述。
總結
至此,簡單介紹了網易雲信在 Mobile DevOps 上通過 Proxmox 的實現節流提效的過程。
網易雲信在採用了基於 Proxmox VE 的移動私有構建雲方案後,顯著提高了編譯速度,持續集成變得更頻繁,迭代週期變得更短,自動化測試比例進一步提高,研發設備成本得到了顯著控制。
Proxmox VE 在國內依然不為眾人所熟知,還有很多應用場景還未得到進一步的開發驗證,諸如設備備份,磁盤擴容,不宕機維護等。網易雲信一直在技術領域深耕,期待有更多的同行進行切磋交流。
作者介紹
蔣偉,網易雲信客户端首席架構師,跨平台研發專家。2006 年畢業後從事 Mobile 開發領域,曾在 ZTE、Orange、RingCentral 等任資深研發經理。2020 年加入網易,現任網易雲信客户端組技術負責人,全面負責網易雲信客户端 IM、音視頻 SDK 的架構設計與研發,對跨平台研發、音視頻、DevOps 均有多年的工作項目經驗,平時熱衷於函數式編程、DevOps 持續集成。
更多相關技術內容,歡迎關注【網易智企技術+】微信公眾號