來源| 阿裡巴巴雲原生
2012 年,雲基礎設施服務提供商 Iron.io 的副總裁 Ken 談到軟體開發行業的未來,首次提出了 Serverless 的概念,為雲中運作的應用程式描述了一種全新的系統體系架構。此後,以 AWS 為代表的雲服務廠商将 Serverless 概念逐漸落地,陸續推出了基于 Serverless 的 FaaS(函數即服務)産品。經過幾年的發展,Serverless 架構已被業内認為是引領雲原生下一個十年的發展潮流。
據 Gartner 報告,2020 年全球已有 20% 的企業采用 Serverless 技術部署,Serverless 從底層進行技術變革計算資源的形态,為企業的軟體架構設計和應用服務部署引入創新的技術設計思路。
盡管如此,國内的一些企業和開發者在面對 Serverless 時依然持觀望态度。一方面是相關技術在國内起步較晚,部分開發者對新技術的接受度較低;另一方面,國内的 Serverless 生态建設較為落後,市面上相關的工具鍊并不完善,這導緻開發和部署難度大、成本高。
近日,阿裡雲 Serverless 技術團隊宣布開源
Serverless Devs平台,為開發者提供了一套 Serverless 工具鍊體系。據介紹,通過該平台,開發者可以一鍵體驗多雲 Serverless 産品,快速部署 Serverless 項目。
為了進一步了解 Serverless Devs 項目的特性,以及 Serverless、微服務等雲原生技術生态在國内的發展趨勢,開源中國邀請到了阿裡雲 Serverless 研發負責人楊皓然(不瞋),阿裡雲 Serverless 産品經理、Serverless Devs 項目發起人江昱,與我們分享了 Serverless 項目的細節與國内 Serverless 生态的情況。
以下為采訪原文:
1. 請簡要介紹一下阿裡雲 Serverless Devs 項目的技術團隊成員構成。
<江昱>:團隊是由阿裡雲智能雲原生中間件前端負責人帶隊,聯合阿裡雲智能雲原生函數計算團隊的多名技術專家,以及數名社群愛好者。通過開源思路,進行項目建設,耗時 120 天。
Serverless Devs 的技術團隊核心研發人員主要包括:
- 寒斜:阿裡雲智能雲原生中間件前端負責人, 2016 年加入阿裡中間件從事雲産品企業控制台研發工作,目前帶隊負責中間件 20 多款雲産品的前端研發工作,主要技術棧為大前端通用技術包括 nodejs / typescript / react / electron / reactnative 等對前端研發效能提升,前端數字化體驗管理體系建設有多年的實踐經驗,目前專注在 Serverless 開發者工具鍊的建設,是雲原生 Serverless Dev Tools(S) 研發負責人之一,核心貢獻了 S 啟動器解析核心,S/core 核心包,主導了 S/gui 桌面工具研發工作。關注前端最新技術動态,關注雲原生技術對前端群體的影響,緻力于向前端群體推廣普及雲原生理念。
- 西流:阿裡雲智能雲原生函數計算技術專家,負責阿裡雲函數計算産品功能開發:runtime 開發、事件源內建以及企業級 Sereverless 解決方案落地等,目前專注在 Serverless 開發者工具鍊的建設,是雲原生 Serverless Dev Tools 研發負責人之一,主導了 S/fc 元件的開發工作。關注 Serverless 最新技術動态以及在企業級解決方案的落地,緻力于推動 Serverless 在開發者群體的流行。
- 納海:阿裡雲智能雲原生 PaaS 産品進階研發工程師,參與企業級分布式應用服務 EDAS、應用配置管理 ACM 和 Web 應用托管服務等多款企業級微服務産品研發,同時為 Alibaba Cloud Toolkit 和 Serverless Dev Tools 創始人之一,持續關注微服務、PaaS 和 Serverless 等雲原生領域發展,緻力于建構雲原生領域的開發者工具。
2. 目前使用阿裡雲 Serverless 平台服務的具體落地場景有哪些?
<不瞋>:Serverless 作為基礎研發底座,被越來越多的企業所接受,并應用于業務實踐中。除了網際網路企業最早“嘗鮮”之外,傳統企業也在探索大規模使用 Serverless。
以世紀聯華為例,2019 年的 雙11,
函數計算 FC 幫助世紀聯華順利渡過了大促。2020 年 雙11,世紀聯華全面遷移到函數計算 2.0,抗住了超過去年 230% 的業務峰值,并且研發效率傳遞提效超過 30%,彈性資源成本減少 40% 以上。如今,阿裡整個經濟體都在實踐 Serverless,包括淘寶、天貓、支付寶、釘釘、飛豬、閑魚、語雀等,并将 Serverless 的應用場景擴充到前端全棧、小程式、微服務、新零售、遊戲互娛等領域。具體場景如下:
- 小程式 / Web / Mobile / API 後端服務
在小程式、Web/Moible 應用、API 服務等場景中,業務邏輯複雜多變,疊代上線速度要求高,而且這類線上應用,資源使用率通常小于 30%,尤其是小程式等長尾應用,資源使用率更是低于 10%。Serverless 計算的免運維,按需付費的特點非常适合建構小程式 / Web / Mobile / API 後端系統,通過預留計算資源+實時自動伸縮,開發者能夠快速建構延時穩定、能承載高頻通路的線上應用。在阿裡内部,使用 Serverless 建構後端服務是落地最多的場景,包括前端全棧領域的 Serverless For Frontends,機器學習算法服務,小程式平台實作等等。
- 大規模批處理任務處理
典型的離線任務批處理系統,例如大規模音視訊檔案轉碼服務,包含計算資源管理、任務優先級排程、任務編排、任務可靠執行、任務資料可視化等一系列功能。如果從機器或者容器層次開始建構,使用者通常使用消息隊列進行任務資訊的持久化和計算資源的配置設定,使用 K8s 等容器編排系統實作資源的伸縮和容錯,自行搭建或內建監控報警系統。如果任務涉及多個步驟,還需要整合工作流服務實作可靠步驟執行,而通過 Serverless 計算平台,使用者隻需要專注于實作任務處理邏輯,而且 Serverless 計算的極緻彈性能很好的滿足突發任務對算力的需求。

