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




































