
Serverless 一塊深水的堅冰,逐漸從深海浮出了水面,阿裡淘系從去年在大促實踐開始,逐漸将 Serverless 應用到前端領域方方面面。而 Node.js 作為前端最有價值的武器,在這其中,發揮了其靈活,輕量的本質,讓業務提效。如今,Node.js Serverless 從幕後走向前台,本篇就跟随我們來一一揭開 2020 雙十一 Serverless 如何讓業務落地,開發提效,以及規模化的面紗。
依托阿裡雲 Serverless 函數計算等基礎設施,今年(2020)淘系前端在行業導購、會場、營銷v榜等業務場景中規模化使用了 Node.js Serverless 技術,請求相比去年(2千QPS)今年達到新的水準(峰值總計5萬QPS),同時将CPU水位,相比去年 FaaS 平均水位(20%)提升到(40%)。在業務價值方面,Node.js Serverless 支撐的雲端一體研發模式傳遞平均提效 38.89%。今年更是依托 Serverless 的便利性和可靠性,幫助雙十一特色的淘寶、天貓、飛豬等會場頁面快捷地落地 SSR 技術提高頁面體驗。在運維方面,今年優化大促态和日常态流程,讓開發者在應對更高 QPS 規模時,精力花費降低約50%。在研發體驗方面,打造解決方案體系,降低研發門檻,支援外包快速入場。
本文将介紹我們在淘系雙十一,從日常開發到作戰的方案與經驗,為大家提供一些 Node.js Serverless 的經驗參考,也歡迎大家提出寶貴的意見。
探索之路
Midway Serverless Framework
相比傳統 Node.js 應用,由于部署模式以及運作環境的不同,我們在原有Node架構之上進行了方案更新,提出了Midway Serverless。
Midway Serverless是一套面向Serverless的解決方案,它包括架構、運作時、工具鍊、配置規範等幾個部分。
在架構設計過程中,我們主要把握了這幾個特點:
1. 多平台适配能力
社群不同雲平台底座能力适配,提供Serverless底座遷移替換能力,防止雲平台鎖定。
傳統應用和Serverless模式,互相遷移的能力,做功能降級和能力更新。
2. 讓應用層更易維護和擴充
使用了Typescript作為基礎語言,定義基礎類,便于上層應用開發者定制化。
提供應用開發過程中常用的插件以及提供了插件體系。
架構預設結合基建能力,提供問題排查和性能優化等基礎功能。
3. 面向不同業務場景的開放性
提供基礎上層接口,滿足不同開發者基于不同業務場景進行定制化開發。
打造快速試錯、高可用的研發模式
統一雲研發平台,從研發到傳遞建構更靈活的前台應用開發。
為了提升開發者本地的開發者體驗,我們做了Vscode插件、本地腳手架來提升開發者的開發體驗。
釋出平台,我們通過将釋出鍊路進行流程化,做代碼雲建構,最終将熱加載的代碼打成壓縮包。
最終函數運作時,我們通過熱排程的模式,加速函數啟動時間。
解決方案沉澱
同時我們和業務開發者在過去實踐中,沉澱各類解決方案,各部門一方可以定制化自己的租戶,同時各部門也可以選擇通用解決方案,并選擇自己部門的網關進行組合。
模型驅動、函數編排
借助模型驅動,函數編排産出FaaS函數。同時結合我們原有的搭建系統,業務同學進行子產品的排期,頁面的搭建,快速響應淘寶雙十一相關的業務需求。
技術實作層面主要分為:
- 資料鍊路設計
- 操作面闆設計
- 代碼生成方案
資料鍊路設計,主要設計定義DSL,對資料來源、模型、字段、出入參、代碼片段進行了結構化存儲。
例如代碼片段定義:
操作面闆設計,主要是函數邏輯編排:
FaaS代碼生成邏輯:
穩定性建設單元化保障
通過異地容災,對業務進行多地多機房部署,實作真正意義上的異地多活。
單元化優點:
1、在車輛高速行駛過程中,進行更換輪胎。架構更新,可以在某個單元進行灰階。
2、當單個單元出現問題時,切換到另外一個單元提供服務。
3、性能評測,可以做單個單元的性能評估。
監控保障
我們通過在架構Runtime層面,接入全鍊路跟蹤系統,友善開發者檢視錯誤的鍊路情況。
業務同學隻需關注自己業務函數的QPS和成功率,而且對于成功率的下跌,或者QPS的環比下跌都将通過IM、短信或者電話的方式進行及時報警。
例如下圖我們一個函數的日常情況的QPS變化情況:
預案保障
為應對各個環節可能存在的未知風險,架構層面,我們通過設定了多種預案來進行面對。
當任何一個環節出現監控報警時,都能作出合理的應對措施。
限流保障
根據2019年的流量情況,預估今年雙十一的規模,我們進行了建站壓測、單鍊路壓測、全鍊路壓測等多個環節。根據壓測表現,對于流量鍊路的各個元件,進行限流配置,進行服務的保護。
今年在保障相同QPS的情況下,我們對于容器層面的CPU消耗情況進行更多的壓榨,相比去年提升1倍。
業務實踐
導購營銷雲端一體研發
通過2.2中的研發模式,讓開發者能快速選擇通用解決方案,快速響應業務需求,制作出滿足業務場景的前端功能。最終營運借助我們前端開發者提供的功能,能玩出花。
會場 SSR - 實作雙 11 會場秒開
借助 SSR 服務端渲染 + Serverless 模式,前端開發者通過前後端一起優化的模式,進一步優化使用者體驗。幫助雙11 分會場大幅提高了頁面打開速度,業務轉換上提高的受益也有不錯展現。
中背景高效研發
中背景一體化研發模式具備特性:
- 前後端一體化開發、上線、運維,高效開發部署上線。
- 無須關注伺服器、域名申請等事情,讓業務同學隻需關注業務。
- 解決長尾應用伺服器成本問題,合理把控中背景生命周期。
總結與展望
Serverless 是未來開發的基座,前端利用 Serverless 快速實作業務傳遞,以往,前端的開發會受到資源的限制,而如今,在創造力的驅動下,Serverless 使得前端不再受到資源成本的制約,同時又能使用 Node.js 快速的疊代業務,其效率遠高于傳統開發,而成本又相對較低。如今,這不僅僅是未來,也是當下前端在持續投入的事情,Serverless 和多端技術,整個前端都将有一次大的變更和飛越。快來和我們一起編寫雲端一體的未來吧。
🔥第十五屆 D2 前端技術論壇開放報名,速搶!
一起來 D2 Node.js (Serverless) 專場學習更多精彩内容
關注「Alibaba F2E」
把握阿裡巴巴前端新動向