如何實現一次編碼,到處運行?新一代云端一體化探索
當前移動互聯網業務研發運維模式,云與多端互相割裂,有些全棧的探索缺乏成功案例,行業對云端一體化研發這塊仍是空白,我們要思考:如何能實現 1 個研發支撐云 + android + iOS 三端的業務快速落地?是否有新的研發運維模式,讓程序員回歸程序?“一次編碼、到處運行”是我們的答案。我們在閑魚項目驗證,原本 60 天的項目時間減少了 20 天,提效 33% 。希望阿里高級技術專家孫棋的分析能夠給大家帶來收獲。
業務研發模式的演進
效率是業務研發運維模式演進核心驅動力
PC 互聯網時代,單體應用包含前后端是最初的研發模式(淘寶經歷開發人員寫 velocity 模板,以及更早的 jsp、asp 頁面)其實質是中心化搭火車的研發模型。
圖片來源:http://www.hsrb.com.cn/a/news/guonw/2018/0201/172694.html
隨著業務發展復雜性快速增加,趕火車的交付模式,極大的限制了業務發展,因此誕生了服務化的拆分,淘寶在 09 年的五彩石項目即基于這樣的背景,微服務是一種軟件架構,這背后更是一種研發模式的變革,從中心化研發模式到分布式的研發模式升級。
在業務分布式研發模式升級的同時,前后端分離研發模式也在同步的演進,從 ajax 到專業前端獨立完成業務閉環,職業分工細化提效。但對前端同學而言,服務端的運維始終是其痛苦的技術門檻,以及在阿里以 Java 語言為基礎的中間件生態內,一直沒有很好解決。
進入移動互聯網時代,客戶端同樣也經歷同樣的演進,阿里集團以 atlas 實現了端分布式研發模式。但對比 pc 時代的前后端分離,移動時代又回到了 ajax 模式,端的同學只負責了端,沒有實現業務自閉環。同時移動互聯網帶來了新的挑戰,即跨 android 和 iOS 平臺的問題, React Native、weex 等產品即在這個環境下誕生。
云端一體輕量級研發模式的核心挑戰
如何讓客戶端同學更往后一步,實現業務落地的閉環能力,同時規避 BFF 層對客戶端同學的在研發、運維以及跨語言面臨集團 Java 技術中間件生態,關鍵是:
- 對業務研發屏蔽代碼運行環境
- 跨云、端多平臺能力
Java 語言最初的成功,“一次編譯,到處運行”是關鍵,在 JVM 層面屏蔽了部分的運行環境;如何向研發提供語言無關的透明化代碼運行環境是核心挑戰,除了業務代碼以外的事情全部讓技術平臺托管。
移動互聯網這么多年云和端仍是割裂的各自為戰的研發模式,業界也有全棧的探索,但沒有很成功的案例,問題是技術門檻太高,對開發人員即要還要的太多,業務落地的復雜性而言沒有本質的變化,原來 3 個人做的事情,簡單的讓一個人做而已,缺乏一個有效跨平臺能力,尤其是跨云+端的平臺能力。
研發模式演進的本質:降低技術門檻、跨平臺能力。
“一次編碼,到處運行”
讓開發人員只關注業務邏輯編碼,是研發模式的全新的下一個階段,也是研發模式演進的本質體現。這個階段云原生代表的技術給了我們很多的輸入,通過容器化技術解耦基礎設施,容器化編排降低了運維復雜性;通過服務網格實現了應用與中間件體系的解耦合;不可變基礎設施,支持更高的一致性和可靠性,降低了復雜性;serverless 的理念,技術的演進為研發模式升級提供了新的契機。
GAIA 業務輕量級研發運維模式探索實踐
基于這樣的背景, GAIA 應孕而生,與閑魚、 aplatform 淘系互動平臺兩大業務緊密合作,通過 GAIA 云端 FaaS 技術能力,重新定義了研發的職責和邊界,讓程序員回歸最初的程序,結合端上的跨平臺實現云端一體的輕量級業務研發運維模式。閑魚全新的研發模式如下圖:
進展結果:
- 閑魚業務落地實例,通過云端一體化研發模式,使原本 60 天的項目時間,減少了 20 天,提效 33% 。
- 88 VIP 互動 aplatform ,幾十萬 QPS 業務流量平穩可靠運行,輕量級復合多容器設計模式的集團首次規模化驗證。
GAIA設計理念
通過容器化設計模式,把基礎設施下沉與業務解耦,代碼運行環境對業務透明化。
輕量級復合多容器設計模式
我們的應用目前都仍是富容器模式,重要的問題是容器職責不單一,造成隔離性以及業務與基礎設施緊密耦合的問題。
容器做為 GAIA 的關鍵,其設計模式進行了革命性的升級,也是集團首次大規模的嘗試。
- 基于 K8s 的 pod 輕量級復合多容器能力,重新定義了業務與基礎設施的邊界,通過 sidecar 承載基礎設施;
- 通過容器化的編排調度,實現資源、流量與容器生命周期統一,為按需使用奠定基礎架構;
- 基于 configmap ,實現配置與環境解耦,實現容器鏡像的不可變性,日常、預發、生產鏡像的統一,降低復雜性;
- 基于 Init Container 技術,實現 function 業務與基礎設施徹底解耦,通過容器生命周期初始化機制組合 function+ 基礎設施構建運行態,為業務 function 與基礎設施各自獨立運維提供支撐;
- API 服務注冊發現等基礎設施能力下沉到 K8s 技術體系。
通過這些容器的設計能力,業務研發只需要編寫業務邏輯代碼即可,同時通過聲明式的 API 透出,快速完成了云端業務的落地能力在移動端,小程序等容器也封裝隔離業務的運行環境, flutter 亦是如此,研發人員進入面向容器編程,通過容器來隔離基礎設施,屏蔽運行環境平臺的差異性。
GAIA 是開放性的平臺,按其容器設計規范,閑魚對dart語言按規范應實現了function容器, aplatform 的引擎與 GAIA 的 Java 容器對接的成功,解決了平臺型應用以及任何應用基于 GAIA 實現 serverless 化的解決路徑(集團存量萬+級別的應用)。
總結展望
目前 GAIA 和閑魚以及 aplatform 淘系互動進行的實踐是一次意義重大的定義探索, “一次編碼,到處運行” ,讓程序員回歸程序,當前云端技術上是初步的結合,未來還待深度的體系挖掘建設未來的展望:
- 業務輕量級研發運維模式是不可阻擋的未來
天下大事,分久必合合久必分,5G 萬物互聯即將到來,多種終端設備,需要輕量級研發運維模式的支持,從驅動研發模式演進的“降低技術門檻、跨平臺能力”本質出發,高效的業務落地能力是王道,當前分云 +iOS+android 的多端多人協作模式必將逐步淘汰。
- 面向容器化、統一 API 服務編程
云和端運行環境容器化,是業務與基礎設施解耦的必經之路,通過容器化封裝隔離運行環境,通過容器提供的統一的 API 服務接口交互;云與端容器技術會趨同,兩端容器會緊密的互動,云端在技術體系上更深度的結合,實現云端技術體系閉環。
- 工程體系歸一,客戶端、服務端統一版本化發布升級
目前割裂的研發模式,典型的表現是多端各自代碼分支;業務云端一體化輕量級研發模式,業務的工程體系將會云端歸一,在一個工程項目里面,定義服務接口,在云端容器實現服務透出,在客戶端容器實現服務調用;同時云和端會統一化的版本化發布運維體系,這里需要對整個研發模式體系的再定義。
技術部門組織架構的變革
人的要求變化,支持業務的組織生產關系將升級。
我們的使命
“革新研發模式、重構研發生態。”
“一次編碼、到處運行”,業務云端一體化輕量級研發運維模式,等待我們一起建設。