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