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