無服務器軟件架構已經吸引很多人關注,它為什么會讓人們這么感興趣呢?無服務器意味著什么呢?function-as-a-service 與無服務器有什么區別?AWS Lambda、IBM OpenWhisk、Azure Functions和谷歌Cloud Functions等服務的機制是什么?這一切會如何發展?
無服務器與FaaS
在最近舉行的Serverless大會中,主題演講中最引人關注的是無服務器的各種定義。這也表明這項技術仍然處于其生命周期非常早的介入期。一般來說,大多數人都會認同“無服務器”是指軟件架構,而FaaS則描述了開發人員在這個架構中部署業務邏輯的關鍵機制。
例如,如果你在AWS S3服務運行靜態HTML網站,這是無服務器(架構)的定義。但如果沒有業務邏輯來用自定義數據對用戶交互作出響應,這個網站無法完成很多工作。這也是四大云服務提供商(AWS、IBM、微軟和谷歌)以及其他開源提供商(例如Iron.io和Fission)發揮作用的地方。
FaaS的最佳定義來自Serverless Framework首席執行官Austen Collins,該公司可能是該領域最熱門的初創公司。Collins認為,FaaS的定義如下圖所示:
FaaS平臺為開發人員提供構建微服務的能力,微服務可對事件作出響應、自動擴展、每次執行支付費用,并利用Amazon DynamoDB或者IBM Watson等大型服務器系統。生態系統和微服務方法是FaaS平臺與容器世界分享的好功能。當你了解FaaS平臺的工作原理后,你就會明白為什么存在這些相似之處。
FaaS平臺內部運作
我們可以在歷史背景下考慮FaaS。在20世紀90年代初,我們只有裸機可用來運行我們的代碼,而獲得新的計算單元需要幾個月時間。隨著虛擬機管理程序的出現,虛擬化將這個時間縮短到幾分鐘。通過使用不同的Linux內核資源分離技術,而不需要使用虛擬機管理器,現在容器可在幾秒鐘內為我們提供計算單元。
FaaS平臺如何將這個時間達到毫秒級?想象一下已經分離的容器裝配線,內部有Node.js或者Python等語言運行時間,但還沒有業務邏輯代碼。當事件被觸發時,包含響應該事件的業務邏輯的函數會從磁盤讀取,并被插入到預熱的容器中,其中已經具有相應的語言。你的函數會執行,代碼被刪除,相同的容器還可用于下次事件。
當然,在這個過程中會有些變化,將你的代碼保存在完全熱的容器中用于下次處理相同的事件。但這里的關鍵概念是,FaaS平臺以創造性的方式利用容器,讓你可映射函數執行到特定事件。當你關聯這些事件(例如數據庫寫入或者IoT設備信號)時,你可從這些更小的組件中創建更大的應用程序。
這一切都將如何發展?
無服務器仍然是一個年輕的市場,現在還可能處于早期部署的開始階段。但它背后有著大型提供商的支持,還有很多開源替代品,并且很多初創公司也正在為其提供免費工具。
無服務器的一個有趣的方面是,它可能可完全改變供應商鎖定的概念。假設你喜歡使用Amazon Polly進行語音文本轉換,但文字情感分析又喜歡使用IBM Watson。你的前端應用程序可以錄制語音,發送錄音到AWS的Polly功能,并將結果發送到Watson。因此,你可為特定的工作選擇合適的工具,而不是被鎖定在特定供應商或者生態系統。當你通過功能即服務構建時,各個部件都足夠小,可隨時挑選以及選擇供應商。
在Serverless大會中,iRobot、Norstrom和Capital One等公司討論了他們如何成功地應用這項技術,這證明該技術不僅僅適合初創公司,也適合成熟的企業。盡管很多早期部署者還沒有使用無服務器用于面向用戶的工作負載,但用戶與無服務器應用交互的那一天即將到來。