我在阿里云做云開發(fā)平臺
大云廠商今年在開發(fā)者陣地側(cè)逐漸開始向“云”化開發(fā)發(fā)展,最為顯著的產(chǎn)品就是Cloud IDE,催生出來的趨勢就是云端開發(fā)。云開發(fā)現(xiàn)階段盡管在各大公司內(nèi)部無法作為日常開發(fā)工具普遍推廣,但是在某些特定場景下Cloud IDE云開發(fā)是非常讓人著迷的:
- 即開即用,用完即走的場景,如編寫函數(shù)(天貓精靈功能開發(fā))、demo編寫預(yù)覽、code review以及代碼倉庫集成等
- 深度定制的統(tǒng)一的團隊業(yè)務(wù)環(huán)境,團隊成員無需配置復(fù)雜環(huán)境即可上手
- 天然架構(gòu)在云之上,在開發(fā)態(tài)集成云產(chǎn)品的諸多服務(wù)
- 集成CI/CD,快速迭代
- Serverless架構(gòu)應(yīng)用測試(Cloud IDE也屬于云上環(huán)境,可實時調(diào)試函數(shù))
國內(nèi)外很多廠商在爭奪利益:
- 微軟是第一個繞不開的公司。微軟在開發(fā)者工具以及IDE領(lǐng)域積累頗深,產(chǎn)出了眾多明星產(chǎn)品:visual studio、vscode等,特別是vscode直接影響了Cloud IDE的發(fā)展進程。而且去年微軟收購的另一個明星產(chǎn)品Github推出了codespace將Cloud IDE與Github開源社區(qū)結(jié)合在一起,實現(xiàn)“一云多端”的代碼側(cè)生態(tài)貢獻。盡管codespace并未提供類似阿里云云開發(fā)平臺的Serverless架構(gòu)、行業(yè)案例支持、DevOps一體化等諸多功能,但未來微軟極有可能將其配合Azure一起組件完成鏈路實現(xiàn)整個生態(tài)的閉環(huán)。
- 谷歌的Firebase是主打BAAS的一款產(chǎn)品,它為后端服務(wù)提供Realtime database、Auth、Cloud Function、Message Push、Analytics以及Cloud storage等服務(wù),無需服務(wù)器即可快速開發(fā)并使用以上諸多服務(wù),特別適合個人應(yīng)用和創(chuàng)業(yè)項目等。不過由于國內(nèi)網(wǎng)絡(luò)的特殊性,一些服務(wù)無法在國內(nèi)正常使用,且網(wǎng)絡(luò)RT較大。Firebase并未提供Cloud IDE而是推薦 “本地開發(fā)+Firebase SDK+CLI”的形式在本地進行開發(fā)調(diào)試與部署。
那么在云開發(fā)以及彈性計算領(lǐng)域,阿里云也有許多產(chǎn)品,比如阿里云云開發(fā)平臺、FC控制臺的CloudIDE以及Serverless Devs。云開發(fā)平臺若要在遵循叢林法則的生態(tài)競爭中生存就必須有它獨有的核心價值與手段來解決ISV的關(guān)鍵訴求,那么相比其他產(chǎn)品有哪些不同呢?
什么是阿里云云開發(fā)平臺
阿里云云開發(fā)平臺(Cloud Workbench:https://workbench.aliyun.com/),是阿里云面向廣大開發(fā)者及企業(yè)提供的云上研發(fā)工作平臺,助力研發(fā)團隊實現(xiàn)工作的在線化(團隊在線、環(huán)境在線、代碼在線、協(xié)同在線)以及研發(fā)模式Serverless化,幫助研發(fā)團隊實現(xiàn)對行業(yè)架構(gòu)經(jīng)驗及架構(gòu)服務(wù)的高效分享與傳播,極致提升研發(fā)效率,極致降低研發(fā)成本。
使用云開發(fā)平臺架構(gòu)的應(yīng)用,天然是云原生的,天然是Serverless架構(gòu)的,天然是支持在線開發(fā)、調(diào)試、協(xié)同、CI/CD的;由于云開發(fā)平臺是架構(gòu)在阿里云底層基建之上,因此開發(fā)者天然可以享受阿里云提供的基礎(chǔ)設(shè)施紅利(編排、代碼倉庫、devops工具監(jiān)控與報警、異地多機房以及VPC網(wǎng)絡(luò)隔離、多版本與灰度),這些基礎(chǔ)設(shè)施對于大多數(shù)中小公司自建難度非常大且邊際成本很高,而通過云開發(fā)平臺使用這些服務(wù)大多是免費或者按量計費,提效降費自不必說;云開發(fā)平臺針對不同業(yè)務(wù)場景不同技術(shù)棧的應(yīng)用抽象了3種技術(shù)架構(gòu),并搭配了云底座與產(chǎn)品實現(xiàn)技術(shù)側(cè)保障,省去架構(gòu)的煩惱。
云原生 Serverless 架構(gòu)
關(guān)于云原生以及Serverless有很多解釋,那么樸素意義上的云原生指的是因云而生的軟硬件以及架構(gòu),它包括為云或者彈性而設(shè)計的CPU或GPU,以及為云或彈性設(shè)計的中間件與使用這些中間件的應(yīng)用。云原生不僅是實踐,更是一種理念。開發(fā)人員的開發(fā)環(huán)境也要生在云上、長在云上,讓產(chǎn)品設(shè)計、開發(fā)調(diào)試環(huán)境、部署、測試與灰度、POC驗證、資源消費等等,全部基于云來進行,云開發(fā)平臺就是貫徹云原生理念的一款產(chǎn)品,力圖在云端覆蓋產(chǎn)品的全生命周期。
Serverless字面意思為無服務(wù)器,實際上可理解為無運維架構(gòu)。開發(fā)者無需關(guān)心底層硬件的采購與運維(機器、網(wǎng)絡(luò)、流量)聚焦于業(yè)務(wù)邏輯開發(fā),由云進行彈性擴縮容,并按量計費(這對峰值流量差異大特別是移動端應(yīng)用尤為明顯)。
云開發(fā)平臺針對不同類型特點的業(yè)務(wù)分析和生成一個基于云產(chǎn)品矩陣構(gòu)成的云原生 Serverless 架構(gòu)(FAAS+BAAS),滿足業(yè)務(wù)規(guī)模的不斷擴大與快速迭代。
針對無狀態(tài)的應(yīng)用提供了最為輕量的FC架構(gòu),通過APIGW + FC + NAS等通用組合可實現(xiàn)自動彈性擴縮容、多版本共存、灰度與a/btest、文件持久化以及局部狀態(tài)保存,滿足大多數(shù)簡單業(yè)務(wù)場景,當(dāng)前線上應(yīng)用大多為此種架構(gòu),以Web服務(wù)、云函數(shù)(天貓精靈)的形式運行?;贔C的架構(gòu)向開發(fā)者屏蔽了底層PAAS部分,僅需在Cloud IDE中開發(fā)、調(diào)試代碼,測試通過后在Cloud IDE部署到對應(yīng)環(huán)境即可。
無狀態(tài)的應(yīng)用是指應(yīng)用(函數(shù))是運行在第三方提供的無狀態(tài)計算容器中,并且在不復(fù)用容器的情況下應(yīng)用(函數(shù))可能會存在冷啟動并且可以正常對外服務(wù),這個時候應(yīng)用(函數(shù))可以認(rèn)為是無狀態(tài),因此如果應(yīng)用依賴本機的crontab、內(nèi)存數(shù)據(jù)庫亦或是本地文件存儲等,都是有狀態(tài)的應(yīng)用,是需要做一些改造才可以使用基于FC的架構(gòu)。
針對有狀態(tài)或者微服務(wù)應(yīng)用云開發(fā)平臺提供了服務(wù)型SAE架構(gòu),可解決應(yīng)用啟動有狀態(tài)的問題(通過SLB與docker鏡像),并可兼容Spring Cloud、Dubbo、HSF等主流的微服務(wù)開發(fā)框架,完成服務(wù)注冊、發(fā)現(xiàn)、調(diào)用與統(tǒng)計。
服務(wù)型ASK架構(gòu)則是為更為專業(yè)的企業(yè)團隊進行企業(yè)級Kubernetes容器化應(yīng)用的生命周期管理而設(shè)計的,這里不做重點陳述。
云開發(fā)平臺力圖透過常見業(yè)務(wù)場景的表象抽象出幾種普適的云端Serverless架構(gòu),在眾多云產(chǎn)品的選擇困難和搭配與架構(gòu)的痛苦抉擇中給予開發(fā)者或企業(yè)些許幫助或啟發(fā)。基于云開發(fā)平臺“生長出來”的產(chǎn)品是Serverless架構(gòu)的,釋放了架構(gòu)師與運維人員的生產(chǎn)力,一切架構(gòu)由“云開發(fā)平臺”來完成,開發(fā)者負(fù)責(zé)端側(cè)與服務(wù)端通用業(yè)務(wù),一切有償資源均按量付費。
搬站
搬站就是存量項目遷移到云開發(fā)平臺上,直接升級為Serverless架構(gòu)。理想中的搬站是不需要開發(fā)者修改任何代碼就可以直接升級,但現(xiàn)實往往是殘酷的:由于不同語言有不同的特性及特點,因此針對常見的語言云開發(fā)平臺在性價比的權(quán)衡下提供了不同的搬站策略:
- 基于Serverless框架的零代碼搬站:Nodejs(全框架支持)與Python(同步與異步WSGI均支持)
- 基于容器的低(零)代碼搬站:Python、Java與PHP
Serverless 框架
Serverless框架是云開發(fā)平臺抽象的一層抹平不同語言框架、語言運行時底層API(非FC運行時)的膩子,擺脫了FC只能運行簡單函數(shù)的限制,將復(fù)雜用戶層代碼(非簡單函數(shù))通過代理的形式與FC運行時打通,實現(xiàn)業(yè)務(wù)側(cè)代碼零改動遷移。
基于Serverless框架的項目遷移其實對用戶的業(yè)務(wù)進程模型有一定要求:
- 單機對應(yīng)單個業(yè)務(wù)進程
- 無長連接需求
- 應(yīng)用無狀態(tài)
- 僅支持七層轉(zhuǎn)發(fā)
采用Serverless框架遷移的項目,僅提供對HTTP與HTTPS協(xié)議的支持,對TCP或UDP服務(wù)暫不支持。
基于容器的低代碼搬站
容器是云時代重要標(biāo)志之一,基于容器統(tǒng)一的交付標(biāo)準(zhǔn),云開發(fā)平臺支持存量應(yīng)用部署到三種Serverless(FC、SAE、ASK)中的任一計算服務(wù)當(dāng)中。云開發(fā)平臺提供基于各種語言基礎(chǔ)鏡像,讓存量應(yīng)用以盡少的修改來完成部署,成為云原生Serverless應(yīng)用。
只需要提供一個鏡像就可以運行在三套不同的架構(gòu)下,在使用云開發(fā)平臺提供不同語言的鏡像前提下僅需修改相關(guān)前置配置文件即可實現(xiàn)遷移。
實時調(diào)試
針對Serverless應(yīng)用無法即時調(diào)試的問題,云開發(fā)平臺提供了另一種解決方案:Cloud IDE調(diào)試環(huán)境預(yù)置,在開發(fā)態(tài)即可模擬線上運行時。這樣開發(fā)者便可以做到實時開發(fā)應(yīng)用、實時預(yù)覽、實時查閱日志。
若要針對不同技術(shù)棧提供不同的運行時容器,這需要依賴抽象的通用適配層來解決不同類型request及path處理機制、模擬“冷啟動”環(huán)境初始化、測試域名安全性保證和私密性與超時策略、APIGW返回兼容處理;需要依賴存儲層實現(xiàn)運行時容器的熱更新與拉取策略靈活定制;而這一切則是通過操作IDE的workbench擴展無感知運行的,讓開發(fā)者體驗云端測試的便利,爭取更長時間的云端留存。
云端斷點調(diào)試是云開發(fā)平臺的另一個優(yōu)勢。通過attach功能,Cloud IDE可以調(diào)試任意端口的服務(wù),這也正好為調(diào)試運行時所用。通過與調(diào)試運行時打通,可實時查看運行時輸出日志與context,獲得與傳統(tǒng)開發(fā)相同的體驗。
DevOps 私有化
Serverless的優(yōu)勢在于低運維、無運維,開發(fā)者使用云開發(fā)平臺可以從業(yè)務(wù)迭代出發(fā),在多套環(huán)境(測試、預(yù)發(fā)布)驗證(壓力、性能、穩(wěn)定性測試)后上線進行灰度(百分比),觀測相關(guān)監(jiān)控指標(biāo)與功能性驗證后進行線上全量部署,而這一切均可以在Cloud IDE中操作完成。當(dāng)業(yè)務(wù)流量有峰值時底層的FAAS會進行相應(yīng)的擴縮容實現(xiàn)彈性。此后根據(jù)用戶反饋或業(yè)務(wù)迭代進行進一步開發(fā)。
輕量級的DevOps帶來了幾個好處:
- 更短的業(yè)務(wù)迭代周期:覆蓋應(yīng)用全生命周期的工作流與自動化能力將帶來應(yīng)用持續(xù)交付能力以及跨團隊協(xié)同效率的大幅提升,進而縮短業(yè)務(wù)的交付周期。
- 更合理的人力資源分配
- 更穩(wěn)固的應(yīng)用交付質(zhì)量
輕量級DevOps自然有它的可取之處,可對企業(yè)而言卻存在一個致命的問題,那就是如何兼容已存在的CI/CD流程。企業(yè)不可能立馬摒棄現(xiàn)有的運維系統(tǒng)去采用云開發(fā)平臺提供的部署流。大多數(shù)公司都有自己的開發(fā)工作流程,這包括內(nèi)部代碼托管、團隊協(xié)作、權(quán)限控制與風(fēng)控、公司獨特的CI/CD,如何低成本的兼容這套原有體系是Serverless應(yīng)用能否“本地化、私有化”,讓企業(yè)和開發(fā)者接受與認(rèn)同的最關(guān)鍵的一點。
云開發(fā)平臺通過提供一個本地部署套件以插件的形式嵌入企業(yè)原有的發(fā)布流程中,以低侵入性、高擴展性、靈活的兼容性實現(xiàn)項目快速迭代,在不影響原有開發(fā)流程的前提下做到開發(fā)者無感知。本地部署套件可以讓企業(yè)可以大膽嘗試Serverless架構(gòu)而無需考慮運維兼容性的問題,同時也可根據(jù)云開發(fā)平臺的OpenAPI自定義工具實現(xiàn)DevOps的工具化與智能化,南北雙向滿足需求。
云開發(fā)平臺對開發(fā)者的形態(tài)進行總結(jié),把他們劃分為三個層級:
- 對于小白、無歷史包袱開發(fā)者,云開發(fā)平臺提供了一個從創(chuàng)建、實現(xiàn)、測試、構(gòu)建、部署全部環(huán)節(jié)的集成研發(fā)環(huán)境,支持一站式在云開發(fā)平臺上實現(xiàn)Serverless應(yīng)用。
- 對于有研發(fā)體系的ISV,研發(fā)、測試在本地完成。云開發(fā)平臺和ISV的分工界面在代碼倉庫Codeup上,云開發(fā)平臺提供全套CICD功能,開發(fā)者提交代碼到Codeup上后,CICD功能、資源編排都交給云開發(fā)平臺。
- 對于有研發(fā)體系并且有CI體系的ISV,提供基礎(chǔ)設(shè)施的編排以及CD功能。
- 對于二、三層級,云開發(fā)平臺通過提供OpenAPI接口,支持ISV進行集成,和ISV現(xiàn)有研發(fā)體系無縫融合。
通用行業(yè)解決方案
云開發(fā)平臺通過行業(yè)場景與解決方案將技術(shù)與商業(yè)進行鏈接,通過將各行業(yè)最成功的技術(shù)實踐案例抽象封裝成一個個的行業(yè)場景解決方案,開發(fā)者可以基于云開發(fā)平臺之上呈現(xiàn)出來的行業(yè)場景解決方案去創(chuàng)建一個應(yīng)用,極大地加速商業(yè)化效率以及降低前期技術(shù)架構(gòu)領(lǐng)域研究及準(zhǔn)備的綜合成本。
通過常見案例的切入并抽象為通用的場景需求,如天貓精靈應(yīng)用、微信與支付寶小程序營銷、前后端分離應(yīng)用、博客、微服務(wù)等,對其進行解析。云開發(fā)平臺從兩個方向進行預(yù)處理:
分析和生成一個基于阿里云產(chǎn)品矩陣構(gòu)成的云原生 Serverless 架構(gòu)
- 將依賴的資源做打包上傳
- 隨后生成任務(wù),通過 ROS,逐一進行生產(chǎn)、創(chuàng)建、安裝,直至一個行業(yè)應(yīng)用被初始化完成,最后發(fā)布到官方解決方案市場。
通過解決方案的自動實例化處理,我們實現(xiàn)了云開發(fā)平臺最為核心的能力:
- 幫助行業(yè)開發(fā)生態(tài)格式化、規(guī)范化地沉淀經(jīng)驗;
- 幫助行業(yè)開發(fā)生態(tài)快速分發(fā)、復(fù)制行業(yè)應(yīng)用開發(fā)經(jīng)驗;
- 幫助行業(yè)開發(fā)生態(tài)無縫升級至先進的云原生Serverless架構(gòu);
- 幫助阿里云無縫被集成至用戶業(yè)務(wù)之中;
Nodejs解決方案示例:
云上協(xié)同
我們在實踐中發(fā)現(xiàn),在線化是一個新的趨勢。云時代我們在探索一切資源上云,當(dāng)然也就包括了代碼上云、云上協(xié)同與開發(fā)。將實際團隊映射到云端,在云上開發(fā)可以實現(xiàn)地域、時間與設(shè)備無關(guān)的全球協(xié)同,而且云上開發(fā)更重要的是可以在云端實現(xiàn)整個開發(fā)生命周期的閉環(huán)鏈路,更方便的集成開發(fā)側(cè)的云產(chǎn)品。云上開發(fā)并不意味著放棄了傳統(tǒng)的本地開發(fā),兩者是可以互補的。在本地+云開發(fā)的協(xié)同增強下,既可以在本地靈活自定義開發(fā)環(huán)境快速迭代,也可在云端實時調(diào)試部署與共創(chuàng),這也得益于部署運維輕量化。
云開發(fā)平臺對團隊成員提供四種角色,團隊擁有者、團隊管理員、應(yīng)用管理員和應(yīng)用開發(fā)者,分別對應(yīng)不同管理、運維和開發(fā)權(quán)限。目前有諸多活動場景使用了云上協(xié)同功能以及衍生出的“授課-開發(fā)-提交作業(yè)”模型,如阿里云開發(fā)者成長計劃、部分高校的合作授課、阿里巴巴前端練習(xí)生計劃等,極大減輕了協(xié)同成本。
最后
從傳統(tǒng)線下研發(fā)模式過渡到云原生時代,解決云原生集成研發(fā)使用的"最后一公里"問題正是云開發(fā)平臺的使命。云開發(fā)平臺將繼續(xù)在系統(tǒng)穩(wěn)定性、云產(chǎn)品架構(gòu)靈活性、代碼易遷移性等方向不斷深耕滿足開發(fā)者訴求,從而聚焦于核心業(yè)務(wù)目標(biāo)無需考慮運維與架構(gòu)的繁瑣事務(wù),擁抱“云 + 端”開發(fā)模式。