開源Serverless正當時
Linux、Kubernetes、Ansible及新近興起的Linux容器在企業中早已屢見不鮮。特別是容器技術,大大提升了應用程序部署的便捷性與執行效率。如今,越來越多的應用程序在構建之初就考慮到按需自助服務、資源池與快速彈性等核心云特性。
與此同時,也有不少企業仍在依賴傳統的靜態基礎設施配置模型支持這類動態程度不斷提升的新型應用。但在如今這個基于云、數據密集與事件驅動的世界當中,舊藥方顯然治不了新癥狀。
雖然傳統服務器基礎設施在某些工作負載中確實適用,但往往在基本思路上就與更高效率、更高敏捷性的目標有所沖突。傳統服務器往往要求始終開啟,并24/7全天候全容量運行;與之形成鮮明反差的是,這些昂貴的設備只需要偶爾處理一波短暫的容量峰值。另外,傳統服務器還要求開發者提前了解其基礎設施需求,這顯然是給開發者戴上了手銬和腳鐐。開發者希望做好自己份內的工作,而非分神于硬件組件和其他配置。
Serverless,即無服務器計算,有助于緩解這些挑戰。雖然無服務器并不是什么新興概念,但其仍然沒有得到充分的運用甚至理解。這里我們要強調一句:任何已經在使用容器化應用程序開發體系的企業,都有必要認真研究無服務器計算框架。下面,我們將具體聊聊無服務器計算是什么,企業能夠如何借此優化自身資源利用率(包括技術和人員兩個方面),以及開源無服務器技術為什么能夠為現代應用開發提供理想的補充。
定義無服務器計算
無服務器計算是一種云原生概念,使得企業能夠將服務器、數據庫甚至是應用程序邏輯的管理工作外包給云平臺。在無服務器計算環境當中,開發者能夠自由構建并運行應用程序,而不再被迫分心于缺乏差異化意義的底層基礎設施。
有趣的是,無服務器計算并不是真的“沒有服務器”,正如“無線”通信其實也有線一樣。雖然最終用戶確實不必用固定線纜把筆記本電腦同路由器連接起來,但整個體系依然要靠長達數千英里的光纖傳輸網絡請求。無服務器也是這個道理:服務器還是有的,只是被平臺或者云服務商從開發者那邊抽象了出來。開發人員只需要把自己的應用程序打包到容器中,即可快速完成部署。
在處理整體式或其他遺留系統時,這種借助容器打包應用程序的能力尤其重要,有效消除了應用代碼的重寫需求。與之對應,傳統的專有解決方案更適合從零開始構建應用程序。在將遺留應用程序交由容器打包之后,這些程序即可接受Kubernetes的編排,并根據需要以事件驅動的方式啟動、或關閉,全程無需任何重寫。
事實上,事件驅動模式也正是無服務器計算的核心優勢之一。與始終開啟、24/7全天候全容量運行的傳統架構不同,無服務器資源僅在必要時啟用。無服務器對數據科學項目大有裨益,包括各類人工智能與機器學習負載。在這類使用場景下,原始數據可能需要在攝取過程中進行轉換或塑形。使用無服務器計算,這些工作負載同樣不需要持續運行——只在數據攝取時按需執行即可。
Serverless 提高開發效率
擁有DevOps團隊或基于容器開發方法的企業可能已經為開源生態系統的建設投入了資金。對他們來說,使用開源無服務器模型補充當前開發方法極具現實意義,因為這樣的模型能夠以更高效的方式支持原有工作。
另一方面,專有的無服務器解決方案往往迫使開發者放棄自己熟悉的代碼構建與測試方式,這無疑是讓用戶“剛出虎穴、又入狼窩”,同樣達不到最大程度提升生產效率的目標。借助開源無服務器框架,開發人員能夠繼續將現有工作流打包至容器當中,以不受干擾、毫無阻礙的方式推進工作進程。
開源技術還能減輕對于專業技能或額外培訓的需求。不同于很多需要額外工具(例如無服務器數據庫)才能正常運作的專有無服務器計算平臺,開源解決方案不會給使用團隊帶來任何額外的工作流程或技術挑戰。
雖然開源無服務器計算框架未必適合所有用例,但其在某些場景下確實擁有巨大的價值,例如在不同時期從多個來源提取數據。只要應用得當,無服務器計算將迸發出難以想象的能量,幫助企業真正在生產效率與敏捷性之間找到完美平衡點。