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網關和函數工作流的連接,然後在函數中調用內容檢測服務的鑑黃接口,那麼函數就像一個粘合劑一樣將兩個雲服務連接在一起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章