真正的按需計費|函式工作流 FunctionGraph實戰,5分鐘搭建圖片壓縮應用

科技怪授發表於2022-11-23


背景介紹

網際網路時代,各類 app ,小程式為人們的生活,辦公,學習,休閒,娛樂提供著便利,在今年 8 31 日中國網際網路絡資訊中心釋出的第 50 次《中國網際網路絡發展狀況統計報告》中顯示,截至 2022 6 月我國網民規模為 10.51 億,網民人均每週上網時長為 29.5 個小時。由此可見網際網路市場的巨大。

軟體應用提供商不斷推出各種滿足人們需求的應用,以搶佔市場先機,時有大火的應用進入人們的新寵,不知哪一個將成為下一匹殺出的黑馬。而對於一個 “合格”的應用來說,穩定性和可用性是需要達到的最基礎的要求。對於部署在伺服器上的應用,如何正常執行以為客戶提供穩定的服務,近些年出現諸如負載均衡,微服務等計算機技術,這些技術對於訪問量比較穩定或者浮動範圍不是特別大的應用來說能夠達到很好的效果。但是有些業務場景,應用的訪問量並不能如願的維持穩定,比如說電商網站在促銷活動期間的訪問量可能是平時的 1 0 倍甚至幾十倍,上百倍。如果為了應對短期的井噴式訪問而增加應用服務部署的伺服器數量,是一種不會出錯的解決辦法,但對於大部分時間都處於正常訪問量而少部分時間是激增訪問量的應用來說,這種做法無疑是一種浪費,對於應用提供商也是不小的成本投入。另外,對於井噴式訪問量的估算也是一項比較難以保證效果的工作,估算超過實際訪問量是一種資源的浪費(提前按估算量準備的伺服器,以及部署和運維應用的工作投入),估算少於實際訪問又會導致伺服器超負荷執行,應用響應延時,甚至當機,從而影響客戶的使用感受。

 

那麼有沒有一種服務能否實現讓軟體應用執行所需的資源,像用水用電一樣按需使用,按需付費呢?這樣,軟體應用提供商不用再為正常訪問量時閒置的伺服器買單,又會在訪問量爆發性增長時輕鬆應對。

函式工作流 FunctionGraph

函式工作流( FunctionGraph )是一項基於事件驅動的函式託管計算服務。透過函式工作流,只需編寫業務函式程式碼並設定執行的條件,無需配置和管理伺服器等基礎設施,函式以彈性、免運維、高可靠的方式執行。此外,按函式實際執行資源計費,不執行不產生費用。

FunctionGraph 具有以下優勢:

無伺服器管理

自動執行使用者程式碼,使用者無需配置或管理伺服器,專注於業務創新。

高彈性

根據請求的併發數量自動排程資源執行函式,實現透明、準確和實時的伸縮,應付業務峰值的訪問。

使用者無需關心峰值和空閒時段的資源需要申請多少資源,系統根據請求的數量自動擴容/ 縮容。自動負載均衡將請求分發到函式執行例項。

事件觸發

透過事件觸發機制,整合多種雲服務(SMN OBS… ),滿足不同場景需求,獲得高效的開發體驗。

與雲日誌服務、雲監控服務對接,無需任何配置,即可查詢函式日誌和監控告警資訊,快速排查故障。

 

高可用

函式執行例項出現異常,系統會啟動新的例項處理後續的請求,故障函式例項佔用資源將會回收使用。

按量計費

根據程式碼的呼叫次數和執行時長計費,程式碼未執行時不產生費用。

 

構建無服務圖片壓縮應用

為方便讀者更近一步瞭解函式工作流 FunctionGraph ,這裡提供一個透過函式工作流快速構建圖片壓縮應用的 實操體驗 ,幫您快速掌握 FunctionGraph 的使用,並對所涉及的配置功能有清晰認識。

 

架構圖說明:

OBS 服務中,建立兩個桶。

建立函式,設定 OBS 觸發器。

使用者向其中一個桶上傳圖片。

