函式計算: 讓小程式開發進入 Serverless 時代
點選下載《不一樣的 雙11 技術:阿里巴巴經濟體雲原生實踐》
本文節選自《不一樣的 雙11 技術:阿里巴巴經濟體雲原生實踐》一書,點選上方圖片即可下載!
作者 | 吳天龍(木吳)阿里雲函式計算技術專家
導讀:小程式是輕量級的快速迭代的移動應用,對開發者從開發到上線的效率提出了更高的要求。使用函式計算,開發者無需關心後端服務的搭建運維,只需要編寫函式就能夠為小程式提供穩定可靠並且彈性伸縮的服務。並且隨著小程式訪問量增加,函式計算能夠自動快速地彈性伸縮,即使應對 雙11 活動高峰也能夠如絲般順滑。
自 2017 年第一批小程式上線以來,越來越多的移動端應用以小程式的形式呈現。小程式擁有觸手可及、用完即走的優點,這大大降低了使用者的使用負擔,使小程式得到了廣泛的傳播。在阿里巴巴,小程式也被廣泛地應用在淘寶/支付寶/釘釘/高德等平臺上,例如今年 雙11,大家在淘寶/天貓上參加的活動,大部分都是通過小程式提供的。
一個小程式可以分為客戶端和服務端:客戶端包括介面的展示和互動邏輯;服務端則包括資料的處理和分析。
為了支撐大量的小程式,平臺在服務端面臨的挑戰有:
- 大量的小程式是不活躍的,傳統的至少一臺伺服器的方式會造成資源浪費;
- 在活動高峰期小程式的呼叫量激增,要求服務端能夠快速進行彈性伸縮。
針對小程式場景,阿里雲提供了完整的小程式解決方案:小程式雲。資源的有效利用和彈性伸縮,是小程式雲提供的核心能力之一,而這背後依託的,就是阿里雲函式計算服務。函式計算是一個全託管 Serverless 計算服務,讓開發者無需管理伺服器等基礎設施,只需編寫和上傳程式碼,就能夠構建可靠、彈性、安全的服務。下面就以 雙11 小程式場景為例,解析函式計算在彈性伸縮上的核心技術。
小程式架構
讓我們先來看一下淘寶小程式的技術架構是什麼樣的:
- 使用者在手機淘寶點選店鋪活動,就進入了小程式。介面及互動由小程式客戶端提供;
- 在使用者參與活動過程中,需要向服務端請求或者傳送資料時,由客戶端發起函式呼叫;
- 函式呼叫先經過淘寶接入閘道器,進行必要的鑑權認證,然後呼叫到小程式雲;
- 使用者的函式程式碼執行在小程式雲中,使用者可以實現自定義的業務邏輯。
利用小程式雲提供的豐富的擴充套件能力,使用者可以方便地構建完整的電商應用:
- 資料儲存:儲存結構化的資料;
- 檔案儲存:儲存文字/圖片/視訊等檔案;
- 電商服務:獲取使用者資訊/建立支付交易;
- 統計分析:自動統計小程式的使用資訊及使用者分析,支撐商業決策。
可以看到,函式是整個小程式的業務邏輯的核心,它將雲端的基礎能力組合串聯起來,對客戶端提供服務能力。如果函式能力成為瓶頸,將影響整個小程式的執行。
在這樣的架構下,要支撐大量的小程式,需要函式能夠做到:
- 一是隨時線上以支援小程式即開即用;
- 二是彈性伸縮以應對小程式訪問突增。為了做到以上兩點,讓我們看一下函式計算的技術架構:
函式計算架構
其中幾個核心元件的功能如下:
- API 服務:函式計算的閘道器,實現鑑權/流控等功能;
- 資源排程:為函式呼叫分配管理計算資源,負責排程效率和效能;
- 函式執行引擎:執行函式程式碼的環境,做到安全和隔離。
基於這個架構,函式計算是如何解決上面提到的小程式平臺的挑戰呢?接下來我們逐一分析。
1. 冷啟動
當用戶建立函式上傳程式碼時,函式計算只是將程式碼包儲存到 OSS,並沒有分配計算資源,因此函式計算可以支撐海量的小程式。
當函式第一次被呼叫時,函式計算會分配計算資源、下載函式程式碼、載入並執行程式碼。這一過程稱為冷啟動,函式計算通過大量的優化,將系統側的冷啟動時間優化到 200ms 以內。因此即使是冷的小程式,在初次呼叫時也能夠做到快速的即開即用。
2. 彈性伸縮
當小程式持續呼叫過程中,負載逐漸上升或者突然升高的情況下,函式計算是如何應對的呢?
函式計算的“資源排程”模組,會精確管理每個例項的狀態,當請求到來時,它首先檢查是否有空閒的例項可以服務,如果沒有請求就會進入等待佇列,當有空閒的例項釋放出來時,請求就能夠被及時處理。
同時,排程器還會在後臺建立新的例項,當新的例項準備好後,也能夠服務請求。在這種策略下,能夠做到在負載以 2 倍的速度增長情況下,請求的 P95 延時是穩定的。優化細節可以參考我們的部落格文章。
上面是某個淘寶小程式的呼叫量和延時監控資料。
可以看到,在整點活動時,TPS 出現了瞬間的高峰,但是 P95 延時卻沒有明顯的波動。這是因為函式計算在請求高峰來臨時,能夠快速地彈性伸縮建立新的例項,同時利用已有資源做一定的緩衝,使得整個攀升的過程能夠比較平滑。
3. 預留例項
對於一些“秒殺”的場景,要求瞬間提供大量的計算資源。此時靠實時的彈性伸縮是不夠的:
- 一是冷啟動的時間即使是 200ms,對於秒殺場景也太慢了;
- 二是底層的計算資源在擴容時也會有流控。
針對這種場景,函式計算提供了預留例項的功能。使用預留例項,使用者可以為一些可預測的活動提前預留好資源,徹底消除冷啟動。
和傳統的基於伺服器的做法不同,使用者不需要按峰值來預留資源,而是可以結合預留例項和按量例項的混合模式:請求先被預留例項處理,當預留例項用滿時,會自動彈性伸縮出更多的按量例項來處理請求。
由於有一定的資源基礎,結合排程優化,按量例項的冷啟動所產生的影響就被大大減小了。這就是利用函式計算的彈性伸縮能力,在效能和成本之間達到很好的平衡。
總結
小程式是輕量級的快速迭代的移動應用,對小程式開發者的開發效率有很高的要求。
小程式上線後隨著訪問量的增加或者活動期間的訪問突增,對後端服務的穩定和彈性也是一個很大的考驗。函式計算上傳程式碼即可執行,極大地提高了後端服務的開發效率;混合模式的彈性伸縮,輕鬆應對負載變化。這些特點使得函式計算成為支撐小程式平臺的很好的選擇。
歡迎加入釘釘交流群
對函式計算感興趣的開發者,可以點此免費試用)!
本書亮點
- 雙11 超大規模 K8s 叢集實踐中,遇到的問題及解決方法詳述
- 雲原生化最佳組合:Kubernetes+容器+神龍,實現核心系統 100% 上雲的技術細節
- 雙 11 Service Mesh 超大規模落地解決方案
“阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”