無服務(wù)器計算是一個越來越受歡迎的范例,它可以把這種愿望變成一個合乎邏輯的結(jié)論:有了無服務(wù)器計算,你不需要知道運行代碼的硬件或操作系統(tǒng),因為服務(wù)提供商會為你全力以赴。無服務(wù)器計算是一種在沒有最終用戶管理的基礎(chǔ)架構(gòu)上托管應(yīng)用程序的新方式,是IaaS(基礎(chǔ)架構(gòu)即服務(wù))發(fā)展的下一個階段。它將底層基礎(chǔ)設(shè)施和開發(fā)人員分開,基本上虛擬化了運行時(一種虛擬機,一般指進程級虛擬機)和操作管理。這通常被稱為FaaS(功能即服務(wù))。無服務(wù)器體系結(jié)構(gòu)允許您執(zhí)行給定的任務(wù),而不用擔心服務(wù)器、虛擬機或底層計算資源。
1.無服務(wù)器計算的優(yōu)缺點:從這個描述中,我們應(yīng)該清楚無服務(wù)器計算的兩個最大好處:開發(fā)人員可以專注于他們編寫的代碼的業(yè)務(wù)目標,而不是基礎(chǔ)設(shè)施問題;組織不是購買物理硬件或租用大多數(shù)閑置的云實例,而是以非常微妙的方式為實際的計算資源付費。
正如Bernard Golden指出的,后一點對于事件驅(qū)動的應(yīng)用程序特別有用。例如,您可能有一個長時間閑置的應(yīng)用程序,但在某些情況下,您必須同時處理許多事件請求?;蛘?,您可能有一個處理通過有限或間歇互聯(lián)網(wǎng)連接從物聯(lián)網(wǎng)設(shè)備發(fā)送的數(shù)據(jù)的應(yīng)用程序。在這兩種情況下,傳統(tǒng)的方法都需要配置一臺功能強大的服務(wù)器來處理峰值工作負載,但大多數(shù)情況下,服務(wù)器的利用率并沒有得到充分利用。使用無服務(wù)器架構(gòu),您只需要為實際的服務(wù)器資源付費。無服務(wù)器計算也適用于某些類型的批處理。無服務(wù)器架構(gòu)用例的一個典型例子是上傳和處理一系列單獨的圖像文件并將它們發(fā)送到應(yīng)用程序的另一部分的服務(wù)。
無服務(wù)器功能最明顯的缺點可能是它們的壽命很短,正如AlexSoft所說,“不適合長期任務(wù)”。大多數(shù)無服務(wù)器提供程序不會讓您的代碼執(zhí)行超過幾分鐘,并且當您啟動一個函數(shù)時,它不會在先前運行的實例中保留任何有狀態(tài)的數(shù)據(jù)。一個相關(guān)的問題是,無服務(wù)器代碼的啟動可能需要幾秒鐘,這在許多情況下不是問題,但是如果您的應(yīng)用程序需要低延遲,您應(yīng)該得到警告。
正如Rohit Akiwatkar和Gary Arora指出的,許多其他缺點與供應(yīng)商鎖定有關(guān)。盡管開源選項可用,但無服務(wù)器市場仍由大型商業(yè)云提供商主導(dǎo),我們將在后面討論。這意味著開發(fā)人員通常最終會使用其供應(yīng)商提供的工具,這使得他們很難在不滿意的情況下進行切換。此外,根據(jù)定義,由于大量無服務(wù)器計算是在供應(yīng)商的基礎(chǔ)設(shè)施上進行的,因此很難將無服務(wù)器代碼集成到內(nèi)部開發(fā)和測試管道中。
2.什么是無服務(wù)器計算?無服務(wù)器計算是云的執(zhí)行模式,其中云提供商動態(tài)分配(然后向用戶收費)僅執(zhí)行特定代碼所需的計算資源和存儲。當然,服務(wù)器仍然參與其中,但是提供商的服務(wù)完全由服務(wù)器負責。在亞馬遜倡導(dǎo)無服務(wù)器技術(shù)的Chris Munns在2017年的一次會議上表示,從團隊編寫和部署代碼的角度來看,“根本沒有服務(wù)器可以管理或配置。它不包含任何可能成為裸機、虛擬內(nèi)容或容器的內(nèi)容,任何涉及您管理主機、修補主機或在操作系統(tǒng)級別執(zhí)行任何處理的內(nèi)容都不是您必須做的事情。一個無服務(wù)器的世界。”
正如開發(fā)人員Mike Roberts所解釋的,這個術(shù)語曾經(jīng)被用于所謂的“后端即服務(wù)”場景,在這種場景中,移動應(yīng)用程序?qū)⑦B接到完全托管在云中的后端服務(wù)器。但是今天,當人們談?wù)摕o服務(wù)器計算或無服務(wù)器架構(gòu)時,他們指的是功能即服務(wù)產(chǎn)品,在這種產(chǎn)品中,客戶編寫只處理業(yè)務(wù)邏輯的代碼,并將其上傳到提供商。提供者負責所有硬件配置、虛擬機和容器管理,甚至多線程等任務(wù),這些任務(wù)通常內(nèi)置于應(yīng)用程序代碼中。
無服務(wù)器功能是事件驅(qū)動的,這意味著只有在請求觸發(fā)時才調(diào)用代碼。提供商只對執(zhí)行所需的計算時間收費,不需要為維護物理服務(wù)器或虛擬服務(wù)器支付固定的月費。這些函數(shù)可以連接在一起創(chuàng)建一個處理管道,或者它們可以用作更大應(yīng)用程序的組件,并與運行在容器或常規(guī)服務(wù)器中的其他代碼進行交互。
4.無服務(wù)器堆棧:像許多軟件領(lǐng)域一樣,無服務(wù)器世界見證了軟件堆棧的發(fā)展,它集成了構(gòu)建無服務(wù)器應(yīng)用程序所需的不同組件。每個堆棧都包含您將用來編寫代碼的編程語言、為代碼提供結(jié)構(gòu)的應(yīng)用程序框架,以及平臺將理解并用來啟動代碼執(zhí)行的一組觸發(fā)器。雖然您可以在每個類別中混合不同的特定產(chǎn)品,但根據(jù)您使用的供應(yīng)商,會有一些限制。比如對于語言,可以在AWS Lambda上使用Node.js、Java、Go、C #和Python,但是只有JavaScript、C #和F #可以在Azure函數(shù)上本地運行。AWS Lambda擁有最長的觸發(fā)器列表,但其中許多是特定于AWS平臺的,例如Amazon Simple Email Service和AWS CodeCommit。同時,谷歌云功能可以通過一般的HTTP請求觸發(fā)。保羅·賈沃斯基深入研究了三種主要產(chǎn)品。
6.無服務(wù)器數(shù)據(jù)庫:如上所述,使用無服務(wù)器代碼的一個怪癖是沒有持久狀態(tài),這意味著本地變量的值在實例化過程中不會持久。您的代碼需要訪問的任何持久數(shù)據(jù)都必須存儲在其他地方,堆棧中主要供應(yīng)商可用的觸發(fā)器包括您的函數(shù)可以與之交互的數(shù)據(jù)庫。其中一些數(shù)據(jù)庫被稱為無服務(wù)器數(shù)據(jù)庫。這意味著它們的行為與我們在本文中討論的其他無服務(wù)器函數(shù)非常相似,唯一明顯的例外是數(shù)據(jù)被無限期存儲。然而,許多涉及到數(shù)據(jù)庫配置和維護的管理開銷都被擱置了。正如開發(fā)人員Jeremy Daly所說,“您只需要配置集群,然后自動為您處理所有維護、打補丁、備份、復(fù)制和擴展。”像“功能即服務(wù)”產(chǎn)品一樣,您只需要為實際計算時間付費,資源可以根據(jù)需要上下輪換。這三家無服務(wù)器提供商各自提供自己的無服務(wù)器數(shù)據(jù)庫:亞馬遜擁有Aurora Serverless和DynamoDB,微軟擁有Azure CosmosDB,谷歌擁有Cloud Firestore。然而,這些并不是唯一可用的數(shù)據(jù)庫。Nemanja Novkovic有更多產(chǎn)品的信息。
8.無服務(wù)器離線:您可能會發(fā)現(xiàn)開始使用無服務(wù)器計算的前景有些令人望而生畏,因為您似乎需要與供應(yīng)商簽訂合同來體驗它的工作原理。但是不要擔心:有很多方法可以在本地硬件上離線運行無服務(wù)器代碼。例如,AWS SAM提供了允許您離線測試Lambda代碼的本地功能。此外,如果您使用的是無服務(wù)器應(yīng)用程序框架,請檢查允許您在本地運行代碼的無服務(wù)器離線版。
6.無服務(wù)器供應(yīng)商:AWSLambda、Azure函數(shù)和谷歌云函數(shù):無服務(wù)器計算的現(xiàn)代時代始于2014年基于亞馬遜云服務(wù)的平臺AWS Lambda的發(fā)布。微軟在2016年推出了AzureFunctions。自2017年以來一直處于測試階段的GoogleCloud Functions終于投入生產(chǎn),并于2018年7月上線。這三種服務(wù)的局限性、優(yōu)勢、支持的語言和處理方式略有不同。RohitAkiwatkar詳細描述了三者之間的區(qū)別。運行的是基于開源的ApacheOpenWhisk平臺的IBM云函數(shù)。在所有的無服務(wù)器計算平臺中,AWSLambda是最突出的,顯然也是發(fā)展成熟時間最多的。InfoWorld涵蓋了過去一年中AWS Lambda的更新和新增功能。
7.無服務(wù)器框架:它值得停留在等式的框架部分,因為它將在很大程度上定義您最終將如何構(gòu)建應(yīng)用程序。亞馬遜有自己的本地產(chǎn)品,即開源無服務(wù)器應(yīng)用模型(SAM),但也有其他產(chǎn)品,大部分是跨平臺和開源的。最受歡迎的一個叫做(通常稱為無服務(wù)器),強調(diào)它為每個支持的平臺(AWS Lambda、Azure Functions、Google Cloud Functions和IBMopen晶須)提供相同的體驗。另一個受歡迎的產(chǎn)品是Apex,它可以幫助一些提供商無法使用的語言陷入困境。
8.無服務(wù)器計算和Kubernetes:容器可以幫助無服務(wù)器技術(shù)在后臺運行,但管理它們的成本是供應(yīng)商的責任,因此用戶看不見。許多人將無服務(wù)器計算視為在不處理其復(fù)雜性的情況下獲得容器化微服務(wù)的許多優(yōu)勢的一種方式,甚至開始談?wù)摵笕萜魇澜?。事實上,容器和無服務(wù)器計算幾乎肯定會在未來許多年共存,事實上,無服務(wù)器功能可以與容器化微服務(wù)存在于同一個應(yīng)用程序中。Kubernetes是最流行的容器編排平臺,它也可以管理無服務(wù)器基礎(chǔ)設(shè)施。事實上,使用Kubernetes,您可以在一個集群上集成不同類型的服務(wù)。租用服務(wù)器可咨詢夢飛云idc了解。