無伺服器計算,如何節省時間和成本?

2019-07-24     科技百分百

譯者 | 風車雲馬

出品 | CSDN雲計算(ID:CSDNcould)

為了解決面臨的業務問題,通常需要開發人員花費一定的時間編寫完代碼,再交由運維工程師確保正常的運行,整個過程下來比開發的時間要多的多。因為運維工程師不僅要清楚如何在特定的計算機上運行開發人員編寫的代碼,而且要確保它們在後續工作中平穩的運行——這倒像是一個永無止境的任務。為什麼不把這部分工作留給別人呢?

在過去20年的發展中,IT領域的許多創新——虛擬機、雲計算、容器——不必過多考慮代碼運行的底層物理機器。近年來,無伺服器計算也變得越來越流行。它不用了解運行代碼的任何硬體或作業系統,因為所有這些都由服務供應商來提供。

什麼是無伺服器計算?

無伺服器計算是雲的一個執行模型,在這個模型中,雲提供商動態地分配特定代碼段所需的計算和存儲資源。涉及的伺服器也完全由供應商負責供應和維護。2017年,亞馬遜的無伺服器倡導者克里斯·芒斯(Chris Munns)在一次會議上表示,「在編寫和部署代碼的開發者看來,根本不需要管理或提供伺服器。任何涉及到主機管理或在作業系統級別的處理,都不屬於無伺服器世界。」

開發人員Mike Roberts解釋說,這個術語曾經用於所謂的「後端即服務」場景,即移動應用程式將連接到完全託管在雲中的後端伺服器。如今當人們談到無伺服器計算或無伺服器體系結構時,他們指的是「功能即服務」,其中客戶只編寫處理業務邏輯的代碼並將其上傳到供應商那裡。供應商負責相關硬體供應、虛擬機和容器管理,也包括多線程這樣的任務。

無伺服器服務是事件驅動型的,這意味著只有觸發請求時才調用代碼。供應商只按執行代碼的時間收費,而不是對維護的物理或虛擬伺服器收費。可以將這些服務創建成管道或者應用程式的組件,與容器或傳統伺服器上運行的其他代碼進行交互。

無伺服器計算的優點和缺點

無伺服器計算有兩個明顯的好處:開發人員只需要關注代碼的業務目標,而不是基礎設施問題;而且企業只為它們實際使用的計算資源付費,而不是購買物理硬體或租用閒置的雲服務。

這對於事件驅動的應用程式特別有優勢。例如應用程式可能大部分時間處於空閒狀態,但在某些條件下必須同時處理許多事件請求;或者有一個應用程式,它處理來自有限或間歇性Internet連接的物聯網設備的數據。在這兩種情況下,傳統的方法都需要提供一個強大的有處理峰值能力的伺服器,但是該伺服器在大多數情況下都沒有得到充分利用。使用無伺服器架構,您只需為實際使用的伺服器資源付費。無伺服器計算也適用於特定類型的批處理,例如上傳和處理一系列單獨的圖像文件,並將它們發送到應用程式的另一節點。

無伺服器最明顯的缺點是,它們不適合長期任務。大多數無伺服器供應商不會讓代碼執行超過幾分鐘,但是每次啟動服務時,它不會保留以前運行實例中的任何數據。還請注意,無伺服器的代碼可能需要長達幾秒鐘的時間來啟動——這對於大多數用例來說都不是問題,除非您的應用程式需要較低的延遲。

無伺服器也存在其他一些缺點,這可能與廠商有關。目前無伺服器市場由大型商業雲提供商所主導,這意味著開發人員一旦使用來自供應商的工具,如果不滿意就很難切換。而且,由於太多的無伺服器計算是在供應商的基礎設施上進行的,因此很難將無伺服器代碼集成到內部開發和測試管道中。

無伺服器供應商:AWS Lambda、Azure和Google雲

