1. 程式人生 > >5分鐘Serverless實踐:構建無伺服器的圖片分類系統

5分鐘Serverless實踐:構建無伺服器的圖片分類系統

前言

在過去“5分鐘Serverless實踐”系列文章中,我們介紹瞭如何構建無伺服器API和Web應用,從本質上來說,它們都屬於基於APIG觸發器對外提供一個無伺服器API的場景。現在本文將介紹一種新的設計模式:基於事件的實時資料處理。為了更形象地描述,我們以圖片分類為例,先介紹通過APIG觸發器如何構建一個圖片分類的Web應用,再介紹通過OBS觸發器如何構造一個實時的圖片分類系統。

Serverless優勢

相比於傳統的架構,無伺服器架構具有如下優點:

1. 無需關注任何伺服器,只需關注核心業務邏輯,提高開發和運維效率;

2.  事件觸發,靈活擴充套件;

3. 函式執行隨業務量彈性伸縮,按需付費,執行才計費,對於負載波峰波谷非常明顯的場景可以減少大量成本;

4. 通過簡單的配置即可連通函式工作流和其它各雲服務,甚至雲服務和雲服務;

構建無伺服器的圖片分類Web應用

像以往的文章介紹的那樣,serverless很擅長構建一個Web應用,如下圖,該系統會將使用者上傳的圖片進行分類,並打上類別標籤。

demo演示1.gif

我們可以通過函式工作流服務來快速構建這個系統,並且完全無需關注伺服器,且彈性伸縮執行、按需計費,如圖:

架構圖1.PNG

建立函式,在函式中呼叫華為雲圖片分析服務的圖片標籤介面,給圖片打標籤分類。再為該函式配置一個APIG觸發器,這樣便可以對外提供一個圖片分類的API,最後部署前端頁面到OBS,託管為靜態網站,從而構建出一個完整的圖片分類的無伺服器Web應用。頁面呼叫API,他會自動觸發函式執行,而開發者編寫的函式只需實現接收到圖片之後如何處理圖片的邏輯即可,最後將結果返回給頁面。

接下來,我們將介紹如何完整地將此無伺服器Web應用構建出來。

1. 準備工作

進入華為雲圖片檢測服務,申請開通圖片檢測服務的圖片標籤功能,成功申請後便可以呼叫圖片標籤介面了。

2. 構建後端程式

進入函式工作流服務,選擇模板“圖片打標籤Web後端”,建立函式。函式建立完成之後,為其配置具有IAM訪問許可權的委託,因為本函式程式碼中獲取使用者的ak、sk需要擁有訪問IAM的許可權。

案例一配置.gif

建立成功後,API的URL可以在函式詳情頁面的“觸發器”欄看到:

案例一trigger_url.PNG

至此,我們就成功地構建了一個無伺服器的圖片分類API。

3. 搭建前端頁面

為了更方便地搭建前端頁面,我們提供了對應的函式模板實現快速構建前端頁面。選擇模板“圖片打標籤Web前端”,建立函式,其中自定義資料REST_API中設定上一步建立的API URL,建立完成後,函式詳情頁面的“觸發器”欄中的URL就是頁面的瀏覽器訪問地址。

至此,我們就成功地構建了一個無伺服器的圖片分類Web應用。接下來,我們將介紹另一種場景。

構建事件觸發的實時圖片分類系統

本文接下來將具體介紹事件觸發的實時資料處理場景,考慮下面場景,使用者上傳圖片到OBS桶中,需要自動執行圖片分類,並按照類別轉儲到另一個桶的不同目錄下。比如下面這個例子,上傳一張企鵝圖片到一個桶,圖片就會自動轉儲到另一個桶對應的penguins、seabird、bird目錄下。

案例二demo.gif

我們可以通過函式工作流服務來快速構建這個系統,並且完全無需關注伺服器,且彈性伸縮執行、按需計費,如圖:

架構圖2.PNG

建立函式,在函式中呼叫華為雲圖片分析服務的圖片標籤介面,給圖片打標籤分類。再為該函式配置一個OBS觸發器,監控桶的POST事件,當向該桶上傳一個檔案時,便會自動觸發函式執行,從而實現一個基於事件觸發的無伺服器系統。使用者向桶中上傳一張圖片,它會自動觸發函式執行,而開發者編寫的函式只需實現從桶中下載圖片並分類轉儲的邏輯即可。

接下來,我們將介紹如何完整地將此事件觸發的圖片分類系統構建出來。

準備工

1. 申請開通影象識別服務“影象標籤”功能

案例二build_1.gif

2. 進入物件儲存服務(OBS)服務,建立兩個桶,一個用於接收待分類的圖片(source),一個用於儲存分類後的圖片(result),並將桶的“桶策略”設為公共讀寫。

建立函式

1. 進入函式工作流服務建立函式頁面,選擇“圖片實時分類(按圖片型別)”函式模板,該模板已為您提供本案例的程式碼。 

2. 設定環境變數result_bucket為儲存分類後圖片的桶的名稱(result)

3. 配置OBS觸發器,桶選擇接受待分類圖片的桶(source),事件選擇post。當向桶中上傳新圖片時,會觸發函式執行。

4. 點選建立,建立函式和觸發器。

案例二build_2.gif

配置函式

1. 進入函式詳情頁面,進入“配置”標籤,給函式設定一個具有訪問IAM和OBS許可權的委託,使函式能夠獲取到使用者的AK、SK,並訪問OBS桶資源。

2. 儲存配置

案例二build_3.gif

測試函式

1. 向接收待分類圖片的桶(source)中上傳一張圖片

2. 檢視儲存分類結果的桶(result)中的檔案,會發現圖片儲存到了對應類別的目錄下。

更多精彩:

logo-paper.png

函式工作流,0負擔享受程式設計的樂趣