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