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

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

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

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

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

……

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

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

14serverless后端服務(wù)

架構(gòu)總覽

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

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

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

安全性和訪問控制

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

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

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

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

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

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

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

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

高可用

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

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

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

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

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

實時彈性伸縮

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

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

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

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

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

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

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

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

總結(jié)

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

 

分享到

xiesc

相關(guān)推薦