無服務器是當前軟件架構模式中的熱門話題之一,像許多軟件工程中的其他術語或趨勢一樣,無服務器也沒有一個明確的定義,所以在這篇文章中我們會簡單介紹一下無服務器的基本概念,并圍繞無服務器的幾個爭論點展開討論。
什么是無服務器?
根據MartinFowler.com的定義,無服務器體系結構是指主要依賴于第三方服務(稱為后端即服務或"BaaS")的應用程序或在臨時容器中運行的自定義代碼(功能即服務或"FaaS")。
如上說述,如果你沒有維護或管理自己的基礎架構來運行應用程序,并根據使用情況付費(或者不付費),同時從供應商那里自動獲得所需級別的高可用性、可擴展性和容錯性,那么你就正在運行一個無服務器的應用程序。作為在無服務器環境中運行應用程序的所有者,你可以將所有的精力放在應用程序業務邏輯上,而不必擔心其運行的基礎架構以及應用程序周圍的其他非功能性需求。
無服務器只是炒作?
如果你是無服務器的新手,并且在考慮將其作為架構,那么這就會成為你需要面對的問題之一。沒錯兒,無服務器是現在的熱門話題,但是綜合了之前和之后的發展,我個人認為無服務器并不是一個短期內的炒作,至少在3-5年不是,圍繞無服務器的技術或許會被改變、替換,但是無服務器的概念不會。
技術層面如何向無服務器發展?
俗話說得好,觀往知來、知古鑒今,所以在解釋無服務器功能如何強大之前,我們先來看看它是如何在過去幾年演變的:
1989 - 1991年 - Sir Tim Berners-Lee發明了萬維網
1991 - 1995年 - 裸機時代
1995年 web hosting
1999年 - 軟件即服務(SaaS)概念由Salesforce引入
2001年 - VMWare發布ESXi,"服務器虛擬化"成為了一件大事
2002-2006-AWS提出IaaS,人們開始談論"云計算"
2009年 Heroku提出"平臺即服務"(PaaS)
2011年 - Envolve / Firebase,實時數據庫即服務
2012年 - Parse.com和第一個后端即服務(BaaS)
2013年 - Docker,"容器比虛擬機好"
2013-2015 - Kubernetes / Swarm / Nomad / CoreOs(containers at scale)
2014年 - AWS Lambda推出(FaaS)
AWS lambda誕生了,無服務器這個詞與FaaS一起出現在舞臺上,雖然大多數人認為Lambda是無服務器的起點,但是containerization 將無服務器遷移推向第一個高潮,隨著containerization的出現,全球領先的云服務提供商開始向客戶提供"付費即用"的概念以及最需要的非功能性需求,支持使用其基礎架構運營業務。
無服務器應用程序的關鍵特性
無服務器應用程序有四個關鍵特征:
沒有服務器管理 -顧名思義,對于無服務器應用程序,應用程序所有者不需要涉及任何物理服務器。如果你是應用程序所有者,那么你將不知道有多少服務器代表你的應用程序及其物理位置運行。
靈活的擴展 - 因為你不需了解物理服務器層,所以不必擔心可伸縮性。應用程序將按需分配更多資源以管理所需的容量級別。
高可用性 - 冗余和容錯是無服務器框架的內置功能,不必保留自己的服務器以使應用程序高度可用。如果處理節點發生故障,框架會自動為您生成一個新節點或幾個節點。
成本控制- 在無服務器的環境中,您無需多花費時間,這是成本考慮的關鍵優勢之一。
FaaS和無服務器是一樣的嗎?
這是一個趨勢類的常見問題,有些人聲稱FaaS是無服務器概念的技術實現,還有一些人認為無服務器不局限于FaaS,而是一個更廣泛適用的概念。作為我個人來講,我更贊同后面一種說法。
FaaS只是無服務器體系結構的事件驅動處理部分。對于應用程序來說,還有許多其他必需的構建塊,如數據持久性,數據流,消息傳遞,用戶管理等等,以便提供一些端到端的功能。最重要的是有一些沒有FaaS組件的應用程序,但仍然可以被認為是無服務器應用程序。
舉個例子,如果我們需要一些靜態的虛擬主機,我們可以做到這一點,而不必考慮物理服務器。如果我們認為AWS是我們的云服務提供商,我們可以將我們的網頁內容托管在S3存儲桶中,并啟用靜態虛擬主機來托管網頁。為了使其完成,你可以使用Route 53作為DNS和CloudFront作為CDN.
另一個例子是一個 thick client的Web應用程序,它只使用后端服務來進行身份驗證和數據持久化。你實現這種應用程序無需擁有自己的物理服務器以及FaaS組件,有許多服務可用于身份驗證和數據持久性。
無服務器會是未來嗎?
在回答這個問題之前,我建議你先去看一下AWS的產品頁面,如果你仔細看,那么你會發現大約有100個"服務產品",涵蓋了從開發到部署和維護的整個軟件開發生命周期。
如何看待AWS的愿景?我堅信,云主機租用,它將改變世界,使我們能夠在解決方案的基礎上全面開發,測試,部署和維護我們的應用程序。