無伺服器計算始於2014年推出的AWS Lambda,這是一個基於亞馬遜雲服務的平台。2016年,微軟也推出了Azure功能。2017年,谷歌雲功能開始測試,於2018年7月正式生產。這三種服務的優勢、劣勢、支持的語言和處理方式略有不同。還有IBM Cloud功能也在部署中,它是基於開源Apache OpenWhisk平台。

無伺服器堆棧(Serverless stacks)

與許多軟體領域的情況類似,無伺服器時代見證了軟體堆棧的演變,這些堆棧將構建無伺服器應用程式所需的不同組件組合在一起。無伺服器堆棧包含要編寫代碼的語言環境、為代碼提供結構的應用程式框架和平台啟動代碼的觸發器。

這些內容根據供應商的不同,也有一些區別。例如對於開發語言,AWS Lambda支持 Node.js、Java、Go、C#和Python,但是Azure只支持JavaScript、C#和F#。關於觸發器,AWS Lambda其中許多都是針對AWS平台的,比如Amazon Simple Email Service和AWS CodeCommit;谷歌雲服務還可以通過通用HTTP請求觸發。

無伺服器框架(Serverless frameworks)

軟體框架/軟體架構對構建應用程式非常重要。Amazon有自己的軟體架構,如無伺服器應用模型( Serverless Application Model,SAM),其中大多數是跨平台的,也是開源的。其中最流行的是無伺服器框架,例如AWS Lambda、Azure服務、谷歌雲服務和IBM OpenWhisk。另一個受歡迎的產品是Apex,它的優勢在於提供了更為豐富的語言環境。

無伺服器資料庫(Serverless databases)

無伺服器計算的缺點是沒有持久狀態,這意味著本地變量的值不會保存。因此代碼需要訪問的任何持久性數據都必須存儲在其他地方,大部分無伺服器供應商都提供了可以與之交互的資料庫。

與其他服務不同的是,無伺服器資料庫的數據是無限期存儲的。通過配置集群,資料庫所有的維護、補丁、備份、複製和擴展都將自動完成,從而大大節省成本開銷。功能即服務,您只需要為實際使用的計算時間付費,並且能夠根據需要對資源進行靈活調整。

三大無伺服器提供商都提供了自己的無伺服器資料庫:Amazon有Aurora serverless和DynamoDB, Microsoft有Azure Cosmos DB,谷歌有Cloud Firestore。不過,這些並不是唯一可用的資料庫。

無伺服器計算和Kubernetes

容器有助於在底層支持無伺服器技術,由供應商負責管理容器的開銷,因此對用戶是不可見的。許多人將無伺服器計算視為實現微服務容器化的一種方法,甚至開始討論後容器時代。

事實上,容器和無伺服器計算可能會在未來的許多年中共存,而且無伺服器服務可以與容器化的微服務存在於同一個應用程式中。最流行的容器編制平台Kubernetes也可以管理無伺服器的基礎設施。您可以使用Kubernetes在單個集群上集成不同類型的服務。

無伺服器離線運行(Serverless offline)

這樣看來,無伺服器計算貌似需要與供應商簽約(合作開發)才能體驗,是不是感覺使用無伺服器計算的前景有點嚇人。但是不要擔心:無伺服器的代碼也是可以在本地硬體上離線運行的。例如,AWS SAM就提供了一個本地運行代碼的插件Serverless-offline,支持離線測試Lambda代碼。快來嘗試吧!

如果你是一個狂立學習flag卻屢屢打臉的懶癌晚期,或者是一個對雲計算方面雲里霧裡,不知所措的好學者,亦或是一位資深行業專家,都歡迎關注【CSDN雲計算公眾號】,爆發自己學習的洪荒之力吧!

福利

掃描添加小編微信,備註「姓名+公司職位」,加入【雲計算學習交流群】,和志同道合的朋友們共同打卡學習!


文章來源: https://twgreatdaily.com/zh-hk/D_kqKmwBmyVoG_1Z0fBJ.html