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