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