通過函數(shù)計(jì)算,用戶無需再管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳。函數(shù)計(jì)算會為用戶準(zhǔn)備好計(jì)算資源,以彈性、可靠的方式運(yùn)行代碼,并提供日志查詢,性能監(jiān)控,報(bào)警等功能。

借助于函數(shù)計(jì)算,可以快速構(gòu)建任何類型的應(yīng)用和服務(wù),無需管理和運(yùn)維。更棒的是,只需要為代碼實(shí)際運(yùn)行消耗的資源付費(fèi) ——代碼未運(yùn)行則不產(chǎn)生費(fèi)用。

以構(gòu)建一個(gè)視頻處理后端服務(wù)為例,來體驗(yàn)以serverless的方式開發(fā)應(yīng)用的高效。

在示例場景中,用戶將生成的高清視頻文件上傳到阿里云對象存儲(OSS)上,這些視頻文件需要轉(zhuǎn)碼為不同碼率的文件(360P,720P,……)以適配不同的播放設(shè)備。最終結(jié)果文件被存儲到OSS上,由用戶消費(fèi)。

如果以傳統(tǒng)的server-based方式構(gòu)建系統(tǒng),用戶需要購買和設(shè)置服務(wù)器,編碼實(shí)現(xiàn)高性能服務(wù)器軟件。并且要考慮一系列容量預(yù)估、容錯(cuò)、運(yùn)維監(jiān)控等方面的問題。例如,需要多少臺服務(wù)器、什么規(guī)格?如何配置網(wǎng)絡(luò)/操作系統(tǒng)?如何部署升級?如何處理服務(wù)器宕機(jī)?如何負(fù)載均衡?如何根據(jù)負(fù)載實(shí)時(shí)動態(tài)伸縮?如何對系統(tǒng)監(jiān)控報(bào)警?

……

13server-based后端服務(wù)

如果以serverless的方式構(gòu)建系統(tǒng),用戶只需要編寫處理單個(gè)請求的視頻轉(zhuǎn)碼函數(shù),并設(shè)置相應(yīng)的OSS觸發(fā)器即可,函數(shù)計(jì)算系統(tǒng)會保證函數(shù)被可靠的執(zhí)行。大大提高了開發(fā)效率。

14serverless后端服務(wù)

架構(gòu)總覽

從安全性,可用性和可擴(kuò)展性的角度來審視函數(shù)計(jì)算的架構(gòu),看看它是如何幫助用戶構(gòu)建彈性高可用的應(yīng)用。

整個(gè)系統(tǒng)架構(gòu)如下圖所示。API服務(wù)層完成身份驗(yàn)證,元數(shù)據(jù)的讀寫等功能。如果是同步函數(shù)調(diào)用請求,則API Server從資源調(diào)度模塊獲取可用的函數(shù)執(zhí)行引擎并發(fā)送請求,最后取回結(jié)果。如果是異步調(diào)用,則將事件寫入到消息隊(duì)列后即返回。由事件分發(fā)模塊分發(fā)事件,整個(gè)流程和同步調(diào)用類似。

15函數(shù)計(jì)算架構(gòu)

安全性和訪問控制

作為一個(gè)通用的計(jì)算服務(wù),函數(shù)計(jì)算允許用戶運(yùn)行任意代碼。因此保證用戶信息安全是函數(shù)計(jì)算最高優(yōu)先級的目標(biāo)。在系統(tǒng)設(shè)計(jì)中堅(jiān)持以下兩個(gè)原則:

1.使用最高級別的安全隔離技術(shù),提供與阿里云ECS同等級的安全隔離性。

2.訪問用戶的任何資源均需得到用戶的顯式授權(quán)。

整個(gè)計(jì)算環(huán)境的隔離分為兩個(gè)層面:

1.執(zhí)行用戶函數(shù)的計(jì)算資源和函數(shù)計(jì)算系統(tǒng)的網(wǎng)絡(luò)是相互隔離的。

2.不同用戶的計(jì)算資源和網(wǎng)絡(luò)是相互隔離的。

通過多層次,多維度的安全隔離,確保用戶和函數(shù)計(jì)算服務(wù)本身的信息安全性。

此外,由于用戶的函數(shù)被其他用戶或服務(wù)調(diào)用或者訪問其他資源會涉及到費(fèi)用和數(shù)據(jù)安全,因此函數(shù)計(jì)算要求用戶授權(quán)。例如,用戶想使用阿里云對象存儲服務(wù)(OSS)觸發(fā)器時(shí),需要授權(quán)OSS服務(wù)調(diào)用相關(guān)函數(shù)的權(quán)限。通過對觸發(fā)器的管理,用戶可以非常方便的了解指定函數(shù)可能被哪些事件源服務(wù)調(diào)用。關(guān)于函數(shù)計(jì)算的授權(quán)模型,請參閱相關(guān)文檔。

高可用

要保證用戶函數(shù)被可靠的執(zhí)行,函數(shù)計(jì)算需要處理以下兩類場景:

