背景介紹
??互聯(lián)網(wǎng)時代,各類app,小程序為人們的生活,辦公,學習,休閑,娛樂提供著便利,在今年8月31日中國互聯(lián)網(wǎng)絡(luò)信息中心發(fā)布的第50次《中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》中顯示,截至2022年6月我國網(wǎng)民規(guī)模為10.51億,網(wǎng)民人均每周上網(wǎng)時長為29.5個小時。由此可見互聯(lián)網(wǎng)市場的巨大。
??軟件應(yīng)用提供商不斷推出各種滿足人們需求的應(yīng)用,以搶占市場先機,時有大火的應(yīng)用進入人們的新寵,不知哪一個將成為下一匹殺出的黑馬。而對于一個“合格”的應(yīng)用來說,穩(wěn)定性和可用性是需要達到的最基礎(chǔ)的要求。對于部署在服務(wù)器上的應(yīng)用,如何正常運行以為客戶提供穩(wěn)定的服務(wù),近些年出現(xiàn)諸如負載均衡,微服務(wù)等計算機技術(shù),這些技術(shù)對于訪問量比較穩(wěn)定或者浮動范圍不是特別大的應(yīng)用來說能夠達到很好的效果。但是有些業(yè)務(wù)場景,應(yīng)用的訪問量并不能如愿的維持穩(wěn)定,比如說電商網(wǎng)站在促銷活動期間的訪問量可能是平時的10倍甚至幾十倍,上百倍。如果為了應(yīng)對短期的井噴式訪問而增加應(yīng)用服務(wù)部署的服務(wù)器數(shù)量,是一種不會出錯的解決辦法,但對于大部分時間都處于正常訪問量而少部分時間是激增訪問量的應(yīng)用來說,這種做法無疑是一種浪費,對于應(yīng)用提供商也是不小的成本投入。另外,對于井噴式訪問量的估算也是一項比較難以保證效果的工作,估算超過實際訪問量是一種資源的浪費(提前按估算量準備的服務(wù)器,以及部署和運維應(yīng)用的工作投入),估算少于實際訪問又會導致服務(wù)器超負荷運行,應(yīng)用響應(yīng)延時,甚至宕機,從而影響客戶的使用感受。
??那么有沒有一種服務(wù)能否實現(xiàn)讓軟件應(yīng)用運行所需的資源,像用水用電一樣按需使用,按需付費呢?這樣,軟件應(yīng)用提供商不用再為正常訪問量時閑置的服務(wù)器買單,又會在訪問量爆發(fā)性增長時輕松應(yīng)對。
函數(shù)工作流 FunctionGraph
??函數(shù)工作流(FunctionGraph)是一項基于事件驅(qū)動的函數(shù)托管計算服務(wù)。通過函數(shù)工作流,只需編寫業(yè)務(wù)函數(shù)代碼并設(shè)置運行的條件,無需配置和管理服務(wù)器等基礎(chǔ)設(shè)施,函數(shù)以彈性、免運維、高可靠的方式運行。此外,按函數(shù)實際執(zhí)行資源計費,不執(zhí)行不產(chǎn)生費用。
FunctionGraph具有以下優(yōu)勢:
- 無服務(wù)器管理
??自動運行用戶代碼,用戶無需配置或管理服務(wù)器,專注于業(yè)務(wù)創(chuàng)新。
- 高彈性
??根據(jù)請求的并發(fā)數(shù)量自動調(diào)度資源運行函數(shù),實現(xiàn)透明、準確和實時的伸縮,應(yīng)付業(yè)務(wù)峰值的訪問。
??用戶無需關(guān)心峰值和空閑時段的資源需要申請多少資源,系統(tǒng)根據(jù)請求的數(shù)量自動擴容/縮容。自動負載均衡將請求分發(fā)到函數(shù)運行實例。
- 事件觸發(fā)
??通過事件觸發(fā)機制,集成多種云服務(wù)(SMN,OBS…),滿足不同場景需求,獲得高效的開發(fā)體驗。
??與云日志服務(wù)、云監(jiān)控服務(wù)對接,無需任何配置,即可查詢函數(shù)日志和監(jiān)控告警信息,快速排查故障。
- 高可用
??函數(shù)運行實例出現(xiàn)異常,系統(tǒng)會啟動新的實例處理后續(xù)的請求,故障函數(shù)實例占用資源將會回收使用。
- 按量計費
??根據(jù)代碼的調(diào)用次數(shù)和運行時長計費,代碼未運行時不產(chǎn)生費用。
構(gòu)建無服務(wù)圖片壓縮應(yīng)用
??為方便讀者更近一步了解函數(shù)工作流 FunctionGraph,這里提供一個通過函數(shù)工作流快速構(gòu)建圖片壓縮應(yīng)用的實操體驗,幫您快速掌握FunctionGraph的使用,并對所涉及的配置功能有清晰認識。
架構(gòu)圖說明:
在OBS服務(wù)中,創(chuàng)建兩個桶。
創(chuàng)建函數(shù),設(shè)置OBS觸發(fā)器。
用戶向其中一個桶上傳圖片。
觸發(fā)函數(shù)執(zhí)行,對圖片進行壓縮處理。
函數(shù)將處理后的圖片上傳到指定桶中。
準備工作
- []()創(chuàng)建OBS桶
??創(chuàng)建兩個OBS桶,登錄[對象存儲服務(wù)控制臺](https://storage.huaweicloud.com/obs/" \\o " ),按下圖創(chuàng)建桶,“your-bucket-input”用于上傳需要處理的圖像,“your-bucket-output”用于存儲處理后的圖像。
- []()創(chuàng)建委托
??由于華為云各服務(wù)之間存在業(yè)務(wù)交互關(guān)系,一些云服務(wù)需要與其他云服務(wù)協(xié)同工作,需要您創(chuàng)建云服務(wù)委托,將操作權(quán)限委托給該服務(wù),讓該服務(wù)以您的身份使用其他云服務(wù),代替您進行一些資源運維工作。
??本實踐中,在創(chuàng)建函數(shù)前,您需要為函數(shù)設(shè)置擁有OBS訪問權(quán)限的委托,登錄[統(tǒng)一身份認證服務(wù)控制臺](https://console.huaweicloud.com/iam/" \\o " ),按下圖創(chuàng)建委托(至少擁有對象存儲服務(wù)的權(quán)限:OBS Administrator)。
構(gòu)建程序
本例提供了實現(xiàn)圖片壓縮功能的程序包,用戶可以下載詳情請參照示例代碼、學習使用。
創(chuàng)建函數(shù)
登錄函數(shù)工作流控制臺,創(chuàng)建函數(shù),函數(shù)名稱自定義,委托選擇創(chuàng)建委托中創(chuàng)建的委托,運行時選擇“Python3.6”。
輸入代碼
下載[示例代碼](https://codelabs.developer.huaweicloud.com/codelabs/samples/f09ebb2c80664f62bc424b22d2e95c2e/view-code/91982ead208c11ea8b68fa163e6e3ea0" \\o " ),粘貼至函數(shù)的index.py文件中,如圖所示。
添加依賴包
為函數(shù)添加pillow-7.1.2 依賴包,pillow-7.1.2 依賴包是Python圖像處理庫,支持多種文件格式,并提供了強大的圖像處理和圖形處理能力。
配置函數(shù)
常規(guī)設(shè)置
內(nèi)存選擇:“256”
超時時間輸入:“40”
環(huán)境變量
鍵obs_output_bucket: index.py文件中定義的存放輸出圖片的OBS桶參數(shù),值your-bucket-output: 創(chuàng)建OBS桶中創(chuàng)建的存放輸出圖片的OBS桶;
鍵obs_server: index.py文件中定義的存放輸出圖片的OBS桶的地址參數(shù),值obs.region.myhuaweicloud.com。
添加事件源
OBS桶及函數(shù)創(chuàng)建以后,可以為函數(shù)添加事件源,添加OBS事件源是通過創(chuàng)建OBS觸發(fā)器實現(xiàn)的。當用戶將一張照片上傳到存儲桶時,OBS存儲桶調(diào)用FunctionGraph函數(shù),實現(xiàn)讀取圖像和創(chuàng)建照片縮略圖。OBS對象操作觸發(fā)函數(shù)的過程請參考[使用](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0205.html" \\o " )[OBS](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0205.html" \\o " )[觸發(fā)器](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0205.html" \\o " )。
如下圖所示,桶選擇創(chuàng)建OBS桶中創(chuàng)建的“your-bucket-input”桶。事件選擇“Post”、“Put”。
圖片處理
當圖片上傳或更新至your-bucket-input桶時,會生成事件,觸發(fā)函數(shù)運行,將上傳圖片壓縮,保存在your-bucket-output中。
上傳圖片生成事件
登錄[對象存儲服務(wù)控制臺](https://storage.huaweicloud.com/obs/" \\o " ),進入your-bucket-input桶對象界面,上傳image.jpg圖片,如下圖所示。
可以看到原始圖片image.jpg大小超過28KB。
觸發(fā)函數(shù)執(zhí)行
上傳圖片至your-bucket-input桶,OBS生成事件觸發(fā)函數(shù)運行,將圖片壓縮,壓縮后的圖片存放在your-bucket-output桶中??梢栽诤瘮?shù)詳情頁日志頁簽查看函數(shù)運行日志,如下圖所示。
圖片壓縮驗證
進入your-bucket-output桶對象界面,可以看到壓縮后的圖片image-thumbnail.jpg,圖片大小小于8KB,實現(xiàn)了對圖片的壓縮,如下圖所示。
總結(jié)
通過上面端到端構(gòu)建一個完整的圖片壓縮應(yīng)用,我們可以發(fā)現(xiàn)FunctionGraph的架構(gòu)具有如下優(yōu)點:
1.無需關(guān)注任何服務(wù)器,只需關(guān)注核心業(yè)務(wù)邏輯,5分鐘快速構(gòu)建后端系統(tǒng)并上線,極大地提高了開發(fā)效率。
2.函數(shù)運行隨業(yè)務(wù)量彈性伸縮,按需付費,當創(chuàng)建的函數(shù)沒有執(zhí)行時,不計費。
3.可以通過簡單的配置連通函數(shù)工作流和其它云服務(wù),甚至云服務(wù)和云服務(wù),比如本例中只需創(chuàng)建一個OBS觸發(fā)器便可完成OBS和函數(shù)工作流的連接,然后在函數(shù)中對圖片進行壓縮,那么函數(shù)就像一個粘合劑一樣將兩個云服務(wù)連接在一起。
審核編輯 黃昊宇
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4341瀏覽量
62800 -
工作流
+關(guān)注
關(guān)注
0文章
44瀏覽量
12435
發(fā)布評論請先 登錄
相關(guān)推薦
評論