這篇文章給大家介紹什么是Serverless,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供和田縣網(wǎng)站建設(shè)、和田縣做網(wǎng)站、和田縣網(wǎng)站設(shè)計(jì)、和田縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、和田縣企業(yè)網(wǎng)站模板建站服務(wù),十余年和田縣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
什么是Serverless?
今天我就帶你深入地了解下 Serverless,看看這到底是什么?
Serverless 能解決什么問題?
從字面意思理解,Serverless 包含 server 和 less兩部分,Server 這里指服務(wù)端,它是 Serverless 解決問題的邊界;而 less 我們可以理解為較少關(guān)心,它是 Serverless 解決問題的目的,因此,組合在一起,Serverless 就是“較少關(guān)心服務(wù)端”。
什么是服務(wù)端?
我們先看 Server,這里我用 Web 應(yīng)用經(jīng)典的 MVC 架構(gòu)來舉例。
MVC 架構(gòu)主要分為前端和后端,前端負(fù)責(zé)客戶終端的體驗(yàn),也就是 View 層;后端負(fù)責(zé)商業(yè)的業(yè)務(wù)邏輯和數(shù)據(jù)處理,也就是 Control 層和 Model 層。如果你有過一些開發(fā)經(jīng)驗(yàn),應(yīng)該會(huì)了解自己的代碼在本地開發(fā)和調(diào)試時(shí)的數(shù)據(jù)流。
通常我們會(huì)在自己電腦上啟動(dòng)一個(gè)端口號(hào),例如 127.0.0.1:3001。瀏覽器訪問這個(gè)地址,就可以調(diào)用和調(diào)試自己的代碼。但如果我們要將這個(gè) Web 應(yīng)用部署到互聯(lián)網(wǎng)上,提供給互聯(lián)網(wǎng)用戶訪問,就需要服務(wù)端的運(yùn)維知識(shí)了。
如果要考慮容災(zāi)和容錯(cuò),可以部署多個(gè) Web 應(yīng)用實(shí)例,以保障異地多活。而為了使多個(gè) Web 應(yīng)用實(shí)例在容災(zāi)和容錯(cuò)的場(chǎng)景下穩(wěn)定地切換流量,我們需要使用負(fù)載均衡服務(wù)和反向代理服務(wù)。負(fù)載均衡服務(wù),正如其名是負(fù)責(zé)將流量均衡地分配到各個(gè)應(yīng)用機(jī)器上;反向代理常見的就是 Nginx,它的任務(wù)是從請(qǐng)求中解析出域名信息,并將請(qǐng)求轉(zhuǎn)發(fā)到上游 upstream 的監(jiān)聽地址。
服務(wù)端的邊界,就是上圖中的整個(gè)藍(lán)色部分,它是負(fù)責(zé)應(yīng)用或代碼的線上運(yùn)維。Serverless 解決問題的邊界,就是服務(wù)端的邊界,即服務(wù)端運(yùn)維。
服務(wù)端運(yùn)維發(fā)展史,從 Serverfull 到 Serverless
我們可以先看看 Serverfull 的概念,然后對(duì)比一下 Serverfull 和 Serverless 之間的差別,相信這樣可以加深你的理解。Serverfull 就是服務(wù)端運(yùn)維全由我們自己負(fù)責(zé),Serverless 則是服務(wù)端運(yùn)維較少由我們自己負(fù)責(zé),大多數(shù)的運(yùn)維工作交給自動(dòng)化工具負(fù)責(zé)。
可能這么說比較抽象,我舉個(gè)例子來說吧。
假設(shè)我有一家互聯(lián)網(wǎng)公司,我的產(chǎn)品是“待辦任務(wù)(ToDoList)”Web 應(yīng)用——即記錄管理每個(gè)用戶的待辦任務(wù)列表。針對(duì)這個(gè)網(wǎng)站的研發(fā),我們簡(jiǎn)化為兩個(gè)獨(dú)立角色:研發(fā)工程師小程和運(yùn)維工程師小服。
做研發(fā)的小程,他是個(gè)精通前后端的全棧工程師,但他只關(guān)心應(yīng)用的業(yè)務(wù)邏輯。具體來說就是,整個(gè) MVC 架構(gòu)的 Web 應(yīng)用的開發(fā)、升級(jí)和問題修復(fù)都?xì)w小程負(fù)責(zé)。負(fù)責(zé)運(yùn)維的小服,則只關(guān)心應(yīng)用的服務(wù)端運(yùn)維事務(wù)。比如負(fù)責(zé)部署上線小程的 Web 應(yīng)用,綁定域名以及日志監(jiān)控。在用戶訪問量大的時(shí)候,給這個(gè)應(yīng)用擴(kuò)容;在用戶訪問量小的時(shí)候,給這個(gè)應(yīng)用縮容;在服務(wù)器掛了的時(shí)候,重啟或者換一臺(tái)服務(wù)器等。
史前時(shí)代,Serverfull
最開始運(yùn)維工程師小服承諾將運(yùn)維的事情全包了,小程不用關(guān)心任何部署運(yùn)維相關(guān)的事情。于是,小程每次發(fā)布新的應(yīng)用,都會(huì)打電話給小服,讓小服部署上線最新的代碼。小服要管理好迭代版本的發(fā)布,分支合并,將應(yīng)用上線,遇到問題回滾。如果線上出了故障,還要抓取線上的日志發(fā)給小程解決。
小程和小服通過工作職責(zé)任務(wù)上的安排,將研發(fā)和運(yùn)維完全隔離開來了。好處很明顯:分工明確,小程可以專心做好自己的業(yè)務(wù);缺陷也很明顯:小服成了工具人,被困在了大量的運(yùn)維工作中,處理各種發(fā)布相關(guān)的瑣碎雜事。
這個(gè)時(shí)代研發(fā)和運(yùn)維隔離,服務(wù)端運(yùn)維都交給小服一個(gè)人,純?nèi)肆μ幚?,也就?Serverfull。
農(nóng)耕時(shí)代,DevOps
我們可以停下來想想,其實(shí)像發(fā)布版本和處理線上故障這種工作,應(yīng)該小程的職責(zé),而不應(yīng)該全部由小服協(xié)助,對(duì)不對(duì)?
實(shí)際上,后來小服也漸漸發(fā)現(xiàn),日常其實(shí)有很多事情都是重復(fù)性的工作,尤其是發(fā)布新版本的時(shí)候,與其每次都等小程電話,線上出故障了還要自己抓日志發(fā)過去,效率很低,不如干脆自己做一套運(yùn)維控制臺(tái) OpsConsole,將部署上線和日志抓取的工作讓小程自己處理。
說干就干,OpsConsole 上線后,小服確實(shí)稍微輕松了一些,但是優(yōu)化架構(gòu)節(jié)省資源和擴(kuò)縮容資源方案,還是需要小服定期審查。而小程除了開發(fā)的任務(wù),每次發(fā)布新版本或解決線上故障,還要自己到 OpsConsole 平臺(tái)上去處理。
這個(gè)時(shí)代就是研發(fā)兼運(yùn)維 DevOps,小程兼任了小服的部分工作,小服將部分服務(wù)端運(yùn)維的工作工具化了,自己可以去做更加專業(yè)的事情。
相對(duì)史前時(shí)代,農(nóng)耕時(shí)代小服已經(jīng)將部分人力的工作工具化了,其結(jié)果是效率變高了。此時(shí),已經(jīng)有Serverless 的趨勢(shì)了。
我們?cè)傧胂肽芊襁M(jìn)一步提升效率,讓小程連 OpsConsole 平臺(tái)都可以不用?
工業(yè)時(shí)代,Serverless
小服發(fā)現(xiàn)資源優(yōu)化和擴(kuò)縮容方案也可以利用性能監(jiān)控 + 流量估算解決,于是小服又基于小程的開發(fā)流程,將 OpsConsole 系統(tǒng)再進(jìn)一步優(yōu)化,幫小程做了一套代碼自動(dòng)化發(fā)布的流水線:代碼掃描 —— 測(cè)試 —— 灰度驗(yàn)證 —— 上線?,F(xiàn)在的小程連 OpsConsole 都可以不用登陸操作,只要將最新的代碼合并到 Git 倉(cāng)庫(kù)指定的 develop 分支,剩下的就都由流水線自動(dòng)化處理發(fā)布上線了。
這個(gè)時(shí)代研發(fā)不需要運(yùn)維了,免運(yùn)維 NoOps。小服的服務(wù)端運(yùn)維工作全部自動(dòng)化了,小程也變回到最初,只需要關(guān)心自己的應(yīng)用業(yè)務(wù)就可以了。
我們不難看出,在服務(wù)端運(yùn)維的發(fā)展歷史中,對(duì)于小程來說,小服的角色存在感越來越弱,需要小服參與的事情越來越少,都由自動(dòng)化工具替代了。
到這里你一定會(huì)想,既然服務(wù)端都做到免運(yùn)維了,小服是不是就自己革了自己的命,失業(yè)了?
未來
實(shí)現(xiàn)了免運(yùn)維 NoOps,并不意味著小服要失業(yè)了,而是小服要轉(zhuǎn)型,轉(zhuǎn)型去做更底層的服務(wù),做基礎(chǔ)架構(gòu)的建設(shè),提供更加智能、更加節(jié)省資源、更加周到的服務(wù)。小程則可以完全不被運(yùn)維的事情困擾,放心大膽地依賴 Serverless 服務(wù),專注做好自己的業(yè)務(wù),提升用戶體驗(yàn),思考業(yè)務(wù)價(jià)值。
免運(yùn)維 NoOps 并不是說服務(wù)端運(yùn)維就不存在了,而是通過全知全能的服務(wù),覆蓋研發(fā)部署需要的所有需求,讓研發(fā)同學(xué)小程對(duì)它的感知越來越少。另外,NoOps 是理想狀態(tài),因?yàn)槲覀冎荒軣o限逼近 NoOps。
另外,你需要知道的是,目前大多數(shù)互聯(lián)網(wǎng)公司,包括一線互聯(lián)網(wǎng)公司,都還在 DevOps 時(shí)代。只是 Serverless 的概念已經(jīng)提出,NoOps 的時(shí)代正在到來。
按照上面的分解,Serverless 可以叫做服務(wù)端免運(yùn)維,這也就是 Serverless 要解決的問題。
到底什么是 Serverless?
總結(jié)來說 Serverless 的含義有這樣兩種:
第一種:狹義 Serverless(最常見)= Serverless computing 架構(gòu) = FaaS 架構(gòu) = Trigger(事件驅(qū)動(dòng))+ FaaS(函數(shù)即服務(wù))+ BaaS(后端即服務(wù),持久化或第三方服務(wù))= FaaS + BaaS
第二種:廣義 Serverless = 服務(wù)端免運(yùn)維 = 具備 Serverless 特性的云服務(wù)
我用圖片來闡明一下這兩種概念。
雖然你可以看到,廣義 Serverless 包含的東西更多,適用范圍更廣,但我們經(jīng)常在工作中提到的 Serverless 一般都是指狹義的 Serverless。這是有歷史原因的,2014 年 11 月份,亞馬遜推出真正意義上的第一款 Serverless FaaS 服務(wù):Lambda。Serverless 的概念才進(jìn)入了大多數(shù)人的視野,也因此 Serverless 曾經(jīng)一度就等于 FaaS。
圖中有幾個(gè)陌生的名詞,我先來給你解釋下。FaaS(Function as a Service) 就是函數(shù)即服務(wù),BaaS(Backend as a Service) 就是后端即服務(wù)。XaaS(X as a Service) 就是 X 即服務(wù),這是云服務(wù)商喜歡使用的一種命名方式,比如,我們熟悉的 SaaS、PaaS、IaaS 都是這樣。
先說 FaaS,函數(shù)即服務(wù),它還有個(gè)名字叫作 Serverless Computing,它可以讓我們隨時(shí)隨地創(chuàng)建、使用、銷毀一個(gè)函數(shù)。
你可以想一下通常函數(shù)的使用過程:它需要先從代碼加載到內(nèi)存,也就是實(shí)例化,然后被其它函數(shù)調(diào)用時(shí)執(zhí)行。在 FaaS 中也是一樣的,函數(shù)需要實(shí)例化,然后被觸發(fā)器 Trigger 或者被其他的函數(shù)調(diào)用。二者最大的區(qū)別就是在 Runtime,也就是函數(shù)的上下文,函數(shù)執(zhí)行時(shí)的語(yǔ)境。
FaaS 的 Runtime 是預(yù)先設(shè)置好的,Runtime 里面加載的函數(shù)和資源都是云服務(wù)商提供的,我們可以使用卻無法控制。你可以理解為 FaaS 的 Runtime 是臨時(shí)的,函數(shù)調(diào)用完后,這個(gè)臨時(shí) Runtime 和函數(shù)一起銷毀。
FaaS 的函數(shù)調(diào)用完后,云服務(wù)商會(huì)銷毀實(shí)例,回收資源,所以 FaaS 推薦無狀態(tài)的函數(shù)。如果你是一位前端工程師的話,可能很好理解,就是函數(shù)不可改變 Immutable。簡(jiǎn)單解釋一下,就是說一個(gè)函數(shù)只要參數(shù)固定,返回的結(jié)果也必須是固定的。
用我們上面的 MVC 架構(gòu)的 Web 應(yīng)用舉例,View 層是客戶端展現(xiàn)的內(nèi)容,通常并不需要函數(shù)算力;Control 層,就是函數(shù)的典型使用場(chǎng)景。MVC 架構(gòu)里面,一個(gè) HTTP 的數(shù)據(jù)請(qǐng)求,就會(huì)對(duì)應(yīng)一個(gè) Control 函數(shù),我們完全可以用 FaaS 函數(shù)來代替 Control 函數(shù)。在 HTTP 的數(shù)據(jù)請(qǐng)求量大的時(shí)候,F(xiàn)aaS 函數(shù)會(huì)自動(dòng)擴(kuò)容多實(shí)例同時(shí)運(yùn)行;在 HTTP 的數(shù)據(jù)請(qǐng)求量小時(shí),又會(huì)自動(dòng)縮容;當(dāng)沒有 HTTP 數(shù)據(jù)請(qǐng)求時(shí),還會(huì)縮容到 0 實(shí)例,節(jié)省開支。
此刻或許你會(huì)有點(diǎn)疑惑,Runtime 不可控,F(xiàn)aaS 函數(shù)無狀態(tài),函數(shù)的實(shí)例又不停地?cái)U(kuò)容縮容,那我需要持久化存儲(chǔ)一些數(shù)據(jù)怎么辦,MVC 里面的 Model 層怎么解決?
此時(shí)我就要介紹另一位嘉賓 —— BaaS 了。
BaaS 其實(shí)是一個(gè)集合,是指具備高可用性和彈性,而且免運(yùn)維的后端服務(wù)。說簡(jiǎn)單點(diǎn),就是專門支撐 FaaS 的服務(wù)。FaaS 就像高鐵的車頭,如果我們的后端服務(wù)還是老舊的綠皮火車車廂,那肯定是要散架的,而 BaaS 就是專門為 FaaS 準(zhǔn)備的高鐵車廂。
MVC 架構(gòu)中的 Model 層,就需要我們用 BaaS 來解決。Model 層我們以 MySQL 為例,后端服務(wù)最好是將 FaaS 操作的數(shù)據(jù)庫(kù)的命令,封裝成 HTTP 的 OpenAPI,提供給 FaaS 調(diào)用,自己控制這個(gè) API 的請(qǐng)求頻率以及限流降級(jí)。這個(gè)后端服務(wù)本身則可以通過連接池、MySQL 集群等方式去優(yōu)化。各大云服務(wù)商自身也在改造自己的后端服務(wù),BaaS 這個(gè)集合也在日漸壯大。
基于 Serverless 架構(gòu),我們完全可以把傳統(tǒng)的 MVC 架構(gòu)轉(zhuǎn)換為 BaaS+View+FaaS 的組合,重構(gòu)或?qū)崿F(xiàn)。
這樣看下來的話,狹義 Serverless 的含義也就不難理解了。
第一種:狹義 Serverless(最常見)= Serverless computing 架構(gòu) = FaaS 架構(gòu) = Trigger(事件驅(qū)動(dòng))+ FaaS(函數(shù)即服務(wù))+ BaaS(后端即服務(wù),持久化或第三方服務(wù))= FaaS + BaaS
Serverless 毋庸置疑正是因?yàn)?FaaS 架構(gòu)才流行起來,進(jìn)入大家認(rèn)知的。所以我們最常見的 Serverless 都是指 Serverless Computing 架構(gòu),也就是由 Trigger、FaaS 和 BaaS 架構(gòu)組成的應(yīng)用。這也是我給出的狹義 Serverless 的定義。
那什么是廣義 Serverless 呢?
將狹義的 Serverless 推升至廣義,具備以下特性的,就是 Serverless 服務(wù)。你可以回憶一下小服的工作,要達(dá)成 NoOps,都應(yīng)該具備什么條件?
小服的工作職責(zé):
無需用戶關(guān)心服務(wù)端的事情(容錯(cuò)、容災(zāi)、安全驗(yàn)證、自動(dòng)擴(kuò)縮容、日志調(diào)試等等)。
按使用量(調(diào)用次數(shù)、時(shí)長(zhǎng)等)付費(fèi),低費(fèi)用和高性能并行,大多數(shù)場(chǎng)景下節(jié)省開支。
快速迭代 & 試錯(cuò)能力(多版本控制,灰度,CI&CD 等等)。
廣義 Serverless,其實(shí)就是指服務(wù)端免運(yùn)維,也是未來的主要趨勢(shì)。
總結(jié)來說的話就是,我們?nèi)粘U?Serverless 的時(shí)候,基本都是指狹義的 Serverless,但當(dāng)我們提到某個(gè)服務(wù) Serverless 化的時(shí)候,往往都是指廣義的 Serverless。
狹義 Serverless 是指用 FaaS+BaaS 這種 Serverless 架構(gòu)開發(fā)的應(yīng)用;廣義 Serverless 則是具備 Serverless 特性的云服務(wù)?,F(xiàn)在的云服務(wù)商,正在積極地將自己提供的各種云服務(wù) Serverless 化。
關(guān)于什么是Serverless就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。