在過去「5分鐘Serverless實踐」系列文章中,咱們介紹瞭如何構建無服務器API和Web應用,從本質上來講,它們都屬於基於APIG觸發器對外提供一個無服務器API的場景。如今本文將介紹一種新的設計模式:基於事件的實時數據處理。爲了更形象地描述,咱們以圖片分類爲例,先介紹經過APIG觸發器如何構建一個圖片分類的Web應用,再介紹經過OBS觸發器如何構造一個實時的圖片分類系統。前端
相比於傳統的架構,無服務器架構具備以下優勢:編程
1. 無需關注任何服務器,只需關注核心業務邏輯,提升開發和運維效率;後端
2. 事件觸發,靈活擴展;設計模式
3. 函數運行隨業務量彈性伸縮,按需付費,執行才計費,對於負載波峯波谷很是明顯的場景能夠減小大量成本;瀏覽器
4. 經過簡單的配置便可連通函數工做流和其它各雲服務,甚至雲服務和雲服務;服務器
像以往的文章介紹的那樣,serverless很擅長構建一個Web應用,以下圖,該系統會將用戶上傳的圖片進行分類,並打上類別標籤。架構
咱們能夠經過函數工做流服務來快速構建這個系統,而且徹底無需關注服務器,且彈性伸縮運行、按需計費,如圖:less
建立函數,在函數中調用華爲雲圖片分析服務的圖片標籤接口,給圖片打標籤分類。再爲該函數配置一個APIG觸發器,這樣即可以對外提供一個圖片分類的API,最後部署前端頁面到OBS,託管爲靜態網站,從而構建出一個完整的圖片分類的無服務器Web應用。頁面調用API,他會自動觸發函數執行,而開發者編寫的函數只需實現接收到圖片以後如何處理圖片的邏輯便可,最後將結果返回給頁面。運維
接下來,咱們將介紹如何完整地將此無服務器Web應用構建出來。ide
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負擔享受編程的樂趣