云計算已經對數據中心的運行方式產生了深遠的影響,但是云計算的最新趨勢可能會以無服務器計算的形式提供另一個改變,這將有助于使客戶更加靠近效用計算。
無服務器計算實際上是一個誤稱,因為它絕對不會消除服務器。相反,它消除了云計算消費者直接處理服務器的需求,無論是配置或管理這些服務器,使用戶專注于開發和部署業務邏輯,而不是專注于自己的應用程序或服務。
這聽起來很像平臺即服務(PaaS),這是一個久經考驗的云服務模型,但是無服務器的方法將應用程序和服務分解成更小和更離散的功能。一些無服務器的支持者甚至創造了術語“即服務”(FaaS)來描述它。
亞馬遜的做法
目前無服務器計算的熱潮可以追溯到亞馬遜在2014年將其納入其Amazon Web Services(AWS)云組合中的Lambda服務。Lambda是一個事件驅動的函數,使開發人員能夠創建將運行的代碼響應某些事件或觸發器。
然而,Lambda的一個關鍵方面是它自動管理運行和擴展代碼的高可用性所需的計算資源,客戶僅支付代碼實際運行時占用的CPU計算時間。
例如,Lambda可以用于驅動Web服務器,并且將消耗很少的資源或沒有資源。AWS已經在Github上發布了一個參考架構,以及其他一些例如物聯網后端。
開發和運營基于云計算的服務的傳統方式是提供足夠的服務器和存儲資源來運行代碼和處理數據,客戶負責提供正確的容量,監控性能,以及容錯和可擴展性設計。
此外,經營這種服務所需的資源通常必須持續可用的,并且隨時可以使用,這意味著客戶無論使用何種方式都為他們付費,除非他們開發自己的系統來按需提供資源,并在不需要的時候釋放它們。
所有這些意味著構建基于云計算的基礎設施來提供應用程序和服務可能被證明是比云計算提供商承認的更復雜和耗時的任務,這是無服務器計算尋求解決的問題的一部分。
分析機構Quocirca公司的Clive Longbottom表示:“無服務器計算確實具有更高的云計算水平。之前已經評論過用戶對AWS和Azure的依賴,用戶在建立頂層的任何軟件堆棧之前,仍然依賴于擁有非常聰明的系統架構師,可以構建基本的基礎資源。”
他補充說:“轉向一個可以得到期望結果的平臺,這意味著人們開始有更多的能力,這是人們想要做的,那么讓它發生。”
換句話說,無服務器計算代表了旨在隱藏底層基礎架構的另一個抽象級別。而且,盡管AWS可能是此方法最明顯的支持者,但其他來源(例如Google Cloud Functions,Windows Azure Functions或IBM OpenWhisk)也開始提供類似的服務。Iron.io公司的一個開發人員有一個名為Iron Functions的無服務器應用平臺,它是開源的,可以在公有云或私有云上運行,并且與AWS公司的Lambda兼容。
預測成本
雖然無服務器計算可能從客戶的角度來看有一些優勢,但它也可以為實現這些功能的服務提供商帶來一些好處。如果采用像AWS Lambda這樣的無服務器計算函數,那么在任何給定的時刻可能會導致更少的資源被捆綁,以便操作客戶的基于云計算的應用程序,這樣可以使服務提供商減少他們需要隨時可用的剩余容量。
然而,為了擺脫這個可能需要更復雜的數據中心監控和編排工具的伎倆,如果客戶更多地利用能夠自動擴展以滿足需求峰值的Lambda等功能,預測需求就會變得更加復雜。
無服務器計算可能對客戶有一些優勢,也可為服務提供商帶來一些好處。在任何特定的時刻,它可能導致資源減少,以便操作客戶的基于云計算的應用程序。
同時,根據Long bottom的說明,無服務器計算不能解決客戶云服務的主要難題,該公司正在能夠準確地預測運營應用程序和服務需要多少費用,以滿足可接受的服務質量需求所需的水平。
他說:“真正地讓客戶了解定價是如何隨著使用情況而變化的,這是AWS最黑暗的地方之一,”盡管這同樣適用于許多其他云提供商。“雖然AWS公司公布了費用,就像說開車的成本一術很容易解決,而這是基于每加侖的里程,加上輪胎的磨損,這取決于開車和道路的類型等因素,無服務器應該隱藏一些這樣的黑暗。但是只有當客戶可以讓AWS在其收費方式上得到公開的時候。”Long bottom補充道。
鎖住恐懼
這就是為什么企業客戶更喜歡談判合同,詳細規定他們需要什么能力,以及他們要支付多少費用的原因。
然后是供應商鎖定的傳統套路。使用基于專有功能的無服務器計算,如果客戶需要執行此操作,可能難以將服務從一個云提供商遷移到另一個云服務器。
“對于那些仍然提供自己的代碼,編排系統可能能夠在硬件層面處理各個系統的變幻莫測。但是如果使用無代碼方法,客戶將更加信任服務提供商。”Long bottom評論道。
“對于那些系統架構師和大型編程人員比較罕見的小型機構來說,這可能是正確的。”
使用AWS Lambda進行無服務器開發
亞馬遜公司的Lambda也許是無服務器計算的典型例子。AWS Lambda于2014年推出,允許開發人員創建代碼,作為響應某些事件或觸發器運行的“Lambda函數”。
其他AWS服務通常將是這些事件的來源,例如出現在亞馬遜S3存儲服務的特定存儲區中的新對象,對Amazon Dynamo DB數據庫表進行的更新或Amazon Kinesis Stream中提供的新數據。
因為Lambda函數僅在需要時運行,所以用戶應該僅在代碼實際運行時為計算資源支付費用。因此,AWS為客戶以僅僅100毫秒的增量計費用量,而不是按小時計費,這通常是虛擬機實例的最低費用單位。
AWS公司現在有一個無服務器應用程序模型(AWS SAM),用于開發人員創建無服務器應用程序。這由AWSCloudFormation本機支持,并使用簡化的語法來指定資源。
開發人員使用AWS Serverless應用程序模型(使用Cloud Formation模板的簡化版本定義)部署應用程序,并可以使用多種編程語言(如Node.js,Python,Java和C#)創建代碼。