觸發函式執行,對圖片進行壓縮處理。

函式將處理後的圖片上傳到指定桶中。

3.1 

1.  建立 OBS

建立兩個 OBS 桶,登入 物件儲存服務控制檯 ,按下圖建立桶, your-bucket-input ”用於上傳需要處理的影像,“ your-bucket-output ”用於儲存處理後的影像。

 

2.  建立委託

由於華為雲各服務之間存在業務互動關係,一些雲服務需要與其他雲服務協同工作,需要您建立雲服務委託,將操作許可權委託給該服務,讓該服務以您的身份使用其他雲服務,代替您進行一些資源運維工作。

本實踐 中,在建立函式前,您需要為函式設定擁有 OBS 訪問許可權的委託,登入 統一身份認證服務控制檯 ,按下圖建立委託(至少擁有物件儲存服務的許可權: OBS Administrator )。

 

3.2 

本例提供了實現圖片壓縮功能的程式包,使用者可以下載 詳情請參照 示例程式碼 、學習使用。

建立函式

登入 函式工作流控制檯 ,建立函式,函式名稱自定義,委託選擇 中建立的委託,執行時選擇 “Python3.6”

 

輸入程式碼

下載 示例程式碼 ,貼上至函式的index.py 檔案中,如圖所示。

 

 

新增依賴包

為函式新增pillow-7.1.2 依賴包, pillow-7.1.2 依賴包是 Python 影像處理庫,支援多種檔案格式,並提供了強大的影像處理和圖形處理能力。

 

配置函式

常規設定

記憶體選擇: 256

超時時間輸入: 40

 

環境變數

obs_output_bucket: index.py 檔案中定義的存放輸出圖片的 OBS 桶引數,值 your-bucket-output: 中建立的存放輸出圖片的 OBS ;

obs_server: index.py 檔案中定義的存放輸出圖片的 OBS 桶的地址引數,值 obs.region.myhuaweicloud.com

 

 

3.3 

OBS 桶及函式建立以後,可以為函式新增事件源,新增 OBS 事件源是透過建立 OBS 觸發器實現的。當使用者將一張照片上傳到儲存桶時, OBS 儲存桶呼叫 FunctionGraph 函式,實現讀取影像和建立照片縮圖。 OBS 物件操作觸發函式的過程請參考 使用OBS 觸發器

如下圖所示,桶選擇 中建立的 “your-bucket-input” 桶。事件選擇 “Post” “Put”

 

 

3.4 

當圖片上傳或更新至your-bucket-input 桶時,會生成事件,觸發函式執行,將上傳圖片壓縮,儲存在 your-bucket-output 中。

上傳圖片生成事件

登入 物件儲存服務控制檯 ,進入your-bucket-input 桶物件介面,上傳 image.jpg 圖片,如下圖所示。

 

可以看到原始圖片image.jpg 大小超過 28KB

觸發函式執行

上傳圖片至your-bucket-input 桶, OBS 生成事件觸發函式執行,將圖片壓縮,壓縮後的圖片存放在 your-bucket-output 桶中。可以在函式詳情頁日誌頁籤檢視函式執行日誌,如下圖所示。

 

圖片壓縮驗證

進入your-bucket-output 桶物件介面,可以看到壓縮後的圖片 image-thumbnail.jpg ,圖片大小小於 8KB ,實現了對圖片的壓縮,如下圖所示。

 

總結

透過上面端到端構建一個完整的圖片壓縮應用,我們可以發現 FunctionGraph 的架構具有如下優點:

 

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

 

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

 

3. 可以透過簡單的配置連通函式工作流和其它雲服務,甚至雲服務和雲服務,比如本例中只需建立一個 OBS 觸發器便可完成 OBS 和函式工作流的連線,然後在函式中對圖片進行壓縮,那麼函式就像一個粘合劑一樣將兩個雲服務連線在一起。

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70022614/viewspace-2924770/,如需轉載,請註明出處,否則將追究法律責任。

相關文章