前言
在過去“5分鐘Serverless實踐”系列文章中,我們介紹瞭如何構建無服務器API和Web應用,從本質上來說,它們都屬於基於APIG觸發器對外提供一個無服務器API的場景。現在本文將介紹一種新的設計模式:基於事件的實時數據處理。爲了更形象地描述,我們以圖片分類爲例,先介紹通過APIG觸發器如何構建一個圖片分類的Web應用,再介紹通過OBS觸發器如何構造一個實時的圖片分類系統。
Serverless優勢
相比於傳統的架構,無服務器架構具有如下優點:
1. 無需關注任何服務器,只需關注核心業務邏輯,提高開發和運維效率;
2. 事件觸發,靈活擴展;
3. 函數運行隨業務量彈性伸縮,按需付費,執行才計費,對於負載波峯波谷非常明顯的場景可以減少大量成本;
4. 通過簡單的配置即可連通函數工作流和其它各雲服務,甚至雲服務和雲服務。
構建無服務器的圖片分類Web應用
像以往的文章介紹的那樣,serverless很擅長構建一個Web應用,如下圖,該系統會將用戶上傳的圖片進行分類,並打上類別標籤。
我們可以通過函數工作流服務來快速構建這個系統,並且完全無需關注服務器,且彈性伸縮運行、按需計費,如圖:
創建函數,在函數中調用華爲雲圖片分析服務的圖片標籤接口,給圖片打標籤分類。再爲該函數配置一個APIG觸發器,這樣便可以對外提供一個圖片分類的API,最後部署前端頁面到OBS,託管爲靜態網站,從而構建出一個完整的圖片分類的無服務器Web應用。頁面調用API,他會自動觸發函數執行,而開發者編寫的函數只需實現接收到圖片之後如何處理圖片的邏輯即可,最後將結果返回給頁面。
接下來,我們將介紹如何完整地將此無服務器Web應用構建出來。
1. 準備工作
進入華爲雲圖片檢測服務,申請開通圖片檢測服務的圖片標籤功能,成功申請後便可以調用圖片標籤接口了。
2. 構建後端程序
進入函數工作流服務,選擇模板“圖片打標籤Web後端”,創建函數。函數創建完成之後,爲其配置具有IAM訪問權限的委託,因爲本函數代碼中獲取用戶的ak、sk需要擁有訪問IAM的權限。
創建成功後,API的URL可以在函數詳情頁面的“觸發器”欄看到:
至此,我們就成功地構建了一個無服務器的圖片分類API。
3. 搭建前端頁面
爲了更方便地搭建前端頁面,我們提供了對應的函數模板實現快速構建前端頁面。選擇模板“圖片打標籤Web前端”,創建函數,其中自定義數據REST_API中設置上一步創建的API URL,創建完成後,函數詳情頁面的“觸發器”欄中的URL就是頁面的瀏覽器訪問地址。
至此,我們就成功地構建了一個無服務器的圖片分類Web應用。接下來,我們將介紹另一種場景。
構建事件觸發的實時圖片分類系統
本文接下來將具體介紹事件觸發的實時數據處理場景,考慮下面場景,用戶上傳圖片到OBS桶中,需要自動執行圖片分類,並按照類別轉儲到另一個桶的不同目錄下。比如下面這個例子,上傳一張企鵝圖片到一個桶,圖片就會自動轉儲到另一個桶對應的penguins、seabird、bird目錄下。
我們可以通過函數工作流服務來快速構建這個系統,並且完全無需關注服務器,且彈性伸縮運行、按需計費,如圖:
創建函數,在函數中調用華爲雲圖片分析服務的圖片標籤接口,給圖片打標籤分類。再爲該函數配置一個OBS觸發器,監控桶的POST事件,當向該桶上傳一個文件時,便會自動觸發函數執行,從而實現一個基於事件觸發的無服務器系統。用戶向桶中上傳一張圖片,它會自動觸發函數執行,而開發者編寫的函數只需實現從桶中下載圖片並分類轉儲的邏輯即可。
接下來,我們將介紹如何完整地將此事件觸發的圖片分類系統構建出來。
準備工作
1. 申請開通圖像識別服務“圖像標籤”功能
2. 進入對象存儲服務(OBS)服務,創建兩個桶,一個用於接收待分類的圖片(source),一個用於存儲分類後的圖片(result),並將桶的“桶策略”設爲公共讀寫。
創建函數
1. 進入函數工作流服務創建函數頁面,選擇“圖片實時分類(按圖片類型)”函數模板,該模板已爲您提供本案例的代碼。
2. 設置環境變量result_bucket爲存儲分類後圖片的桶的名稱(result)
3. 配置OBS觸發器,桶選擇接受待分類圖片的桶(source),事件選擇post。當向桶中上傳新圖片時,會觸發函數執行。
4. 點擊創建,創建函數和觸發器。
配置函數
1. 進入函數詳情頁面,進入“配置”標籤,給函數設置一個具有訪問IAM和OBS權限的委託,使函數能夠獲取到用戶的AK、SK,並訪問OBS桶資源。
2. 保存配置
測試函數
1. 向接收待分類圖片的桶(source)中上傳一張圖片
2. 查看存儲分類結果的桶(result)中的文件,會發現圖片存儲到了對應類別的目錄下。
歡迎體驗函數工作流,0負擔享受編程的樂趣