摘要: Serverless概念是近年來特別火的一個技術(shù)概念,基于這種架構(gòu)能構(gòu)建出很多應(yīng)用場景,適合各行各業(yè),只要對輕計算、高彈性、無狀態(tài)等場景有訴求的用戶都可以通過本文來普及一些基礎(chǔ)概念,看看這些場景是否對用戶有一些指導意義。
點此查看原文:http://click.aliyun.com/m/40926/
Serverless概念是近年來特別火的一個技術(shù)概念。基于這種架構(gòu)能構(gòu)建出很多應(yīng)用場景,適用于各行各業(yè)。只要是對輕計算、高彈性、無狀態(tài)等場景有訴求,您都可以通過本文來熟悉一些基礎(chǔ)概念,并從相關(guān)場景中獲得啟發(fā)。
關(guān)于Serverless架構(gòu)的前世今生,網(wǎng)上比較流行一張描述人類形態(tài)發(fā)展史的網(wǎng)圖。從爬行猿人到蹲著的類猿人,再到直立人類,最后到使用工具的新興人類。從四只腳爬行到直立行走,釋放了雙手,從釋放雙手到開始使用工具。
人類的進化每一次都伴隨著生產(chǎn)效率的提升。同理,在整個IT計算的發(fā)展里程,也是逐步提高生產(chǎn)效率的里程,具體演進圖如下所示:
從大型物理機到通過虛擬化技術(shù)把物理機虛擬成單個的VM資源,從虛擬化集群到把集群搬到云計算上只做簡單運維,再到把每一個VM按照運行空間最小化切分成更細的Docker容器,再從Doceker容器變成干脆不用管理任何運行環(huán)境的Serverless服務(wù),即僅僅需要編寫核心代碼即可。
代際的技術(shù)變革都是把資源切分得更細致,讓運行效率變得更高,讓硬件軟件維護變得更加簡單。IT技術(shù)架構(gòu)的演進主要有以下幾個特點:
1、硬件資源使用顆粒度變小
2、資源利用率越來越高
3、運維工作逐步減少
Serverless架構(gòu)主要有以下特點:
1、實現(xiàn)了細粒度的計算資源分配。
2、不需要預(yù)先分配資源。
3、具備真正意義上的高度擴容和彈性。
4、按需使用,按需計費。
根據(jù)Serverless的這些通用特點,歸納出下面幾種典型使用場景,供大家參考。
事件請求場景
定制圖片
網(wǎng)店中的商品圖片維護,根據(jù)商品陳列位置,要求需要動態(tài)切割成不同尺寸圖片,或者打上不同水印,當?shù)昙野褕D片上傳到?阿里云OSS上,會通過函數(shù)計算上定制的trigger來觸發(fā)函數(shù)計算。根據(jù)計算規(guī)則,生成不同尺寸的圖片,滿足電商陳列使用,整個過程無需再搭建額外服務(wù)器,也無需網(wǎng)站美工干預(yù)。
物聯(lián)網(wǎng)中的低頻請求
物聯(lián)網(wǎng)行業(yè)中,由于物聯(lián)網(wǎng)設(shè)備傳輸數(shù)據(jù)量小,且往往是固定時間間隔進行數(shù)據(jù)傳輸,因此經(jīng)常涉及低頻請求場景。
例如:物聯(lián)網(wǎng)應(yīng)用程序每分鐘僅運行一次,每次運行50ms,這意味著CPU的使用率為0.1%/小時,這也意味著其實有1000個相同的應(yīng)用可以共享計算資源。而Serverless架構(gòu)下,用戶可以購買每分鐘100ms的資源來滿足計算需求,通過這種方式就能夠有效解決效率問題,降低使用成本。
定制事件
用戶注冊時發(fā)郵件驗證郵箱地址,同樣通過定制的事件來觸發(fā)后續(xù)的注冊流程,而無需再配置額外的應(yīng)用無服務(wù)器來處理后續(xù)的請求。
固定時間觸發(fā)
事件觸發(fā)固定時間觸發(fā),例如在夜間或者服務(wù)空閑時間來處理繁忙時候的交易數(shù)據(jù),或者運行批量數(shù)據(jù),來生成數(shù)據(jù)報表,通過Serverless方式,不用再額外購買利用率并不高的處理資源。
流量突發(fā)場景
彈性擴展應(yīng)對突發(fā)流量
移動互聯(lián)網(wǎng)應(yīng)用經(jīng)常會面對突發(fā)流量場景。例如:移動應(yīng)用的通常流量情況是QPS 20,但每隔5分鐘會有一個持續(xù)10s的QPS 200流量(10倍于通常流量)。傳統(tǒng)架構(gòu)下,企業(yè)必須擴展QPS 200的硬件能力來應(yīng)對業(yè)務(wù)高峰,即使高峰時間僅占整個運行時間的4%。
在Serverless架構(gòu)下,您可以利用彈性擴展特性,快速構(gòu)建新的計算能力來滿足當前需求,當業(yè)務(wù)高峰后,資源能夠自動釋放,有效節(jié)省成本。
轉(zhuǎn)碼和流量擴容
視頻直播某次專場活動,由于無法預(yù)估會有多少點播的觀眾視頻接入,把轉(zhuǎn)碼和流量擴容這部分內(nèi)容通過Function來處理,無需考慮并發(fā)和流量擴容。
處理大數(shù)據(jù)場景
由于安全審計問題,您需要從OSS(多個地域)過去一年的數(shù)據(jù)(1個小時一個文件)中找出特定關(guān)鍵字訪問的日志,同時做聚合運算(計算出總值)。如果使用阿里云函數(shù)計算,您將高峰期每2小時的訪問日志,或者低谷期每4小時的訪問日志交給一個計算函數(shù)處理,并將處理結(jié)果存到RDS中。使用一個函數(shù)分派數(shù)據(jù)給另一個函數(shù),使其執(zhí)行成千上萬個相同的實例。
這樣會同時運行近千個計算函數(shù)(24 x 365 / 10),在不到一分鐘的時間內(nèi)完成整個工作。同樣的事情交給ECS+計算腳本來做計算,單單為這些instance配置網(wǎng)絡(luò)就讓人頭疼(不同地域無法走內(nèi)網(wǎng)下載OSS文件):instance的數(shù)量可能已經(jīng)超出了子網(wǎng)中剩余IP地址的數(shù)量(比如,您的VPC使用了24位掩碼)。
下面結(jié)合阿里云的函數(shù)計算產(chǎn)品來講解各個應(yīng)用場景中架構(gòu)以及如何解決的場景中的痛點。阿里云的函數(shù)計算是基于Serverless這種架構(gòu)實現(xiàn)的一個全托管產(chǎn)品,用戶只需要上傳核心代碼到函數(shù)計算,就可以通過事件源或者SDK&API來運行代碼。函數(shù)計算會準備好運行環(huán)境,并根據(jù)請求峰值來動態(tài)擴容運行環(huán)境,函數(shù)計算是按照執(zhí)行時間來計費,請求處理完成后,計費停止,對于有業(yè)務(wù)請求有明顯高峰和低谷的應(yīng)用來說,相對節(jié)省成本。
下圖是函數(shù)計算的一個開發(fā)者試用操作流程:
步驟1:開發(fā)者編寫代碼,目前支持的語言Java、NodeJS、Python等語言。
步驟2:把代碼上傳到函數(shù)計算上,上傳的方式有通過API或者SDK上傳,也可以通過控制臺頁面上傳上傳,還可以通過命令行工具Fcli上傳。
步驟3:通過API&SDK來觸發(fā)函數(shù)計算執(zhí)行,同樣也可以通過云產(chǎn)品的事件源來觸發(fā)函數(shù)計算執(zhí)行。
步驟4:函數(shù)計算在執(zhí)行過程中,會根據(jù)用戶請請求量動態(tài)擴容函數(shù)計算來保證請求峰值的執(zhí)行,這個過程對用戶是透明無感知的。
步驟5:函數(shù)執(zhí)行結(jié)束后,可以通過賬單來查看執(zhí)行費用,根據(jù)函數(shù)的實際執(zhí)行時間按量計費,收費粒度精確到100ms。
講解完上面的流程后,下面會詳細講解3個Serverless的應(yīng)用場景,通過案例分享能讓您對Serverless這種架構(gòu)有更清晰的認識。
事件觸發(fā)計算能力
場景描述:用戶通過手機終端,Web應(yīng)用,或者PC工具把各種文件包括圖片、視頻以及文本等上傳到OSS(對象存儲,下同)后,利用OSS的PutObject的事件可以觸發(fā)函數(shù)計算對上傳后的文件進行處理,目前比較典型的場景當用戶把視頻文件上傳到OSS后,觸發(fā)函數(shù)計算把對象的Meta信息獲取并傳輸給核心算法庫,核心算法庫根據(jù)算法把相應(yīng)的視頻文件推送CDN源站,達到特定視頻熱加載的處理。另外一個場景,視頻文件上傳到OSS后也同時觸發(fā)函數(shù)計算同步做多轉(zhuǎn)碼率的處理,并把處理后的視頻文件存儲到OSS中,完成輕量的數(shù)據(jù)處理。
在多媒體的處理場景中,經(jīng)常會碰到海量文件上傳到OSS后,還需要對文件進行進一步的加工,例如加水印、轉(zhuǎn)碼率、獲取文件屬性等操作,這個場景中,用戶在處理的時候會遇到以下需要解決的技術(shù)難點:
1、 如何接收文件上傳后的動作事件,通常的做法是定制消息通道來接收OSS事件通知,搭建一個運行環(huán)境,并編寫相關(guān)的代碼來處理事件通知。
2、如何高效的處理完海量上傳的文件。
3、如何無縫的把多個云產(chǎn)品連接起來。
通過函數(shù)計算能比較方便解決以上幾個技術(shù)難點,首先函數(shù)計算可以設(shè)置OSS的觸發(fā)器來接收事件通知,在函數(shù)計算中編寫業(yè)務(wù)代碼來處理文件,并通過內(nèi)網(wǎng)把文件傳輸?shù)絆SS中,整個流程簡單易用可擴展??梢园押诵拇a部署到函數(shù)計算中,通過函數(shù)計算來并發(fā)處理事件通知。函數(shù)計算目前打通了多款產(chǎn)品的內(nèi)部交互,通過控制臺簡單配置就可以高效的解決產(chǎn)品間連接問題。
事件觸發(fā)場景常規(guī)做法:
1、設(shè)置消息通道接收事件,并編寫業(yè)務(wù)代碼。
2、購買服務(wù)器資源做后端數(shù)據(jù)處理。
3、設(shè)計一套多并發(fā)框架完成業(yè)務(wù)上傳文件峰值的處理。
4、開通多個產(chǎn)品,并調(diào)用SDK代碼來完成業(yè)務(wù)交互。
函數(shù)計算解法:
1、在控制臺上配置事件源通知,編寫業(yè)務(wù)代碼。
2、代碼寫到函數(shù)計算里,不需要管理軟硬件環(huán)境。
3、 業(yè)務(wù)高峰期函數(shù)計算會動態(tài)伸縮,無需管理。
4、內(nèi)置打通多款產(chǎn)品,簡單配置就可以無縫對接。