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

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

dem 結果 資源利用率 url 獲取 點擊 圖片 代碼包 image

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

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