■車悅遠
無服務器計算,它確實將開發(fā)人員和IT工程師從管理服務器硬件中解放出來,并允許應用程序按需運行,使其成為某些用例的理想方法。
無服務器計算是一種應用程序部署范例,允許應用程序按需運行,僅消耗執(zhí)行它們所需的資源。相比之下,在傳統計算模型中,應用程序不斷運行(并消耗資源),即使它們不處理用戶請求也是如此。
使用無服務器計算策略部署的應用程序通常稱為無服務器功能。公共云供應商提供用于執(zhí)行無服務器功能的服務,例如AWSLambda和AzureFunctions。開發(fā)人員還可以使用開源無服務器計算引擎OpenFaaS和Knative等平臺在基于云或本地基礎設施上自行設置無服務器環(huán)境。
無服務器計算——有時也稱為事件驅動計算,因為無服務器功能需要服務器運行。但是,服務器資源在“幕后”進行管理,每個無服務器功能都由無服務器編排引擎按需執(zhí)行。因此,盡管無服務器計算環(huán)境依賴于底層物理服務器,但部署無服務器功能的開發(fā)人員或IT工程師無需管理服務器硬件或操作系統環(huán)境。
無服務器計算如何工作
開發(fā)人員和IT工程師通常先將無服務器功能部署到無服務器計算環(huán)境中——這同樣可以是基于云的服務或他們自己配置和管理的環(huán)境。這些功能本身可以是完整的應用程序,也可以是應用程序組件,如調整圖像大小或掃描數據庫。
接下來,團隊設置確定功能何時執(zhí)行的條件。例如,開發(fā)人員可以將無服務器功能配置為在另一個應用程序請求時執(zhí)行,無服務器計算環(huán)境在滿足預配置條件時自動執(zhí)行功能。除了存儲函數代碼所需的磁盤空間(通常是最小的)之外,這些函數除非正在運行,否則不會消耗任何資源(無服務器環(huán)境可能會緩存一些資源以保持無服務器功能,以防它們在短時間內被重復調用,但為此目的分配的資源不如運行傳統應用程序所需的資源多)。
無服務器計算的優(yōu)勢
無服務器計算提供了2個關鍵優(yōu)勢:簡化的應用程序管理和更有效的資源消耗——這反過來轉化為更低的成本。
簡化的應用程序管理
由于無服務器計算將應用程序從底層服務器和操作系統中抽象出來,因此無服務器功能更易于部署和管理。開發(fā)人員和IT工程師無需擔心為服務器配置操作系統、安裝傳統意義上的應用程序或配置運行傳統操作系統環(huán)境所需的各種資源(如用戶帳戶、文件系統和軟件庫),使他們能夠專注于代碼,而不是托管它的環(huán)境。
資源和成本效率
由于無服務器功能僅在主動處理請求時消耗資源,因此比持續(xù)運行的傳統應用程序更高效,即使它們沒有被使用。
這種效率意味著更多的無服務器功能可以托管在單個服務器上,假設這些功能不會同時執(zhí)行,意味著通過無服務器功能部署應用程序(或應用程序組件)的成本較低,尤是在處理計算或內存密集型應用程序時。
對于傳統應用程序,組織會持續(xù)為應用程序在需求高峰時期可能需要的計算和內存資源付費,即使它不會一直使用所有的這些資源(配置資源的自動擴展策略可能會在一定程度上減少這種浪費,但不完全)相比之下,使用無服務器功能企業(yè)只需為這些功能消耗的資源付費,不會在已經分配但實際上未被應用程序使用的資源上浪費金錢。
無服務器計算的缺點
盡管無服務器計算對于部署某些類型的應用程序(尤其是資源密集型應用程序)是一種有用的策略,但并非在所有情況下都是正確的方法,因為使用它存在許多缺點和限制。
平臺依賴
迄今為止,圍繞無服務器計算的標準相對較少。每個無服務器云服務或平臺都需要以不同的方式構建、部署和管理無服務器功能。
出于這個原因,無服務器功能往往依賴于平臺,如果不對功能和用于管理它們的規(guī)則進行重大更改,就很難從一個無服務器計算環(huán)境轉移到另一個無服務器計算環(huán)境。
能見度有限
由于無服務器計算從使用無服務器環(huán)境的團隊中抽象出服務器和操作系統,因此調試功能可能會更加困難。雖然大多數無服務器平臺提供某種形式的日志記錄,但通常受限于無服務器環(huán)境支持的可見性級別,無法檢查完整的操作系統日志或跟蹤整個托管堆棧的請求來解決問題。
安全挑戰(zhàn)
使用無服務器計算本質上沒有任何不安全之處。但是,在某些方面,無服務器環(huán)境可能更難以保護。缺乏對主機環(huán)境的完全控制意味著無法利用在操作系統級別運行的安全工具或監(jiān)控。受限于無服務器環(huán)境支持的訪問控制工具,大多數無服務器功能在共享服務器上運行,意味著您無法將您的功能與其他團隊或組織的功能隔離,以降低其他用戶功能中的安全風險。
成本
雖然無服務器計算是在只需要定期執(zhí)行的資源密集型操作方面節(jié)省資金的好方法,但在無服務器環(huán)境中消耗的資源通常比通過傳統應用程序托管(至少在云中)消耗的資源成本更高。換句話說,與在VM中運行相同代碼相同的時間比,按單位計算,您將為無服務器函數消耗的計算和內存支付更多的費用。
無服務器計算示例
無服務器計算并非適用于每個用例,但無服務器功能已成功部署在各種常見設置中。
數據分析
解析和分析數據往往需要大量的計算資源,使得數據分析成為無服務器計算的一個很好用例,特別是當分析只需要定期執(zhí)行時。
例如,如果應用程序需要每小時分析一次數據庫,就可以在無服務器環(huán)境中運行分析功能。這樣,無需為不必要的計算資源付費。
CI/CD操作
使用CI/CD架構的軟件交付管道中的某些操作也可以使用無服務器功能來執(zhí)行。例如,通常需要大量計算資源且僅定期發(fā)生的應用程序構建可以使用無服務器功能執(zhí)行,以提高整個CI/CD管道的資源效率。
文件轉換
文件轉換是無服務器函數在現實使用中的另一個很好例子。如果應用程序需要重新格式化用戶上傳的文件或從一種格式(如WordDoc)轉換為另一種格式(如PDF),無服務器功能是按需執(zhí)行操作的好方法。
日志聚合和重組
如果有一個定期收集和/或重組大量日志文件的應用程序,無服務器功能是完成這項工作的明智方法,將能夠在必要時執(zhí)行計算密集型日志和重新格式化,而無需為任務分配超過所需的資源。
動態(tài)網站生成
可以在無服務器功能的幫助下托管嚴重依賴自定義、動態(tài)生成內容的網站。在此用例中,無服務器功能將在用戶請求時運行生成動態(tài)內容所需的操作。無服務器計算是一種強大的技術,可以在節(jié)省資金的同時簡化應用程序部署。