1. 程式人生 > >5分鐘Serverless實踐 | 構建無伺服器圖片鑑黃Web應用

5分鐘Serverless實踐 | 構建無伺服器圖片鑑黃Web應用

Serverless是什麼

Serverless中文譯為“無伺服器”,最早可以追溯到2012年Ken Fromm發表的《Why The Future Of Software And Apps Is Serverless》,他描述了一種場景,從使用者自己維護的物理機,到IaaS,再到PaaS,計算模式的轉變並不會停止,在雲端計算基礎設施成熟的情況下應用程式可以不需要考慮伺服器的存在,無伺服器計算讓開發者可以在不考慮伺服器的情況下構建並執行應用程式和服務。

再到2016年,Mike Roberts在Martin Fowler的部落格《Serverless Architectures》中,將Serverless架構分為Backend as a Service(BaaS)和Functions as a Service(FaaS)。

●BaaS也就是後端即服務,即應用架構由大量三方雲服務和API來組織,使應用中關於伺服器的邏輯和狀態都由服務提供方來管理。比如典型的單頁應用(SPA)和移動APP這些富客戶端應用,前後端的互動主要以Rest API呼叫為主,只需要呼叫服務提供方的API即可完成相應的功能,比如身份驗證、資料訪問等。

●FaaS可以被稱為函式即服務,開發者可以直接將服務側業務邏輯程式碼部署、執行在第三方提供的無狀態計算容器中,開發者只需編寫業務程式碼即可,無需關注伺服器,且程式碼的執行是由事件觸發的。

一個Serverless的應用就是這樣一個將BaaS和FaaS融合在一起的應用,使用者關注於應用的業務邏輯程式碼,以函式為粒度將其執行在FaaS平臺上,並和BaaS三方服務整合在一起,最後搭建一個完整的系統,整個過程完全無需關注伺服器。

Serverless的優勢

1.無需管理伺服器

開發者只需關注應用的業務邏輯,而無需關注伺服器的存在,降低業務接入門檻,快速上線,提高開發和運維效率。

2.靈活擴充套件、按需付費

據Gartner和麥肯錫統計,全球的伺服器CPU平均利用率只有6%到12%,大量應用的資源利用率是非常低下的,特別是對於負載波峰波谷明顯的應用。而Serverless可以根據負載彈性伸縮,並按需付費,根據實際執行消耗的資源計費,且業務是以函式的粒度執行的,可以充分利用碎片資源,極大地減小運作成本。

函式工作流FunctionGraph

上面簡單介紹了Serverless架構以及其優點之後,我們再介紹一下華為雲的函式工作流(FunctionGraph,FGS)

函式工作流(FunctionGraph,FGS)是一項基於事件驅動的函式託管計算服務,託管函式具備以毫秒級彈性伸縮、免運維、高可靠的方式執行。通過函式工作流,開發者無需配置和管理伺服器,只需關注業務邏輯,編寫函式程式碼,以無伺服器的方式構建應用,便能開發出一個彈性高可用的後端系統,並按實際執行消耗的資源計費。極大地提高了開發和運維效率,減小了運作成本。

構建無伺服器圖片鑑黃web應用

為了讓大家對Serverless架構和函式工作流有更直觀的瞭解,接下來我們將介紹如何通過函式工作流快速構建一個完整的無伺服器的圖片鑑黃Web應用,如下圖,該應用接收使用者上傳的圖片,並對圖片進行分析,判斷是否為色情圖片。點選此處可免費體驗Demo

試想,如果我們通過傳統的模式開發此應用,需要如何開發?

即使是基於現在的雲平臺,我們也仍需要購買雲伺服器,關注其規格、映象、網路等各指標的選型和運維,然後在開發過程中可能還需要考慮與其他雲服務的整合使用問題,使程式碼中耦合大量非業務程式碼,並且伺服器等資源也並非是按需的,可能會造成大量多餘的費用。

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

建立函式,在函式中呼叫華為雲內容檢測服務提供的圖片鑑黃介面,實現圖片鑑黃功能,併為該函式配置一個APIG觸發器,對外提供圖片鑑黃的API,從而構建出一個完整的圖片鑑黃無伺服器後端。然後將Web頁面的靜態資源部署在物件儲存服務(OBS)中,使用者可以直接從OBS訪問前端頁面。使用者上傳圖片時,頁面呼叫前面構建的圖片鑑黃API,他會自動觸發函式執行,而開發者編寫的函式只需實現接收到圖片之後如何處理圖片的邏輯(呼叫內容檢測服務服務)即可,最後將結果返回給前端頁面。至此,我們就構建了一個完整的無伺服器圖片鑑黃Web應用。

現在,我們將介紹如何端到端地將此無伺服器應用構建出來。

後端API搭建

進入函式工作流服務函式建立頁面,選擇圖片鑑黃模板。該模板已經提供了本應用中函式的程式碼,按照程式碼註釋中的指示建立函式之後,就成功搭建了本應用的後端系統,為函式所建立的APIG觸發器會提供一個呼叫該後端函式的HTTP(s) API,供外部系統(如前端頁面)呼叫。

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

前端頁面搭建

前端的展示形式有很多,這裡我們提供了一份前端程式碼包供大家學習參考,可以將此程式碼包部署到OBS上,快速構建一個單頁Web應用(SPA)。然後呼叫上一步後端提供的介面,連通後端系統,完成整個無服務圖片鑑黃Web應用的構建。

1.下載程式碼包並解壓

2.為了讓前端頁面訪問您的函式,需要配置頁面Rest請求的URL。修改程式碼包裡/functiongraph/assets/config/apis.json檔案中checkImage的值,更改為上一步“後端API搭建”中建立的APIG觸發器URL,即您的後端API的訪問地址。

3.通過OBS託管前端頁面。進入物件儲存服務,建立一個OBS桶,將程式包檔案逐個上傳至該桶中。因為檔案比較多,我們建議您下載 OBS Browser ,使用OBS Browser前,請先獲取訪問金鑰。

4.啟動網站。進入桶的靜態網站託管介面,單擊靜態網站託管,配置桶的預設首頁為index.html

配置完成後,您就已經成功搭建了本案例的前端系統。您可以通過obs提供的訪問地址訪問您的前端頁面,檢測圖片時,頁面會發送請求到您的函式。

總結

通過上面端到端構建一個完整的無伺服器圖片鑑黃Web應用,我們可以發現Serverless的架構具有如下優點:

1.無需關注任何伺服器,只需關注核心業務邏輯,5分鐘快速構建後端系統並上線,極大地提高了開發效率。

2.函式執行隨業務量彈性伸縮,按需付費,當建立的函式沒有執行時,不計費。

3.可以通過簡單的配置連通函式工作流和其它雲服務,甚至雲服務和雲服務,比如本例中只需建立一個APIG觸發器便可完成API閘道器和函式工作流的連線,然後在函式中呼叫內容檢測服務的鑑黃介面,那麼函式就像一個粘合劑一樣將兩個雲服務連線在一起。