- 基于事件驅動架構的線上應用和離線資料處理
典型的 Serverless 計算服務通過事件驅動的方式廣泛的與雲端各種類型服務內建,使用者無需管理伺服器等基礎設施和編寫內建多個服務的膠水代碼,輕松建構松耦合、分布式的事件驅動架構的應用。
以阿裡雲函數計算為例,通過 API 網關和函數計算的內建,使用者可以快速實作 API 後端服務。通過對象存儲和函數計算的事件內建,函數能實時響應對象建立、删除等事件,實作以對象存儲為中心的大規模資料處理。通過消息中間件和函數計算的事件內建,使用者能快速實作海量消息的處理。通過和阿裡雲 EventBridge 的內建,無論是一方雲服務,還是三方的 SaaS 服務,或者是使用者自建的系統,所有的事件都可以快速便捷的被函數計算處理。
- 運維自動化
通過定時觸發器,使用者能夠用函數快速實作定時任務,而無須管理執行任務的底層伺服器。通過雲監控觸發器,使用者可以接收 ECS 重新開機/當機,OSS 對象存儲流控等 IaaS 層服務的運維事件,并自動觸發函數處理。
具體案例請參考:
http://case-study.functioncompute.com/case-study.html3. Serverless Dev 項目誕生的契機和願景是什麼?Serverless Dev 與阿裡雲此前開源的另一個 Serverless 項目 Midway 是否有聯系?
<不瞋>:首先我們在服務集團内外的使用者時看到,工具鍊是 Serverless 被使用者接受的最大障礙。這主要展現在以下幾方面:
- 在開發和運維 Serverless 應用時,體驗和已有工具或流程是割裂的。對于複雜業務場景的使用者,他們的不同負載通常運作在虛拟機,容器或者 Serverless 等多個平台上,使用者更希望使用同一套工具和流程,去建構、部署和監控基于虛拟機,容器或者 Serverless 的應用。
- 使用者希望工具鍊能覆寫開發、測試、建構、部署、分布、監控等環節,提供閉環的研發運維體驗,而不再需要跳出到各個産品的控制台,或者要使用多種工具來完成。
- 使用者希望同一套工具鍊,能夠管理阿裡雲,騰訊雲等不同公有雲 Serverless 平台,或者 on-premise 環境的應用。上述問題,導緻很多場景下 Serverless 并未大幅提升研發效率。
其次從雲原生發展的趨勢來看,開發者在建構雲原生應用時,要解決的問題的範圍和複雜度在不斷增加。比如在建構應用時,開發者仍然需要花大量精力來處理和業務邏輯無關的細節問題,包括資源的建立和删除,權限管理等等;對于企業級客戶,除了資源管控外,還需要做到安全合規,比如怎麼保證敏感資料沒有被錯誤的賦予外部通路權限,VM 沒有被禁止通路公網等等。我們相信在工具層面,将有巨大的創新空間。
是以從實際使用者需求和未來趨勢兩個方面出發,我們希望為開發者打造一條工具鍊,能幫助使用者完整的解決應用開發和運維環節的問題,将 dev 和 ops 真正串聯起來,提升研發效率。我們希望這個工具做到良好的 “complexity scalability”,當問題簡單時,能夠快速上手;當問題變得複雜時,同一套工具和流程仍然能勝任。
<江昱>:雖然說 Serverless 已經發展很久了,也不是什麼新鮮的概念了,但是 Serverless 的工具鍊還蠻匮乏的。我們不僅意識到了這個問題,也和很多使用者進行過深度溝通,對使用者在使用 Serverless 的時候遇到的問題也是非常關注,最終我們決定要做一個“站在開發者角度的 Serverless 工具鍊體系”,其目的是可以讓開發者像使用手機一樣使用 Serverless,可以給大家更簡單、友善、快捷的上手體驗、實踐操作,并且可以在 Serverless 項目的全生命周期發揮作用。至于和 Midway 的聯系,我覺得是非常緊密的,因為 Serverless Devs 更多是一個工具層的産品,而 Midway 則是一個架構層的産品,二者互為補助,毫不沖突。
4. 我們看到 Serverless Devs 的定位是 “首個支援主流 Serverless 服務/架構的雲原生全生命周期管理”的平台,它的首創性展現在哪些方面?與業内已有的 Serverless 服務平台相比有何優勢?
<不瞋>:對比
Serverless Framework等流行的工具,Serverless Devs 有幾個明顯的差别:
- Serverless Devs 緻力于解決 build、deploy、release、monitoring/trouble shooting 等應用開發和運維的全流程問題,為使用者提供端對端的開發運維閉環體驗,提升研發效率。其他工具主要是解決單個環節的問題。
- Serverless 應用不隻是依賴計算類産品,還依賴存儲、中間件等各種雲産品,需要工具能夠管理豐富的雲産品。Serverless Devs 未來将支援阿裡雲、騰訊雲、AWS、Azure 和 Google 等所有主流雲廠商的雲産品,以及 K8s 生态的應用。和 Serverless Framework 等工具相比,在資源管理的深度和廣度上更有優勢。
- Serverless Devs 開源、開放,通過基于進階語言抽象能力的元件機制,開發者能夠以 simple、higher level、composable 的方式建構複雜的雲原生應用。
5. Serverless Devs 開源了哪些部分?選擇開源的目的是什麼?
<江昱>:Serverless Devs 開源了兩個主要部分:指令行工具與應用中心。Serverless 其實是一個開發者驅動性很強的領域,我們将整個項目開源,将整個思路開放,其主要目的是想要站在開發者角度,去為開發者提供開發者所需要的工具,讓開發者們自己定義和建設 Serverless 工具鍊,我們也希望通過這種形式,可以和更多的開發者有交集,接觸到更多的 Serverless 愛好者,和大家一起 Serverless。
6. 如果開發者在 Serverless Devs 上部署了自己的應用,之後還可以将該應用轉移到其他平台上嗎?比如轉移到其他雲服務平台或本地伺服器,轉移過程是否便捷?
<不瞋>:多雲的應用遷移涉及到很多的因素,除了計算平台的遷移,還包括資料遷移,配置流程遷移等。Serverless Devs 的設計哲學是幫助開發者用統一的方式 build、deploy、release 容器或 Serverless 應用。無論使用者使用何種語言(nodejs/python/golang/java),何種平台( K8s/阿裡雲 Serverless/Google cloud run 等),研發運維的體驗是一緻的,是以 Serverless Devs 能夠簡化應用遷移到其他平台的難度。
7. 有一種說法是 “Serverless 會阻礙開源服務的創新”,因為目前很多流行的開源軟體還不能大規模地部署在 Faas 平台上,畢竟目前主要的開源軟體并不是針對 Serverless 執行環境的,特别是資料系統。未來的趨勢是創造更多 Serverless 原生開源軟體,還是把一些已有的主要開源軟體遷移到 Serverless 架構呢?
<不瞋>:"Serverless 會阻礙開源服務的創新" 這個觀點來自于 UC Berkeley 的論文 《Serverless Computing: One Step Forward, Two Steps Back》,論文中的談及的 Serverless 對開源服務創新的阻礙是指當下 Serverless 的局限性。半年後他們發表了另一篇論文:《Cloud Programming Simplified: A Berkeley View on Serverless Computing》,預言 Serverless 面臨的挑戰是可以解決的,會成為雲計算的預設範式。目前 Serverless 已經成為學術界的研究熱點,從 2017 年開始,每年相關論文數呈 2 倍速增長。
目前學術界/工業界在 Serverless 方面主要研究趨勢:
- 将流行的應用架構 Serverless 化,比如 Serverless 機器學習架構。
- 拓展 Serverless 程式設計模型,例如 Stateful FaaS,使得 Serverless 計算能夠支撐更多應用場景。
- 在雲的每個層面重構,适應高度動态資源使用的 Serverless 應用。在資料中心層面,通過超快的網絡架構實作計算和存儲分離,将 CPU、GPU、FPGA、disk,甚至記憶體進行池化,進而獲得更好的彈性和資源使用率;在 Serverless 計算平台層面,設計為 Serverless 模式高度優化的存儲服務,高 iops、低延時、低成本,使得分布式系統能夠使用 Serverless 的模式建構。
- 性能優化,例如 GPU,FPGA 等異構硬體支援,軟硬協同優化等等。可以看到這些趨勢将推動 Serverless 成為最具創新性的領域。
8. Serverless 架構與一些流行的微服務架構是什麼關系?Serverless 是否會取代微服務架構?
<不瞋>:Serverless 和微服務架構不是對立的,而是不同次元的概念。微服務是一種架構模式,而 FaaS 為代表的 Serverless 計算平台則是實作微服務的一種方式。微服務可以用 FaaS 實作,也可以用 SpringCloud PaaS 平台, K8s + 容器,或者 VM 實作。
判斷選擇用什麼來實作微服務,要從可靠性、成本、性能、工程效率、安全性、系統遷移難度等次元出發,不同的場景有不同的取舍。當下在微服務場景下使用 Serverless 架構,最大的挑戰在于和現有微服務架構相容,能夠平滑遷移存量應用。為了解決這類問題,阿裡雲 Serverless 應用引擎應運而生,相容 SpringCloud、Dubbo 等流行微服務架構,傳統應用平滑遷移,內建 ARMS 等阿裡雲服務,提供開箱即用的可觀測能力,同時提供定時伸縮,按名額伸縮等彈性能力,讓微服務場景也能享受 Serverless 的紅利。
9. 有網友擔心 Serverless 等雲服務的出現會取代很多後端工程師的工作,以後中小型公司似乎隻需要雇傭前端業務開發者即可,這種看法是否準确? 能否給一些年輕的後端開發者提供一些發展的建議。
<不瞋>:這種看法是片面的。對于任何一項技術,需要思考它的源起、趨勢、優劣勢,特别是要自己去實踐,才能得出客觀的判斷。Serverless 并不是新技術,阿裡雲第一個雲服務對象存儲 OSS 就是 Serverless 的存儲服務,使用 OSS 并沒有壓縮後端開發者的技術發展空間。下圖是要建構一個彈性高可用的後端系統需要考慮的因素,隻有藍色虛線的框才是平台負責,其他大量内容仍然需要後端開發者設計和實作:
Serverless 計算隻是解決了基礎設施管理等最基礎、對使用者最沒有差異化的髒活累活。正如目前已經幾乎沒有開發者會基于彙編語言建構應用,Serverless 也是如此,期望在 cloud programming 時代,為使用者提供進階語言的程式設計體驗。
Serverless Devs 開源項目:
- Github 位址: https://github.com/serverless-devs
- Gitee 位址: https://gitee.com/organizations/serverless-devs/projects
- Serverless Devs 官網: https://www.serverless-devs.com