1. 程式人生 > 實用技巧 >教你輕鬆構建基於 Serverless 架構的小程式

教你輕鬆構建基於 Serverless 架構的小程式

前言

自 2017 年第一批小程式上線以來,越來越多的移動端應用以小程式的形式呈現。小程式觸手可及、用完即走的優點,大大降低了使用者的使用負擔,也使小程式得到了廣泛的傳播。在阿里巴巴,小程式也被廣泛地應用在淘寶、支付寶、釘釘、高德等平臺上。

為了支撐大量的小程式,服務端面臨的挑戰有:

  • 大量的小程式是不活躍的,傳統的至少一臺伺服器的方式會造成資源浪費;
  • 在活動高峰期小程式的呼叫量激增,要求服務端能夠快速進行彈性伸縮。

而小程式開發者往往是客戶端/前端的開發者,更多的精力在開發業務程式碼與應用的快速上線上,而無暇顧及服務端的運維操作。

阿里雲 函式計算 是一個全託管 Serverless 計算服務,讓開發者無需管理伺服器等基礎設施,只需編寫和上傳程式碼,就能夠構建可靠、彈性、安全的服務。

函式計算彈性、免運維、高效、安全的特性十分適合作為小程式的服務端。

解決方案

函式計算封裝了一套小程式服務端模板,幫助小程式開發者快速搭建基於函式計算的小程式。

使用這個模板搭建小程式應用具有以下特點:

  • 運維效率高:無需管理伺服器,部署函式即可上線;
  • 開發效率高:基於封裝好的資料介面,直接開發業務程式碼;
  • 零費用啟動:服務端基於函式計算,資料庫採用表格儲存,都是按量付費並且有較大的免費額度。

小程式的工作流程

一個完整的支付寶小程式需要以下幾個元素:

  • 支付寶 App:是支付寶小程式的載體,執行在使用者手機端;
  • 小程式客戶端:是小程式展現給使用者的操作頁面;
  • 小程式服務端:是小程式的邏輯處理單元,比如對使用者進行身份認證以及對資料進行存取;
  • 支付寶服務端:是支付寶 App 的邏輯處理單元,包含使用者的身份資訊。

函式計算封裝了一套小程式服務端模板,幫助小程式開發者快速搭建基於函式計算的小程式。下面介紹服務端模板的工作流程。

FC 服務端模板工作流程

除了基礎設施的運維問題,服務端主要解決兩個通用問題:

  1. 身份認證:服務端提供的 API 如何對客戶端的請求進行鑑權?客戶端的資訊如果洩露如何保證資料安全?
  2. 資料訪問:客戶端如何進行資料庫操作和檔案操作?

這是每一個小程式開發都會遇到的共性的問題,可以通過一些框架或者模板來避免重複建設。因此我們基於函式計算開發了一個小程式應用模板,解決了這些通用的問題,讓開發者能夠專注在業務邏輯上,快速開發上線自己的小程式。

  1. 客戶端小程式通過支付寶 App 的 API,獲得 authCode,這個過程會在 App 中彈出使用者授權框;
  2. 小程式客戶端向小程式服務端發起 createSession 請求,用於初始化的身份認證;
  3. 小程式服務端將 authCode 傳給支付寶服務端,支付寶服務端校驗 authCode,返回 accessToken;
  4. 小程式服務端根據收到的 accessToken 生成一個 sessionId 和一個 STS token,在服務端記錄這 2 個資訊然後把它們返回給客戶端。STS token 是用於訪問服務端函式的憑證,而 sessionId 作為前面認證成功而建立的會話資訊,通過這個 sessionId 可以識別當前請求的使用者資訊;
  5. 小程式客戶端再次需要獲取資料,帶著證明自己身份的 sessionId 向小程式服務端發起獲取資料請求;
  6. 小程式服務端首先根據 sessionId 獲取使用者身份資訊,再根據使用者資訊獲取相關資料;
  7. 將使用者資料返回給小程式客戶端。

搭建流程

註冊支付寶小程式

  • 準備工作:註冊支付寶開發者賬號

如果您尚未註冊支付寶開發者賬號,使用支付寶賬號登入 螞蟻金服開放平臺,並完成開發者身份註冊。詳細資訊請參見 開發者入駐說明


  • 生成金鑰,需要在小程式服務端與支付寶服務端配置金鑰,對交易資料進行雙方校驗

  • 將公鑰配置在 【設定】->【開發設定】->【介面加簽方式】,並記錄私鑰

搭建小程式服務端

  • 準備工作

  • 開通 函式計算表格儲存日誌服務

  • 部署應用

  • 進入控制檯應用中心,選擇 Mini App Todo List Server Template 模板,填寫剛才記錄的 APPID 與 PrivateKey,為 DBInstance/LogProject 取個自定義的名字(如果名字已被佔用,會報 Already Exists 的錯誤),部署應用

搭建小程式客戶端

npm install git://github.com/aliyun/fc-nodejs-sdk.git#mini-app --save

由於 fc-nodejs-sdk 使用了ES6語法,在釋出小程式時,需要在小程式專案的根目錄下,新建一個檔案mini.project.json,填入以下內容:

{ "node_modules_es6_whitelist": [ "@alicloud/fc2" ] }

至此,開發工作已經完成,您可以除錯,上線您的小程式啦。

總結

小程式上線後隨著訪問量的增加或者活動期間的訪問突增,對後端服務的穩定和彈性也是一個很大的考驗。函式計算上傳程式碼即可執行,極大地提高了後端服務的開發效率;混合模式的彈性伸縮,輕鬆應對負載變化。服務端模板與客戶端模板可以快速搭建基於函式計算的小程式應用,這些特點使得函式計算成為支撐小程式很好的選擇。