本文分享自華為雲社群《PHP語言體系下的容器化改造,助力奪冠集團應用現代化》,作者: HuaweiCloudDeveloper。
1、摘要
本文主要介紹了PHP語言體系應用現代化改造上雲的案例。PHP在網際網路公司應用廣泛,PHP語言體系下的容器化改造與常見的Java語言存在一定差異,本文以奪冠集團的應用場景為背景,提供了PHP語言應用的容器改造案例,透過容器化、OPCache技術、Apollo配置中心等方案解決了彈性伸縮慢、資源利用率低、配置混亂等問題,完成生意兔等應用的華為雲遷移、現代化改造等工作,效率和儲存利用率提升了數倍以上。
2、背景
奪冠集團是河南頭部網際網路企業,致力於運用小程式產品技術,為商家和企業提供“網際網路營銷+數字化經營”一體化商業解決方案。奪冠集團旗下擁有奪冠魔方、生意兔、海豚知道、奪冠生活圈、小魔推、船到、小鎮外賣、創意兔等眾多產品線和完善的售後服務體系。近年來,奪冠憑藉過硬的產品技術與服務品質在國內脫穎而出,與阿里、百度、騰訊、位元組跳動等一線網際網路企業均保持緊密合作。
奪冠集團應用開發以PHP語言為主,業務多樣化,代表處透過多次交流均未能從商務上打動客戶。DTSE介入後,針對客戶業務上的痛點問題,對客戶進行了深入的調研,併為客戶提供了基於華為雲的應用現代化改造方案,成功打動客戶CTO及高層領導,獲得應用現代化改造的試點機會。
3、客戶業務場景分析
3.1 業務痛點
在與客戶的交流中,客戶表示業務最近幾年可見較大的發展機會,且業務發展對資源消耗較大,但是客戶業務系統的IT架構無法支撐未來業務發展,最主要的問題是彈性伸縮效率不高,會因為突發流量導致系統崩潰,同時運維效率存在瓶頸。
面對客戶提出的問題,DTSE經過深入調研分析,客戶的IT系統問題主要以下兩個原因導致的,一是在服務擴縮容方面,客戶應用直接在伺服器部署,基於伺服器的備份映象做彈性伸縮,映象大小高達200G,即浪費了彈性伸縮時間,又增加了儲存成本;二是在突發流量感知方面,客戶基於系統負載、CPU利用率和記憶體利用率進行負載監控,此類指標只有業務流量實際處理起來後才會發生變化,對於流量感知是滯後的,故不能及時的感知到突發流量。
對於運維效率方面,客戶隨著業務的發展,現有的運維人員已經不能滿足業務運維需要,正在招聘多名運維人員。經過與運維開發同事的交流,主要是由以下兩個原因導致了運維人員的效率低下,一是客戶開發和運維邊界混亂,很多開發環節的操作都需要運維介入,比如業務系統新版本的上線、測試環境配置的更新、日誌的收集查詢等等;二是客戶的多個應用混合部署在多臺伺服器上,對應關係完全靠人工維護,且應用配置雜亂無章,完全依賴手工管理和同步。
- 在調研過程中,還發現客戶的應用系統還存在以下問題:
- 應用間耦合部署,當發生突發流量、受到攻擊時,會發生資源相互爭搶等現象。
- 未處理好彈性伸縮後,新擴容應用的負載均衡問題。
- 應用和資料的災備機制不健全,可靠性低。
- PHP應用執行效率低下。
3.2 客戶改造阻塞點
與客戶領導溝通時,客戶對於應用架構升級非常感興趣,但是對於業務升級還是有比較大的擔憂,主要在以下三個方面:首先客戶希望架構升級不能給業務帶來的影響;其次希望架構升級後,儘量避免對於現有開發人員技術棧的衝擊;第三,希望儘量減少架構升級所帶來的額外成本。考慮到企業業務穩定發展、企業技術棧與人員穩定性,客戶對於升級改造存在較大的疑慮。
4 、雲化架構升級改造方案
綜合考慮業務問題與客戶關注問題,專案組決定採用以樣板改造先行,打消客戶疑慮,以樣板效果推動專案發展的應對策略。
4.1 改造樣本選擇
分析客戶業務體系,當前有約20個應用,全景圖如圖1所示,各個應用之間的技術棧基本相同。
與客戶共同商討,建議採用循序漸進的策略,先試點後複製推廣,與客戶溝通後決定先選擇標杆應用進行架構最佳化試點。
同時為了保證業務穩定,我們計劃先測試後生產,提高改造效率,儘快完成試點,劃定業務改造範圍,為了客戶體驗,優先改造不需要開發人員參與的部分,對業務影響小的部分,保證改造過程平穩,其餘部分則只在測試環境上最佳化,並由客戶決定是否上生產環境。
圖1 奪冠集團應用技術架構全景圖
針對客戶關心的三個具體問題,DTSE提供了不停機的切換方案,保證架構升級的業務連續性。同時,加強客戶溝通,透過高層彙報、日常專案例會為客戶決策層、具體專案執行層詳細說明了新架構對於開發技術棧要求不變的特點。重點介紹了新架構所能帶來的資源利用率的提升,減少客戶對於成本的擔憂。透過技術與日常專案運作,讓客戶整體上消除了對於新技術帶來挑戰的顧慮,堅定了對改造專案的支援。
4.2 PHP容器化遇到的問題
奪冠集團所有應用的後端都是PHP語言實現的,基於PHP-FPM執行,主要有以下特點:
- 客戶應用每次請求都是一個程序,且會依次執行掃描、解析、編譯,最後才會執行程式碼,故資源使用量極高。
- 客戶應用中的大部分程序都實現了無狀態化,但是往往多個程序的程式碼會混雜在一起,難以拆分。
- 客戶在程式設計時,並未考慮此應用需要在雲上執行,不符合雲原生要素要求,因此,還有部分程序是有狀態的。
- 客戶在上線新版本時,採用遠端FTP的方式直接修改測試環境程式碼,採用git拉取的方式更新生產環境程式碼。
因此,對於奪冠集團的業務改造,也不單單是容器化這麼簡單,我們需要從業務到流程,全面的對於奪冠的應用進行改造,這並不是一個簡單的事情。
4.3 應用改造方案
針對客戶應用存在的痛點和問題,專案組提供了基於華為雲的應用現代化改造方案,整體方案如圖2所示。包括基於CCE和CCI的容器化方案、基於Apollo配置中心方案、基於流量監控的彈性伸縮方案等多個子方案。此方案優點是:
- 應用叢集基於CCE服務做容器化、無狀態部署,資源相互隔離,避免相互搶佔影響的現象。
- 配置統一管理,可管、可控、可視,不再需要人工手動維護,提升運維效率。
- 基於流量的彈性伸縮,提前感知流量變化,提高彈性伸縮反應時間。
- 應用叢集透過NAT閘道器實現對外部三方服務的訪問,單IP外接化,不再與叢集強耦合。
圖2 奪冠集團應用現代化改造方案
4.3.1 基於CCE和CCI的容器化方案
客戶在伺服器上部署的應用映象高達200G,且多個應用混雜在同一個映象中,所以我們並沒有選擇直接將應用映象進行容器化的方案,而是對客戶的業務流程進行了詳細的分析和拆解,儘量將每個映象做到最小。
以生意兔應用為例,其業務的部署架構如圖3所示。
圖3 生意兔的部署架構
我們將生意兔的nginx路由拆出,並由k8s提供的nginx ingress替換,然後將WorkerMan的閘道器和註冊中心拆出,剩餘的生意兔業務相關的部分,因為程式碼耦合所以暫時部署在同一個容器中,等待客戶開發人員將各個程序的程式碼剝離開,即可分開獨立部署。最終客戶業務映象被縮減到了180M,且配合CCE和CCI,實現了秒級擴容。
在專案過程中多次因為業務流程未對齊而修改方案的情況發生,主要是因為客戶對於容器化並沒有清晰的概念,並不清楚那些問題會影響容器化的方案,所以建議在進行改造前對於客戶開發和運維人員進行一次簡單的賦能,便於問題提前暴露。
4.3.2 基於Apollo配置中心方案
對於客戶配置混亂的問題,DTSE給客戶提供了基於Apollo的配置中心方案,頁面化操作,一鍵修改所有負載的配置,不再需要運維人員手動的維護。如圖4所示,且Apollo也是採用容器化部署,搭建方便,如圖3所示。
圖4 基於Apollo的配置中心方案
針對測試和生產環境,我們為客戶分別部署了兩套獨立的環境,測試環境直接將賬號提供給開發測試人員,可以由測試人員直接修改環境配置,不再需要運維參與,而生產賬號由運維人員控制,並只允許運維人員修改。
4.3.3 基於流量監控的彈性伸縮方案
為了進一步解決客戶彈性伸縮慢的痛點,DTSE提供了基於Prometheus流量監控的彈性伸縮方案,如圖5所示。相較於通用的資源使用率做彈性伸縮,直接利用容器的網路監控資料作為彈性伸縮指標,在突發流量到來的時候更早的感知到負載的變化,更加迅速的觸發彈性伸縮。基於此方案我們將客戶最終彈性伸縮的時間縮短了一倍有餘。
圖5 基於基於Prometheus流量監控的彈性伸縮方案
4.3.4 基於CodeArts的CICD方案
為了進一步解決客戶運維效率低的問題,DTSE提供了基於CodeArts的CICD方案,如圖6所示,建立從程式碼到部署的流水線,由客戶開發人員自行進行新版本釋出,讓運維和開發人員職責歸位。
圖6 基於CodeArts的CICD方案
並推薦客戶結合業界最佳實踐,在一段有限的時間內,逐步將程式碼QC、程式碼門禁、自動化測試等配置加入流水線,進一步提高自動化程度,進而提高交付質量。
4.3.5 PHP效能最佳化方案
針對客戶PHP應用執行效率低下問題,我們發現主要是因為客戶沒有使用OPCache技術導致的,因為在客戶原有的環境中,使用OPCache會導致新發布的版本需要三到五分鐘才能生效,不利於開發和測試,所以也沒有在公司內部推廣,但是在容器化之後,則無需擔心快取問題,OPCache加速的原理如圖7所示,使用OPCache技術可以為應用帶來4倍多的效能提升。
圖7 OPCache加速的原理
4.4 對雲服務產品的意見
對於客戶關注的彈性伸縮問題,我們測試發現,當前CCE突發彈性到CCI還需要20多秒的時間,其中180M的映象載入佔用了13s,建議產品對於映象載入過程進行最佳化,進一步縮短突發彈性擴容時間。
對於客戶關注的成本問題,通常採用CCE和CCI配合的方案,由於CCE節點池擴容較慢,在此期間突發擴容到CCI,為了進一步減少客戶成本,建議產品增加此場景的排程功能,當CCE有充足的資源時,主動將CCI上的容器排程到CCE上。
當前CodeArts Build雖然可以編譯容器映象,但是對於基礎環境映象支援不足,在很多基礎環境映象的編譯時會按照很多基礎元件比如make等等,會需要較高的許可權,但是CodeArts Build官方環境,會因為缺乏許可權而導致構建失敗。
4.5 架構改造給客戶帶來的價值
指標 |
最佳化前 |
最佳化後 |
對比 |
備註 |
彈性時間 |
140s ~ 210s |
51s ~ 81s |
2倍+ |
從突發流量到伸縮完成 |
映象儲存 |
200G |
0.18G |
1000倍+ |
節省儲存空間,提升部署速度 |
效能最佳化 |
RPS 14.2 |
RPS 61.56 |
4倍+ |
3Core6G 100併發 |
配置管理 |
600s+ |
20s |
30倍+ |
無需運維人工介入 |
應用容災 |
單可用區 |
多可用區 |
提升抗風險能力 |
|
環境一致性 |
不一致 |
一致 |
減少問題出現機率 |
|
隔離性 |
耦合部署 |
獨立部署 |
避免了相互擠壓 |
|
流水線 |
單部署 |
從程式碼到部署 |
從程式碼到部署一條流水線 |
5、總結和建議
根據W3 Techs的統計,PHP仍然是當今使用最廣泛的伺服器端語言,仍然作為網際網路的主幹,為至少百分之七十的網站提供後端支援[1]。尤其是在中小企業類網際網路公司,PHP仍被大量使用,通常這類企業存在技術升級力量儲備弱、應用架構歷史債務重等問題。
牽引這類客戶上雲,簡單的商務折扣已經難以打動,而平滑過渡的升級方案、全棧雲的技術支援對其更加具有吸引力。由DTSE提供方案建議和技術支援,引導客戶進行試點驗證,進而推廣複製,並保障業務改造的平滑過度,循序漸進的將客戶業務遷移上華為雲,實現客戶與華為雲雙贏。
本文介紹了PHP語言體系應用現代化案例,實現了許多與業務無關的通用性應用改造方案,如PHP應用容器化架構方案、基於Prometheus的彈性伸縮方案等等,為此型別客戶提供了一個可參考的案例。
6、參考文獻
[1] https://timotijhof.net/posts/2023/an-internet-of-php/
點選關注,第一時間瞭解華為雲新鮮技術~