Mobile DevOps 之 Proxmox 实现节流提效
導讀: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 會有所不同,主要因為以下幾點原因:
1. 移動端構建天然碎片化嚴重?
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 的版本也很復雜。
2. 移動端應用研發迭代周期越快越好?
絕大部分 Top 10 的團隊基本都能做到2周內發正式版本,1天內針對嚴重問題發布 hotfix。這就要求 Mobile DevOps 能夠做到自動化測試1天內全量完成,不同研發小組、各個的 feature 對應 branch 的測試是每天都在并發進行的。因此 DevOps 必須要解決高計算量的需求。
3. 維護 CI 設備成本越來越高?
一個10人的團隊至少需要一套自動化編譯、測試機器,如果團隊達到上百人,上千人,這個設備的數量就會呈指數級增長。編譯機器這里指 Mac Mini、Mac Pro、PC、Linux 服務器,自動化測試手機Android、iPhone 若干等。
以筆者工作過的幾家單位為例,每年采購自動化測試編譯機器均以百萬計,再算上設備折舊更新,這筆成本已經事實上變成了每年的固定支出。
不僅采購設備成本居高不下,編譯機器越多,維護成本越大。Mobile DevOps 的每個操作都需要復制粘貼到數十臺不同機器,每次機器升級、設備更新,Mobile DevOps 人員是忙得像熱窩上的螞蟻。
為什么考慮企業私有云計算的解決方案?
移動構建任務“云化”聽起來有些超現實,但是只要解決掉移動構建碎片化的難題,就可以享受后端開發 DevOps 云的同等便利。接下來我們談談考慮私有云的幾個思考過程、遇到的挑戰和解決辦法。
1. 為什么考慮私有云的 DevOps 方案?
私有云 DevOps 方案主要能帶來以下幾點優勢:
-
Security 安全性:私有云意味著代碼的絕對安全,所有編譯都發生在物理機房內,絕無外部訪問的安全性漏洞;
-
High availability 高可用性:私有云與 Git 代碼倉庫在同網絡下擁有無與倫比的優勢。以網易為例,代碼內網checkout 速度高達 150M/s,一份 WebRTC 代碼高達 20GB 之巨,如果使用公有云方案幾乎是噩夢,而且有很多工程有天然的復雜性,很有可能引用了多個內網的 submodule 或者是外網的庫依賴,遷移改造代價大,收益低;
-
Scalability 高擴展性:跟許多公有云方案一樣,私有云同樣具備集群式管理,可以簡單的復制粘貼,一臺新的構建機器就創建成功了;
?2. 私有云的挑戰?
找到支持虛擬化的軟件并不難,難在要找到同時具備全平臺虛擬化、擴展性、穩定性、還免費的產品。
我們嘗試了各種選項組合,列舉了市面上的軟件供應商,如下圖:
于是很自然的 Proxmox VE 進入了我們的視線,他擁有高穩定性、易擴展并且支持多平臺的特性。在進行篩選調研之后,我們決定使用 Proxmox VE 來實現網易云信的私有云方案,助力 Mobile DevOps 工作。接下來我們先對它做一個簡單的介紹。
Proxmox VE 簡介
Proxmox VE 是一款強大的企業級虛擬化開源軟件,通過一個簡單的 Web 界面即可管理容器,定義機器 CPU、磁盤容量、網絡配置并且具備集群式管理功能,它支持虛擬化 Windows、Linux 以及各種其他操作系統。在這里我們基于 Proxmox V6.2 的版本展開討論。
這里先貼上圖,直觀感受一下它的管理界面。
Mobile DevOps 工作大變樣
詳細的安裝過程我們將在本文最后詳細展開。先來看一下使用了 Proxmox 之后,網易云信在私有云方案的 Mobile DevOps 上發生了什么變化。
1. 撬開了性能的洪水猛獸?
左側為一臺普通聯想 PC 的磁盤讀寫性能,右側是一臺 Proxmox Windows RAID 磁盤的性能,可以對比看出使用了 Proxmox 后文件讀寫直接提高了8~10倍。
因為高效率的內存共享,平時 16GB 緊巴巴的機器,直接共享直至 256GB 的內存,完全無壓力。CPU 也可以設置非常高的配置,讓 Proxmox 動態分配直至最高性能。
下圖是一個 Jenkins Job 不同硬件的前后對比,編譯時間直接從 15 分鐘提速到只需要 3 分鐘!
?2. 維護輕松易管理?
還記得 Mobile DevOps 每天在不同的機器之間逐個進行配置維護管理嗎?不僅容易犯錯,丟三落四的腳本沒有執行到位,還會發生不可控的風險。
使用 Proxmox VE 之后,再也不必如此費心處理了。只需要配置完成一個樣本機器,直接復制、粘貼,一臺一模一樣的機器就制作完成了,只需要修改一下節點機器的 IP 設置,即可完成機器配置。如果使用的是 DHCP,那就徹底免維護搞定。
3. 節約成本?
兩臺 R730 價格大約 15w,相當于團隊購置多少臺機器呢?
-
2臺2020款新 Mac Pro (20w);
-
20臺聯想臺式機 PC (20w);
-
20臺 Linux 編譯機器 (15w);
-
額外再配備 2-3 名 DevOps 維護人員;
價格優勢,顯而易見,而且購買各類機器閑時資源浪費嚴重,遠不如共享私有云服務器效率高。
云信使用 Proxmox VE 詳細安裝流程
下面我們詳細為大家介紹,網易云信從采購流程開始到安裝完成 Proxmox 的全過程。
1. 采購服務器機器?
簡單來說, 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袖進去的。
?2. 安裝流程?
第一步到這里
https://proxmox.com/en/downloads/category/iso-images-pve 下載 ISO,燒錄到 USB 磁盤作為引導安裝盤,進入引導畫面后的安裝過程了,一路點 Next按照步驟填寫即可。
一般機房是要求固定 IP 地址的,建議這一步慎重配置好,另外建議網口使用 10GB 帶寬的網線。
至此畫面,安裝完畢,自動重啟后,你就可以離開瑟瑟發抖的機房了。
3. 設置虛擬服務器集群?
在所有的機器安裝好了之后,先登錄每臺機器對應的管理界面,例如 https://192.168.1.141:8006,只需要找到一臺作為主控制器,點擊 Create Cluster,復制粘貼加入信息,到其他機器上粘貼,即可一鍵加入集群管理。至此,你就可以在任意一臺管理界面上管理您的所有集群。
4. 磁盤分配?
先跑到這個界面,熟悉一下機器的磁盤配置分區信息,為接下來的系統安裝做準備。
要想安裝幾個操作系統,每個分別需要多大磁盤、多少 CPU、多少內存,這些都得提前做好計劃。我們第一期規劃是這樣子做的,如下圖:
5. 準備安裝虛擬機?
安裝操作系統的 ISO 都是放在/var/lib/vz/template/iso 目錄下面。一般可以使用 ssh 命令登錄到 Proxmox 終端,直接命令行下載操作系統,也可以支持 SFTP 直接傳輸,甚至是 NFS 的方式去掛載遠程磁盤。
等完成了系統的下載,便可以在 local 磁盤的 content 內看到 ISO 安裝盤。
6. 虛擬機的安裝?
首先給你的虛擬機取一個名字,這里一般推薦 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 等任資深研發經理。加入網易后現任網易云信客戶端組技術負責人,全面負責網易云信客戶端 IM、音視頻 SDK 的架構設計與研發,對跨平臺研發、音視頻、DevOps 均有多年的工作項目經驗,平時熱衷于函數式編程、DevOps 持續集成。
?
總結
以上是生活随笔為你收集整理的Mobile DevOps 之 Proxmox 实现节流提效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI驱动的超分辨技术落地实践
- 下一篇: 浅谈分布式 ID 的实践与应用