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