1.非預(yù)期中斷。例如程序崩潰,機(jī)器宕機(jī),網(wǎng)絡(luò)分割故障(network partition)等等。

2.預(yù)期中斷。例如用戶函數(shù)、函數(shù)計(jì)算系統(tǒng)的升級等等。

非預(yù)期中斷的處理能力是任何分布式系統(tǒng)都要具備的基本能力,相關(guān)技術(shù)已經(jīng)非常成熟,細(xì)節(jié)我們不再贅述。函數(shù)計(jì)算本身和依賴的阿里云服務(wù)都具備高可用的特性。在有條件的區(qū)域,函數(shù)計(jì)算的系統(tǒng)會跨多個(gè)可用區(qū)部署,提供更高級別的容災(zāi)能力。

對于預(yù)期的中斷,函數(shù)計(jì)算系統(tǒng)自身和用戶函數(shù)都可以做到平滑升級。當(dāng)升級發(fā)生時(shí),正在執(zhí)行的請求不會被終止,系統(tǒng)會等待請求處理完成,再執(zhí)行升級操作。未來我們將支持函數(shù)的多版本(幫助用戶快速回滾)、灰度發(fā)布等功能,進(jìn)一步減輕用戶的運(yùn)維負(fù)擔(dān)。

實(shí)時(shí)彈性伸縮

實(shí)時(shí)彈性伸縮是函數(shù)計(jì)算的核心優(yōu)勢,當(dāng)用戶負(fù)載出現(xiàn)波峰時(shí),系統(tǒng)能實(shí)時(shí)擴(kuò)張資源,平滑應(yīng)對峰值訪問。以異步事件處理為例,整個(gè)處理流程分為三步:

1.事件寫入函數(shù)計(jì)算的事件隊(duì)列。

2.事件分發(fā)器從隊(duì)列中讀取事件,并調(diào)用對應(yīng)的函數(shù)處理事件。

3.用戶函數(shù)處理事件。

16函數(shù)計(jì)算系統(tǒng)會監(jiān)控用戶的負(fù)載變化,各組件均能夠根據(jù)用戶負(fù)載動態(tài)伸縮。如上圖所示,當(dāng)用戶A的事件產(chǎn)生速率變大時(shí),系統(tǒng)會自動在每個(gè)環(huán)節(jié)給A分配更多的資源,以匹配事件處理的能力。

函數(shù)計(jì)算采用多級資源調(diào)度策略,系統(tǒng)會根據(jù)用戶負(fù)載和資源池水位預(yù)判需求,提前準(zhǔn)備好計(jì)算資源。依托于飛天分布式平臺多年的積累,在調(diào)度的實(shí)時(shí)性和準(zhǔn)確性上取得了很好的平衡,具備毫秒級彈性伸縮的能力。

另一方面,實(shí)時(shí)彈性伸縮也是一柄雙刃劍,函數(shù)有可能被錯(cuò)誤觸發(fā),不但影響服務(wù)可用性,也給用戶造成財(cái)務(wù)損失。以上述視頻轉(zhuǎn)碼系統(tǒng)為例,每當(dāng)有新的視頻被上傳到對象服務(wù)(OSS)的指定目錄后,函數(shù)就會被觸發(fā)進(jìn)行轉(zhuǎn)碼。但如果用戶不小心把處理后的結(jié)果文件也寫入到了源目錄,則形成了一個(gè)事件觸發(fā)的環(huán),導(dǎo)致函數(shù)會以指數(shù)級速度被錯(cuò)誤觸發(fā),且永遠(yuǎn)不能終止。因此系統(tǒng)必須要能控制和隔離錯(cuò)誤函數(shù)的影響。

17函數(shù)計(jì)算在用戶粒度設(shè)置了函數(shù)最大并發(fā)調(diào)用限制(允許用戶自定義),保證用戶的費(fèi)用不會超過一個(gè)上限。同時(shí),整個(gè)系統(tǒng)從不同層次,不同維度對用戶使用的資源進(jìn)行流控,確保在多租戶的環(huán)境中,用戶不會互相影響。此外,提供豐富的監(jiān)控和報(bào)警功能,能夠及時(shí)通知用戶處理。

總結(jié)

云的第一階段,是基礎(chǔ)設(shè)施的云化,使得用戶有能力使用大規(guī)模的計(jì)算能力。云的下一階段的發(fā)展,是要解決用戶使用云的成本和效率問題,幫助用戶實(shí)現(xiàn)業(yè)務(wù)能力的云化。本文從架構(gòu)設(shè)計(jì)的角度,剖析了函數(shù)計(jì)算這樣的無服務(wù)器計(jì)算服務(wù)(serverless computing)是如何幫助用戶快速構(gòu)建低成本、高可用、實(shí)時(shí)伸縮的cloud-native應(yīng)用。當(dāng)這些通用的問題在平臺層面解決后,用戶就能以很高的效率專注于業(yè)務(wù)層的創(chuàng)新。歡迎大家使用阿里云函數(shù)計(jì)算,進(jìn)入無服務(wù)器計(jì)算的世界。

 

分享到

xiesc

相關(guān)推薦