Serverless应用场景
Serverless應(yīng)用場(chǎng)景
- Serverless 演進(jìn)
- Serverless的典型應(yīng)用有哪些?
- 場(chǎng)景一:事件觸發(fā)計(jì)算能力
- 場(chǎng)景二:利用彈性擴(kuò)容(視頻直播多人連麥場(chǎng)景)
- 場(chǎng)景三:物聯(lián)網(wǎng)數(shù)據(jù)處理場(chǎng)景
- 場(chǎng)景四:共享派單系統(tǒng)詳解
- 總結(jié)
- 更多信息
Serverless架構(gòu)是近年來(lái)迅速興起的一個(gè)技術(shù)概念。基于這種架構(gòu)能構(gòu)建出多種應(yīng)用場(chǎng)景,適用于各行各業(yè)。只要是對(duì)輕計(jì)算、高彈性、無(wú)狀態(tài)等場(chǎng)景有訴求,您都可以通過本文來(lái)熟悉一些基礎(chǔ)概念,并從相關(guān)場(chǎng)景中獲得啟發(fā)。
Serverless 演進(jìn)
關(guān)于Serverless架構(gòu)的演進(jìn),網(wǎng)上比較流行用一張人類形態(tài)發(fā)展史圖進(jìn)行說(shuō)明。從爬行猿人到蹲著的類猿人,再到直立人類,最后到使用工具的新興人類。
人類的每一次進(jìn)化都伴隨著生產(chǎn)效率的提升。同理,整個(gè)IT計(jì)算的發(fā)展歷程,也是一個(gè)逐步提高生產(chǎn)效率的歷程,具體演進(jìn)圖如下所示:
在這個(gè)發(fā)展歷程中有以下幾個(gè)漸進(jìn)的里程碑事件:
因此,這個(gè)發(fā)展歷程也是一場(chǎng)IT架構(gòu)的演進(jìn),期間經(jīng)歷了一系列代際的技術(shù)變革,把資源切分得更細(xì),讓運(yùn)行效率更高,讓硬件軟件維護(hù)更簡(jiǎn)單。IT架構(gòu)的演進(jìn)主要有以下幾個(gè)特點(diǎn):
- 硬件資源使用顆粒度變小
- 資源利用率越來(lái)越高
- 運(yùn)維工作逐步減少
- 業(yè)務(wù)更聚焦在代碼層面
Serverless架構(gòu)主要有以下特點(diǎn):
- 實(shí)現(xiàn)了細(xì)粒度的計(jì)算資源分配。
- 不需要預(yù)先分配資源。
- 具備真正意義上的高度擴(kuò)容和彈性。
- 按需使用,按需計(jì)費(fèi)。
根據(jù)Serverless的這些通用特點(diǎn),歸納出下面幾種典型使用場(chǎng)景,供大家參考。
Serverless的典型應(yīng)用有哪些?
事件請(qǐng)求場(chǎng)景
- 定制圖片
網(wǎng)店店家進(jìn)行商品圖片維護(hù)時(shí),需要根據(jù)商品陳列位置,將圖片動(dòng)態(tài)切割成不同尺寸,或者打上不同水印。當(dāng)?shù)昙野褕D片上傳到對(duì)象存儲(chǔ) OSS上,會(huì)通過函數(shù)計(jì)算上定制的trigger來(lái)觸發(fā)函數(shù)計(jì)算。根據(jù)計(jì)算規(guī)則,生成不同尺寸的圖片,滿足在線商品陳列需求,整個(gè)過程無(wú)需再搭建額外服務(wù)器,也無(wú)需網(wǎng)站美工干預(yù)。
- 物聯(lián)網(wǎng)中的低頻請(qǐng)求
物聯(lián)網(wǎng)行業(yè)中,物聯(lián)網(wǎng)設(shè)備傳輸數(shù)據(jù)量小,且往往是以固定時(shí)間間隔進(jìn)行數(shù)據(jù)傳輸,因此經(jīng)常涉及低頻請(qǐng)求場(chǎng)景。例如:物聯(lián)網(wǎng)應(yīng)用程序每分鐘僅運(yùn)行一次,每次運(yùn)行 50ms,這意味著CPU的使用率僅為 0.1%/小時(shí),或者說(shuō)有 1000 個(gè)相同的應(yīng)用可以共享計(jì)算資源。而Serverless架構(gòu)下,用戶可以購(gòu)買每分鐘 100ms 的資源來(lái)滿足計(jì)算需求,既能有效解決效率問題,也能降低使用成本。
- 定制事件
用戶注冊(cè)時(shí)發(fā)郵件驗(yàn)證郵箱地址,同樣可以通過定制的事件來(lái)觸發(fā)后續(xù)的注冊(cè)流程,而無(wú)需再配置額外的應(yīng)用無(wú)服務(wù)器來(lái)處理后續(xù)的請(qǐng)求。
- 固定時(shí)間觸發(fā)
事件觸發(fā)固定時(shí)間觸發(fā),例如在夜間或者服務(wù)空閑時(shí)間來(lái)處理繁忙時(shí)候的交易數(shù)據(jù),或者運(yùn)行批量數(shù)據(jù),來(lái)生成數(shù)據(jù)報(bào)表,通過Serverless方式,不用再額外購(gòu)買利用率并不高的處理資源。
流量突發(fā)場(chǎng)景
- 彈性擴(kuò)展應(yīng)對(duì)突發(fā)流量
移動(dòng)互聯(lián)網(wǎng)應(yīng)用經(jīng)常會(huì)面對(duì)突發(fā)流量場(chǎng)景。例如:移動(dòng)應(yīng)用的通常流量情況是 QPS 20,但每隔 5 分鐘會(huì)有一個(gè)持續(xù) 10s 的 QPS 200 流量(10 倍于通常流量)。傳統(tǒng)架構(gòu)下,企業(yè)必須擴(kuò)展 QPS 200 的硬件能力來(lái)應(yīng)對(duì)業(yè)務(wù)高峰,即使高峰時(shí)間僅占整個(gè)運(yùn)行時(shí)間的4%。
在Serverless架構(gòu)下,您可以利用彈性擴(kuò)展特性,快速構(gòu)建新的計(jì)算能力來(lái)滿足當(dāng)前需求,當(dāng)業(yè)務(wù)高峰后,資源能夠自動(dòng)釋放,有效節(jié)省成本。
- 轉(zhuǎn)碼和流量擴(kuò)容
視頻直播某次專場(chǎng)活動(dòng),由于無(wú)法預(yù)估會(huì)有多少點(diǎn)播的觀眾視頻接入,把轉(zhuǎn)碼和流量擴(kuò)容這部分內(nèi)容通過Function來(lái)處理,無(wú)需考慮并發(fā)和流量擴(kuò)容。
處理大數(shù)據(jù)場(chǎng)景
由于安全審計(jì)問題,您需要從OSS(多個(gè)地域)過去一年的數(shù)據(jù)(1 個(gè)小時(shí)一個(gè)文件)中找出特定關(guān)鍵字訪問的日志,同時(shí)做聚合運(yùn)算(計(jì)算出總值)。如果使用阿里云函數(shù)計(jì)算,您將高峰期每 2 小時(shí)的訪問日志,或者低谷期每 4 小時(shí)的訪問日志交給一個(gè)計(jì)算函數(shù)處理,并將處理結(jié)果存到RDS中。使用一個(gè)函數(shù)分派數(shù)據(jù)給另一個(gè)函數(shù),使其執(zhí)行成千上萬(wàn)個(gè)相同的實(shí)例。
這樣會(huì)同時(shí)運(yùn)行近千個(gè)計(jì)算函數(shù)(24 x 365 / 10),在不到一分鐘的時(shí)間內(nèi)完成整個(gè)工作。同樣的事情交給ECS+計(jì)算腳本來(lái)做計(jì)算,單單為這些instance配置網(wǎng)絡(luò)就讓人頭疼(不同地域無(wú)法走內(nèi)網(wǎng)下載OSS文件):instance的數(shù)量可能已經(jīng)超出了子網(wǎng)中剩余IP地址的數(shù)量(比如,您的VPC使用了24位掩碼)。
下面結(jié)合阿里云的函數(shù)計(jì)算產(chǎn)品來(lái)講解各個(gè)應(yīng)用場(chǎng)景中地架構(gòu)以及如何解決場(chǎng)景中的痛點(diǎn)。阿里云的函數(shù)計(jì)算是基于Serverless這種架構(gòu)實(shí)現(xiàn)的一個(gè)全托管產(chǎn)品,用戶只需要上傳核心代碼到函數(shù)計(jì)算,就可以通過事件源或者SDK&API來(lái)運(yùn)行代碼。函數(shù)計(jì)算會(huì)準(zhǔn)備好運(yùn)行環(huán)境,并根據(jù)請(qǐng)求峰值來(lái)動(dòng)態(tài)擴(kuò)容運(yùn)行環(huán)境。函數(shù)計(jì)算是按照?qǐng)?zhí)行時(shí)間來(lái)計(jì)費(fèi),請(qǐng)求處理完成后,計(jì)費(fèi)停止,對(duì)于有業(yè)務(wù)請(qǐng)求有明顯高峰和低谷的應(yīng)用來(lái)說(shuō),相對(duì)節(jié)省成本。
下圖是函數(shù)計(jì)算的一個(gè)開發(fā)者試用操作流程:
講解完上面的流程后,下面會(huì)詳細(xì)講解3個(gè)Serverless的應(yīng)用場(chǎng)景,通過案例分享能讓您對(duì)Serverless這種架構(gòu)有更清晰的認(rèn)識(shí)。
場(chǎng)景一:事件觸發(fā)計(jì)算能力
場(chǎng)景描述
用戶通過手機(jī)終端、Web應(yīng)用、或者PC工具把各種文件包括圖片、視頻以及文本等上傳到OSS(對(duì)象存儲(chǔ),下同)后,利用OSS的PutObject事件可以觸發(fā)函數(shù)計(jì)算對(duì)上傳后的文件進(jìn)行處理。
典型場(chǎng)景
當(dāng)用戶把視頻文件上傳到OSS后,觸發(fā)函數(shù)計(jì)算把對(duì)象的Meta信息獲取并傳輸給核心算法庫(kù),核心算法庫(kù)根據(jù)算法把相應(yīng)的視頻文件推送CDN源站,達(dá)到特定視頻熱加載的處理。另外一個(gè)場(chǎng)景,視頻文件上傳到OSS后也同時(shí)觸發(fā)函數(shù)計(jì)算同步做多轉(zhuǎn)碼率的處理,并把處理后的視頻文件存儲(chǔ)到OSS中,完成輕量的數(shù)據(jù)處理。
在多媒體的處理場(chǎng)景中,經(jīng)常會(huì)碰到海量文件上傳到OSS后,還需要對(duì)文件進(jìn)行進(jìn)一步的加工,例如加水印、轉(zhuǎn)碼率、獲取文件屬性等操作,這個(gè)場(chǎng)景中,用戶在處理的時(shí)候會(huì)遇到以下需要解決的技術(shù)難點(diǎn):
- 如何接收文件上傳后的動(dòng)作事件,通常的做法是定制消息通道來(lái)接收OSS事件通知,搭建一個(gè)運(yùn)行環(huán)境,并編寫相關(guān)的代碼來(lái)處理事件通知。
- 如何高效的處理完海量上傳的文件。
- 如何無(wú)縫的把多個(gè)云產(chǎn)品連接起來(lái)。
通過函數(shù)計(jì)算能比較方便解決以上幾個(gè)技術(shù)難點(diǎn):
- 函數(shù)計(jì)算可以設(shè)置OSS的觸發(fā)器來(lái)接收事件通知,在函數(shù)計(jì)算中編寫業(yè)務(wù)代碼來(lái)處理文件,并通過內(nèi)網(wǎng)把文件傳輸?shù)絆SS中,整個(gè)流程簡(jiǎn)單易用可擴(kuò)展。
- 可以把核心代碼部署到函數(shù)計(jì)算中,通過函數(shù)計(jì)算來(lái)并發(fā)處理事件通知。
- 函數(shù)計(jì)算目前打通了多款產(chǎn)品的內(nèi)部交互,通過控制臺(tái)簡(jiǎn)單配置就可以高效的解決產(chǎn)品間連接問題。
事件觸發(fā)場(chǎng)景常規(guī)做法:
- 設(shè)置消息通道接收事件,并編寫業(yè)務(wù)代碼。
- 購(gòu)買服務(wù)器資源做后端數(shù)據(jù)處理。
- 設(shè)計(jì)一套多并發(fā)框架完成業(yè)務(wù)上傳文件峰值的處理。
- 開通多個(gè)產(chǎn)品,并調(diào)用SDK代碼來(lái)完成業(yè)務(wù)交互。
函數(shù)計(jì)算解法:
- 在控制臺(tái)上配置事件源通知,編寫業(yè)務(wù)代碼。
- 代碼寫到函數(shù)計(jì)算里,不需要管理軟硬件環(huán)境。
- 業(yè)務(wù)高峰期函數(shù)計(jì)算會(huì)動(dòng)態(tài)伸縮,無(wú)需管理。
- 內(nèi)置打通多款產(chǎn)品,簡(jiǎn)單配置就可以無(wú)縫對(duì)接。
場(chǎng)景二:利用彈性擴(kuò)容(視頻直播多人連麥場(chǎng)景)
場(chǎng)景描述
直播間的客戶端把主播和連麥觀眾的音視頻采集發(fā)送給函數(shù)計(jì)算做混流服務(wù),函數(shù)計(jì)算把數(shù)據(jù)匯集后交給混流服務(wù)進(jìn)行合成,并把合成畫面視頻流推送給CDN,終端觀眾實(shí)時(shí)拉取直播流,能實(shí)時(shí)看到混流合成畫面。
視頻直播應(yīng)用場(chǎng)景中,有一種場(chǎng)景視頻直播的多人連麥,主播可以同時(shí)和多個(gè)工作進(jìn)行連麥,把多個(gè)觀眾或者好友畫面接入,并把畫面合成到一個(gè)場(chǎng)景中,供給更多觀看直播的觀眾觀看。這個(gè)場(chǎng)景中,有幾個(gè)技術(shù)難度需要關(guān)注:
- 連麥的觀眾不固定,需要考慮適度的并發(fā)和彈性。
- 直播不可能 24 小時(shí)在線,有較為明顯的業(yè)務(wù)訪問高峰期和低谷期。
- 直播是事件或者公眾點(diǎn)爆的場(chǎng)景,更新速度較快,版本迭代較快,需要快速完成對(duì)新熱點(diǎn)的技術(shù)升級(jí)。
綜合以上幾個(gè)特點(diǎn),可以通過Serverless這種架構(gòu)來(lái)完美地解決以上痛點(diǎn)。
函數(shù)計(jì)算作為連麥觀眾和主播接入的實(shí)時(shí)音頻和視頻轉(zhuǎn)發(fā)集群,當(dāng)并發(fā)量過來(lái)時(shí),函數(shù)計(jì)算自動(dòng)擴(kuò)容多個(gè)執(zhí)行環(huán)境來(lái)處理實(shí)時(shí)數(shù)據(jù)流;當(dāng)業(yè)務(wù)高峰期過去后,會(huì)適度縮減資源使用。代碼管理部署在云端,代碼迭代可以隨時(shí)進(jìn)行修改和維護(hù),無(wú)需再多管理一套軟件運(yùn)行環(huán)境。
視頻直播場(chǎng)景常規(guī)做法:
- 購(gòu)買負(fù)載均衡應(yīng)付并發(fā)。
- 購(gòu)買計(jì)算資源做數(shù)據(jù)處理。
- 業(yè)務(wù)低谷期需要想辦法釋放硬件資源來(lái)節(jié)省成本。
- 多版本要維護(hù)多套運(yùn)行環(huán)境。
函數(shù)計(jì)算解法:
- 把負(fù)載分發(fā)程序?qū)懙胶瘮?shù)里。
- 多版本迭代無(wú)需更換運(yùn)行環(huán)境,僅僅替換代碼版本即可。
- 業(yè)務(wù)訪問按需付費(fèi),業(yè)務(wù)低谷期無(wú)費(fèi)用。
場(chǎng)景三:物聯(lián)網(wǎng)數(shù)據(jù)處理場(chǎng)景
整個(gè)架構(gòu)圖分成 2 部分內(nèi)容:
- Web應(yīng)用:模擬一個(gè)社交內(nèi)容更新和數(shù)據(jù)處理的流程,Web用戶通過API網(wǎng)關(guān)把請(qǐng)求轉(zhuǎn)發(fā)到函數(shù)計(jì)算進(jìn)行處理,函數(shù)計(jì)算把處理后的內(nèi)容更新到數(shù)據(jù)庫(kù)中,并更新索引,另外一個(gè)函數(shù)計(jì)算把索引更新推送的搜索引擎供給外部客戶進(jìn)行檢索,完成整個(gè)數(shù)據(jù)閉環(huán)處理。
- 智能設(shè)備:通過IoT網(wǎng)關(guān)把設(shè)備狀態(tài)推送到函數(shù)計(jì)算處理,函數(shù)計(jì)算通過API接口把消息通過移動(dòng)推送服務(wù),推送給移動(dòng)端進(jìn)行狀態(tài)確認(rèn)和管理。
在智能設(shè)備狀態(tài)處理的場(chǎng)景中,同樣也會(huì)碰到幾個(gè)核心技術(shù)問題要解決。當(dāng)海量設(shè)備把狀態(tài)發(fā)送到IoT平臺(tái)后,如何設(shè)計(jì)一套高效非輪詢的技術(shù)框架來(lái)處理設(shè)備狀態(tài)數(shù)據(jù);如何把處理后的數(shù)據(jù)高效透?jìng)髌渌a(chǎn)品,例如寫數(shù)據(jù)庫(kù)或者推送給移動(dòng)端。
IoT設(shè)備狀態(tài)場(chǎng)景常規(guī)做法:
- 設(shè)置消息通道接收事件,并編寫業(yè)務(wù)代碼。
- 購(gòu)買服務(wù)器資源做后端數(shù)據(jù)處理。
- 開通多個(gè)產(chǎn)品,并調(diào)用SDK代碼來(lái)完成業(yè)務(wù)交互。
- 維護(hù)相關(guān)硬件軟件環(huán)境。
函數(shù)計(jì)算解法:
- 定制IoT平臺(tái)的事件通知,直接把業(yè)務(wù)代碼寫到函數(shù)計(jì)算中。
- 不需要維護(hù)運(yùn)行環(huán)境,用完即可釋放。
- 控制臺(tái)配置,就可以把信息透?jìng)鹘o相關(guān)產(chǎn)品。
通過 2 種方式的對(duì)比,能看出函數(shù)計(jì)算的解法更具備通用性,可以大量減少維護(hù)工作。
場(chǎng)景四:共享派單系統(tǒng)詳解
客戶通過派單平臺(tái)選著某種商家提供的服務(wù),可能是餐飲、商品、或者服務(wù)。派單平臺(tái)通知最近的騎手到最近的商家拿到服務(wù)并派送到客戶手里。一個(gè)簡(jiǎn)單的流程圖如下:
流程詳解:
這個(gè)派單場(chǎng)景中,要解決幾個(gè)棘手的技術(shù):
- 整合多種資源,計(jì)算資源會(huì)涉及到,騎手位置信息、最優(yōu)路徑規(guī)劃、車況情況、調(diào)度系統(tǒng)等。
- 低延遲:派單系統(tǒng)對(duì)訂單的響應(yīng)要求很高,從接單到商家在到客戶,整個(gè)閉環(huán)都需要在段時(shí)間內(nèi)完成。
- 海量數(shù)據(jù):涉及到三方面的數(shù)據(jù),客戶數(shù)據(jù)、商家數(shù)據(jù)、平臺(tái)騎手?jǐn)?shù)據(jù)、位置信息、商品信息等。
- 請(qǐng)求明顯波峰波谷:派單系統(tǒng)在一天中的資源使用非常不均衡,波峰期,例如外賣,在中午和晚飯達(dá)到高峰,平時(shí)空閑。
通過技術(shù)選型轉(zhuǎn)化成阿里云產(chǎn)品的解決方案后,函數(shù)計(jì)算結(jié)合其他產(chǎn)品比較完美地解決上述問題,解決方案如下圖所示:
流程詳解:
說(shuō)明?其中騎行日志會(huì)存放到日志服務(wù)里,便于后續(xù)做報(bào)表分析。騎行過程中騎手頭像、隨手拍街景會(huì)存放到OSS中,騎手位置可以通過函數(shù)計(jì)算去拉取第三方地圖信息,例如高德地圖等。
這個(gè)方案中,函數(shù)計(jì)算可以完成動(dòng)態(tài)擴(kuò)容問題,API網(wǎng)關(guān)可以解決鑒權(quán)和安全訪問問題,函數(shù)計(jì)算打通了多款產(chǎn)品,可以無(wú)縫使用其他資源和內(nèi)容。所有處理后的數(shù)據(jù)可以存放到表格存儲(chǔ)數(shù)據(jù)庫(kù)中,所有日志都可以直接加載到日志服務(wù)為后續(xù)數(shù)據(jù)報(bào)表服務(wù)。
共享派單系統(tǒng)常規(guī)做法:
- 購(gòu)買多臺(tái)服務(wù)器來(lái)支持高峰期的訪問,訪問波谷期自行設(shè)置釋放原則。
- 通過編程方式完成多個(gè)產(chǎn)品的交互。
- 為了保證負(fù)載均衡,需要購(gòu)買相關(guān)的產(chǎn)品來(lái)支撐。
- 維護(hù)相關(guān)硬件軟件環(huán)境。
函數(shù)計(jì)算解法:
- 定制IoT平臺(tái)的事件通知,直接把業(yè)務(wù)代碼寫到函數(shù)計(jì)算中。
- 不需要維護(hù)運(yùn)行環(huán)境,用完即可釋放。
- 控制臺(tái)配置,就可以把信息透?jìng)鹘o相關(guān)產(chǎn)品。
- 2種解法都能達(dá)到目標(biāo),從資源利用率和可維護(hù)性來(lái)看,使用Serverless架構(gòu)的方式會(huì)更優(yōu)。
總結(jié)
通過上面幾個(gè)場(chǎng)景的詳解,大致可以得出這樣的結(jié)論:通過事件觸發(fā)場(chǎng)景;有業(yè)務(wù)訪問高峰和低谷的場(chǎng)景,迭代次數(shù)較多,需要快速打通多款產(chǎn)品場(chǎng)景;通過函數(shù)計(jì)算能完美地解決成本、效率、聯(lián)通等問題。
| 維護(hù)性 |
|
|
| 可靠性 | 代碼和配置存放在OSS中,自動(dòng)多重冗余備份。 |
|
| 成本 |
|
|
| 安全 |
|
|
函數(shù)計(jì)算雖然適用于很多場(chǎng)景,但也不是覆蓋全部應(yīng)用場(chǎng)景的萬(wàn)金油。例如某些業(yè)務(wù)在一天中沒有明顯的請(qǐng)求波峰波谷,請(qǐng)求相對(duì)平緩,那么使用函數(shù)計(jì)算成本不見得會(huì)節(jié)省多少。
Serverless框架作為新興的技術(shù),目前相應(yīng)的支持開發(fā)工具較少,整體框架還在探索中。另外,函數(shù)計(jì)算的執(zhí)行環(huán)境是不記錄狀態(tài)的,有些耦合性較強(qiáng)的應(yīng)用也不太適合用Serverless這種框架。受限于資源大小分配,一些大型的應(yīng)用程序也不太容易能拆分搬上來(lái)。
?
總結(jié)
以上是生活随笔為你收集整理的Serverless应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当我们在聊 Serverless 时你应
- 下一篇: 微信小程序外卖增长402%,茶饮下单最活