函數計算: 讓小程序開發進入 Serverless 時代

點擊下載《不同的 雙11 技術:阿里巴巴經濟體雲原生實踐》
ban.jpghtml

本文節選自《不同的 雙11 技術:阿里巴巴經濟體雲原生實踐》一書,點擊上方圖片便可下載!小程序

做者 | 吳天龍(木吳)阿里雲函數計算技術專家segmentfault

導讀:小程序是輕量級的快速迭代的移動應用,對開發者從開發到上線的效率提出了更高的要求。使用函數計算,開發者無需關心後端服務的搭建運維,只須要編寫函數就可以爲小程序提供穩定可靠而且彈性伸縮的服務。而且隨着小程序訪問量增長,函數計算可以自動快速地彈性伸縮,即便應對 雙11 活動高峯也可以如絲般順滑。

自 2017 年第一批小程序上線以來,愈來愈多的移動端應用以小程序的形式呈現。小程序擁有觸手可及、用完即走的優勢,這大大下降了用戶的使用負擔,使小程序獲得了普遍的傳播。在阿里巴巴,小程序也被普遍地應用在淘寶/支付寶/釘釘/高德等平臺上,例現在年 雙11,你們在淘寶/天貓上參加的活動,大部分都是經過小程序提供的。後端

一個小程序能夠分爲客戶端和服務端:客戶端包括界面的展現和交互邏輯;服務端則包括數據的處理和分析。安全

爲了支撐大量的小程序,平臺在服務端面臨的挑戰有:服務器

  • 大量的小程序是不活躍的,傳統的至少一臺服務器的方式會形成資源浪費;
  • 在活動高峯期小程序的調用量激增,要求服務端可以快速進行彈性伸縮。

針對小程序場景,阿里雲提供了完整的小程序解決方案:小程序雲。資源的有效利用和彈性伸縮,是小程序雲提供的核心能力之一,而這背後依託的,就是阿里雲函數計算服務。函數計算是一個全託管 Serverless 計算服務,讓開發者無需管理服務器等基礎設施,只需編寫和上傳代碼,就可以構建可靠、彈性、安全的服務。下面就以 雙11 小程序場景爲例,解析函數計算在彈性伸縮上的核心技術。架構

小程序架構

讓咱們先來看一下淘寶小程序的技術架構是什麼樣的:app

1.png

  • 用戶在手機淘寶點擊店鋪活動,就進入了小程序。界面及交互由小程序客戶端提供;
  • 在用戶參與活動過程當中,須要向服務端請求或者發送數據時,由客戶端發起函數調用;
  • 函數調用先通過淘寶接入網關,進行必要的鑑權認證,而後調用到小程序雲;
  • 用戶的函數代碼執行在小程序雲中,用戶能夠實現自定義的業務邏輯。

利用小程序雲提供的豐富的擴展能力,用戶能夠方便地構建完整的電商應用:less

  • 數據存儲:存儲結構化的數據;
  • 文件存儲:存儲文本/圖片/視頻等文件;
  • 電商服務:獲取用戶信息/建立支付交易;
  • 統計分析:自動統計小程序的使用信息及用戶分析,支撐商業決策。

能夠看到,函數是整個小程序的業務邏輯的核心,它將雲端的基礎能力組合串聯起來,對客戶端提供服務能力。若是函數能力成爲瓶頸,將影響整個小程序的運行。運維

在這樣的架構下,要支撐大量的小程序,須要函數可以作到:

  • 一是隨時在線以支持小程序即開即用;
  • 二是彈性伸縮以應對小程序訪問突增。爲了作到以上兩點,讓咱們看一下函數計算的技術架構:

函數計算架構

2.png

其中幾個核心組件的功能以下:

  • API 服務:函數計算的網關,實現鑑權/流控等功能;
  • 資源調度:爲函數調用分配管理計算資源,負責調度效率和性能;
  • 函數執行引擎:執行函數代碼的環境,作到安全和隔離。

基於這個架構,函數計算是如何解決上面提到的小程序平臺的挑戰呢?接下來咱們逐一分析。

1. 冷啓動

當用戶建立函數上傳代碼時,函數計算只是將代碼包保存到 OSS,並無分配計算資源,所以函數計算能夠支撐海量的小程序。

當函數第一次被調用時,函數計算會分配計算資源、下載函數代碼、加載並執行代碼。這一過程稱爲冷啓動,函數計算經過大量的優化,將系統側的冷啓動時間優化到 200ms 之內。所以即便是冷的小程序,在初次調用時也可以作到快速的即開即用。

3.png

2. 彈性伸縮

當小程序持續調用過程當中,負載逐漸上升或者忽然升高的狀況下,函數計算是如何應對的呢?

函數計算的「資源調度」模塊,會精確管理每一個實例的狀態,當請求到來時,它首先檢查是否有空閒的實例能夠服務,若是沒有請求就會進入等待隊列,當有空閒的實例釋放出來時,請求就可以被及時處理。

同時,調度器還會在後臺建立新的實例,當新的實例準備好後,也可以服務請求。在這種策略下,可以作到在負載以 2 倍的速度增加狀況下,請求的 P95 延時是穩定的。優化細節能夠參考咱們的博客文章

4.png

上面是某個淘寶小程序的調用量和延時監控數據。

能夠看到,在整點活動時,TPS 出現了瞬間的高峯,可是 P95 延時卻沒有明顯的波動。這是由於函數計算在請求高峯來臨時,可以快速地彈性伸縮建立新的實例,同時利用已有資源作必定的緩衝,使得整個攀升的過程可以比較平滑。

3. 預留實例

對於一些「秒殺」的場景,要求瞬間提供大量的計算資源。此時靠實時的彈性伸縮是不夠的:

  • 一是冷啓動的時間即便是 200ms,對於秒殺場景也太慢了;
  • 二是底層的計算資源在擴容時也會有流控。

針對這種場景,函數計算提供了預留實例的功能。使用預留實例,用戶能夠爲一些可預測的活動提早預留好資源,完全消除冷啓動。

5.png

和傳統的基於服務器的作法不一樣,用戶不須要按峯值來預留資源,而是能夠結合預留實例和按量實例的混合模式:請求先被預留實例處理,當預留實例用滿時,會自動彈性伸縮出更多的按量實例來處理請求。

因爲有必定的資源基礎,結合調度優化,按量實例的冷啓動所產生的影響就被大大減少了。這就是利用函數計算的彈性伸縮能力,在性能和成本之間達到很好的平衡。

總結

小程序是輕量級的快速迭代的移動應用,對小程序開發者的開發效率有很高的要求。

小程序上線後隨着訪問量的增長或者活動期間的訪問突增,對後端服務的穩定和彈性也是一個很大的考驗。函數計算上傳代碼便可運行,極大地提升了後端服務的開發效率;混合模式的彈性伸縮,輕鬆應對負載變化。這些特色使得函數計算成爲支撐小程序平臺的很好的選擇。

歡迎加入釘釘交流羣

函數計算二維碼.png

對函數計算感興趣的開發者,能夠點此免費試用)!

ban.jpg

本書亮點

  • 雙11 超大規模 K8s 集羣實踐中,遇到的問題及解決方法詳述
  • 雲原生化最佳組合:Kubernetes+容器+神龍,實現核心系統 100% 上雲的技術細節
  • 雙 11 Service Mesh 超大規模落地解決方案
阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」
相關文章
相關標籤/搜索