溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何淺析基于Serverless的前后端一體化框架

發(fā)布時(shí)間:2021-12-18 18:31:28 來(lái)源:億速云 閱讀:186 作者:柒染 欄目:服務(wù)器

如何淺析基于Serverless的前后端一體化框架,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

概述

Serverless 是一種“無(wú)服務(wù)器架構(gòu)”模式,它無(wú)需關(guān)心程序運(yùn)行環(huán)境、資源及數(shù)量,只需要將精力聚焦到業(yè)務(wù)邏輯上的技術(shù)?;? Serverless 開(kāi)發(fā)  web 應(yīng)用,架構(gòu)師總是試圖把傳統(tǒng)的解決方案移植到 Serverless 上,雖然可以做到既擁有  Serverless  新技術(shù)帶來(lái)的紅利,又能維持住傳統(tǒng)開(kāi)發(fā)模式的開(kāi)發(fā)體驗(yàn)。但是,Serverless  技術(shù)帶來(lái)的改變可能不止這些,可能是顛覆整個(gè)傳統(tǒng) web  應(yīng)用開(kāi)發(fā)模式的革命性技術(shù)。

 

開(kāi)發(fā)模式

業(yè)務(wù)應(yīng)用的開(kāi)發(fā)模式發(fā)展是從一體到分裂為前后端,再到前后端融合為一體過(guò)程。

注意:后面所說(shuō)的后端特指后端業(yè)務(wù)邏輯。

早期,一體

如何淺析基于Serverless的前后端一體化框架

沒(méi)有前后端的概念,那時(shí)候的應(yīng)用都是單機(jī)版,所有的業(yè)務(wù)邏輯都寫(xiě)一起,開(kāi)發(fā)人員不需要關(guān)心網(wǎng)絡(luò)請(qǐng)求,這個(gè)時(shí)期的工程師完全專(zhuān)注于業(yè)務(wù)代碼的開(kāi)發(fā)。隨著業(yè)務(wù)規(guī)模的增長(zhǎng),也暴露了很多問(wèn)題:

  • 高并發(fā)問(wèn)題

  • 高可用問(wèn)題

說(shuō)明:業(yè)務(wù)應(yīng)用升級(jí)困難等一些問(wèn)題,不是本篇文章所關(guān)心,所以就不一一列舉出來(lái)。

現(xiàn)在,分裂

前端 + 高可用高并發(fā)運(yùn)維裹挾著的后端業(yè)務(wù)邏輯:

如何淺析基于Serverless的前后端一體化框架

說(shuō)明:現(xiàn)在 Serverless 技術(shù)已經(jīng)出現(xiàn)有一段時(shí)間了,不但沒(méi)有解決開(kāi)發(fā)體驗(yàn)的問(wèn)題,反而帶來(lái)更多開(kāi)發(fā)體驗(yàn)問(wèn)題,所以,在這里我并沒(méi)有突出  Serverless 技術(shù)。

解決的問(wèn)題:

  • 高并發(fā)。通過(guò)分布式部署和多級(jí)負(fù)載均衡等技術(shù)解決了業(yè)務(wù)的高并發(fā)問(wèn)題

  • 高可用。通過(guò)主從架構(gòu)等技術(shù)解決了業(yè)務(wù)的高可用問(wèn)題

解決一個(gè)問(wèn)題,帶來(lái)一堆問(wèn)題:

  • 分裂業(yè)務(wù)應(yīng)用。為了解決高可用和高并發(fā),業(yè)務(wù)應(yīng)用引入了分布式架構(gòu),通過(guò)負(fù)載均衡和主從模式來(lái)保證高可用和高并發(fā)問(wèn)題,但是這種解決方案對(duì)業(yè)務(wù)應(yīng)用是侵入式的,從而導(dǎo)致原本高內(nèi)聚一體化的應(yīng)用分裂成前端和后端

  • 污染業(yè)務(wù)代碼。與高可用、高并發(fā)和運(yùn)維相關(guān)的邏輯與后端業(yè)務(wù)邏輯交織在一起,讓后端技術(shù)門(mén)檻變高,導(dǎo)致需要多個(gè)后端工程師才能掌握所有后端技術(shù)

  • 增加聯(lián)調(diào)成本。前后端的聯(lián)調(diào)工作做日益繁重,成了工程開(kāi)發(fā)效率提升的瓶頸。新功能和 BUG  需要前后端工程師配合才能完成,你如果是全棧開(kāi)發(fā)工程師,你肯定深有體會(huì),很多 BUG 一看就知道是前端問(wèn)題,還是后端問(wèn)題

  • 不匹配的前后端技術(shù)發(fā)展速度,前端技術(shù)發(fā)展迅猛,后端技術(shù)相對(duì)穩(wěn)定,前端只能被動(dòng)的去適配后端,讓前端最新的技術(shù)在使用體驗(yàn)上大打折扣。最理想的方式是前后端通盤(pán)考量,整體發(fā)展,不要出現(xiàn)本來(lái)后端只需要優(yōu)化一行代碼的事,讓前端寫(xiě)一百行代碼來(lái)實(shí)現(xiàn)

  • 限制了代碼抽象。因?yàn)閷?shí)現(xiàn)的是同一個(gè)業(yè)務(wù)需求,所以前后端代碼有高度的相關(guān)性,如果我們能在前后端代碼之上抽象代碼邏輯,肯定能有很大的作為。同時(shí),代碼的開(kāi)發(fā)和維護(hù)也有質(zhì)的提升,前后端分裂導(dǎo)致我們不得不局限在前端或者后端進(jìn)行代碼的抽象,抽象出來(lái)的代碼可能是片面而重復(fù)的

  • 增加技術(shù)復(fù)雜度。前后端分裂,前后端工程師各自為營(yíng),形成各自的技術(shù)棧,包括語(yǔ)言、工具和理念,導(dǎo)致單個(gè)工程師維護(hù)整個(gè)業(yè)務(wù)應(yīng)用變得極度困難,也讓前后端工程師排斥彼此的技術(shù)棧,隨著時(shí)間的推移,技術(shù)棧差異越來(lái)越大,一個(gè)項(xiàng)目,不管多小,至少兩位工程師以上,全棧開(kāi)發(fā)工程師另當(dāng)別論

  • 增加運(yùn)維成本。需要專(zhuān)門(mén)的運(yùn)維工程師來(lái)運(yùn)維,雖然,現(xiàn)在通過(guò)技術(shù)手段降低了運(yùn)維的成本,但是目前運(yùn)維成本依然很高,難度依然很大

這也是為什么創(chuàng)業(yè)小公司喜歡全棧開(kāi)發(fā)工程師,因?yàn)樵趧?chuàng)業(yè)早期,高可用和高并發(fā)的需求不是那么迫切,因而運(yùn)維也相對(duì)簡(jiǎn)單,使用全棧開(kāi)發(fā)工程師,不僅縮短了項(xiàng)目交付周期,而且也降低了公司的運(yùn)營(yíng)成本,這對(duì)創(chuàng)業(yè)小公司是至關(guān)重要的。

未來(lái),融合回到到一體

前端 + 后端 + Serverless + 平臺(tái)服務(wù) => 業(yè)務(wù)應(yīng)用 + Serverless + 平臺(tái)服務(wù):

如何淺析基于Serverless的前后端一體化框架

說(shuō)明:共享邏輯是前后端的共享邏輯,在過(guò)去,由于前后端分裂,是很難做到前后端層面的代碼抽象的,前后端融合后,讓這件事變得簡(jiǎn)單自然。

帶來(lái)困惑:

  • 前后端分工合作,不是很好嗎?在過(guò)去,將一個(gè)復(fù)雜的問(wèn)題分解成多個(gè)簡(jiǎn)單的子問(wèn)題,高并發(fā)和高可用沒(méi)法做到不侵入業(yè)務(wù)應(yīng)用,這種確實(shí)是一種很好的解法,也是沒(méi)辦法中的辦法。前后端分工合作帶來(lái)的成本問(wèn)題,越發(fā)凸顯?,F(xiàn)在  Serverless 透明的解決了高并發(fā)和高可用問(wèn)題,那么我們?yōu)槭裁催€需要從技術(shù)維度來(lái)劃分,我們不是更加推薦按業(yè)務(wù)維度來(lái)劃分嗎?

  • 后端依然很難,駕馭前后端的門(mén)檻依然很高?后端代碼邏輯雖然沒(méi)有了高并發(fā)和高可用的裹挾,還是會(huì)很難,比如  AI。我相信類(lèi)似這種很難的業(yè)務(wù),現(xiàn)在可能有,未來(lái)一定會(huì)有相關(guān)的開(kāi)發(fā)工具包或者平臺(tái)服務(wù)為我們解決,讓這些很難的技術(shù)平民化。難的技術(shù)交給專(zhuān)業(yè)的人解決。

找回初心:

  • 回歸業(yè)務(wù),前后端一體化。隨著 Serverless  技術(shù)的出現(xiàn),解決了高可用、高并發(fā)和運(yùn)維問(wèn)題,作為工程師的我們是不是應(yīng)該回頭看看,找回初心:專(zhuān)注于業(yè)務(wù)代碼。讓原本在一起的后端業(yè)務(wù)代碼與前端代碼再次融合。因此,前后端一體化難道不是我們失去已久的應(yīng)用開(kāi)發(fā)終極解決方案嗎?

現(xiàn)狀

Serverless 已經(jīng)做到了以下兩點(diǎn):

  • 工程師只需要關(guān)心業(yè)務(wù)邏輯上的技術(shù)

  • 擁有接近于傳統(tǒng)應(yīng)用開(kāi)發(fā)體驗(yàn)(解決歷史遺留問(wèn)題,可能還有些距離)

傳統(tǒng)應(yīng)用框架,食之無(wú)味,棄之可惜:

  • 目前,很多用戶(hù)已經(jīng)感知到了 Serverless 帶來(lái)的高可用、高并發(fā)和免運(yùn)維的好處,用戶(hù)能夠很自然的想到如果能將現(xiàn)有的開(kāi)發(fā)框架移植到  Serverless 上,那就太好不過(guò)了。Serverless 平臺(tái)很自然會(huì)提供現(xiàn)有框架的移植方案。解決的問(wèn)題是將傳統(tǒng)的解決方案移植到 Serverless  上,讓用戶(hù)在 Serverless 上擁有傳統(tǒng)的開(kāi)發(fā)體驗(yàn)

應(yīng)用框架找回初心:

  • 前后端業(yè)務(wù)邏輯代碼的融合,即前后端一體化

前后端一體化解決了什么問(wèn)題:

  • 解決了第二階段開(kāi)發(fā)模式中出現(xiàn)的問(wèn)題,具體請(qǐng)參考:“解決一個(gè)問(wèn)題,帶來(lái)一堆問(wèn)題”。

實(shí)現(xiàn)前后端一體化,欠缺如下:

  • 基于 Serverless 的前后端一體化框架

  • 工具

其中,基于 Serverless 的前后端一體化框架解決前后端一體化問(wèn)題;工具屏蔽掉 Serverless 平臺(tái)細(xì)節(jié),提供一致的部署運(yùn)維體驗(yàn)。

未來(lái)

未來(lái),開(kāi)源社區(qū)會(huì)涌現(xiàn)大量的基于 Serverless 的前后端一體化的框架和工具,webassembly  讓前后端一體化打破了開(kāi)發(fā)語(yǔ)言的限制,可以用任意開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)前后端,如 java、go 等等。由于 javascript 是為前端而生,typescript  是目前做活的前端開(kāi)發(fā)語(yǔ)言,前后端統(tǒng)一用 typescript,其他語(yǔ)言可以通過(guò) webassembly 技術(shù)讓 typescript  語(yǔ)言來(lái)調(diào)用可能是最好的選擇。

想要成為一個(gè)流行的基于 Serverless 的前后端一體化框架,需要具備這么幾個(gè)特質(zhì):

  • 開(kāi)源不綁定

  • 社區(qū)化運(yùn)營(yíng)

  • 形成標(biāo)準(zhǔn)

  • 模型簡(jiǎn)單

結(jié)語(yǔ)

Serverless 技術(shù)讓我們向新世界大門(mén)邁出了左腳,請(qǐng)讓基于 Serverless  的前后一體化框架幫我們邁出右腳。同時(shí),請(qǐng)別再叫我前端開(kāi)發(fā)工程師,我是業(yè)務(wù)應(yīng)用開(kāi)發(fā)工程師。

Q&A

Q:前后端一體化需要將前后端代碼發(fā)布到同一個(gè)地方嗎?

A:不需要,分開(kāi)發(fā)布,通過(guò)統(tǒng)一的工具負(fù)責(zé)前后端發(fā)布任務(wù),前端可以發(fā)到 CDN,后端可以發(fā)布到 Serverless 平臺(tái),如:阿里云函數(shù)計(jì)算。

Q:未來(lái)是不是沒(méi)有后端工程師?

A:有的。前端工程師只是把前端和后端的業(yè)務(wù)邏輯代碼給做了,后端工程師去做真正的后端,那時(shí)候的后端工程師將會(huì)更加專(zhuān)業(yè),前端工程師可能會(huì)變成應(yīng)用開(kāi)發(fā)工程師(暫且這么稱(chēng)呼)。對(duì)于中小型企業(yè),可能大部分是應(yīng)用開(kāi)發(fā)工程,有少量甚至沒(méi)有專(zhuān)業(yè)的后端工程師。

Q:為什么不做一個(gè)類(lèi)似 expressjs 這樣的 web 應(yīng)用框架?

A:expressjs 框架是在沒(méi)有 Serverless 背景下設(shè)計(jì)的,沒(méi)有考慮 Serverless 給我們帶來(lái)的技術(shù)架構(gòu)變革,如果需要類(lèi)似  expressjs 的這樣的框架,我們完全可以將 expressjs 框架遷移到 Serverless 上運(yùn)行,沒(méi)有必要再造一套。

Q:為什么是 nodejs 框架?

A:nodejs 和 前端 js 使用的同一種語(yǔ)言,可以將前后端一體化做到更加極致,webassembly  也可以讓任何語(yǔ)言在前端運(yùn)行,也能做到前后端語(yǔ)言一致,但是 js 是為前端而生的,更有親和力。但是其他語(yǔ)言可以通過(guò) webassembly  編譯成中間語(yǔ)言,nodejs 通過(guò) vm 來(lái)調(diào)用其他語(yǔ)言提供的功能。也不排除未來(lái)會(huì)有一種新的運(yùn)行環(huán)境來(lái)取代 nodejs,更加適配多語(yǔ)言和 Serverless  這種場(chǎng)景。

Q:前后端一體化的極致是一種什么感覺(jué)?

A:前后端代碼都在一個(gè)項(xiàng)目中用同一種語(yǔ)言來(lái)寫(xiě),在本地定義一個(gè)后端接口方法,前端就像調(diào)用本地方法一樣調(diào)用后端方法(不是在本地定義的后端接口也是一樣,比如跨組件、外部服務(wù)),前后端可以抽象更多的公共邏輯,比如工具類(lèi)等等,一個(gè)開(kāi)發(fā)人員就能維護(hù)好整個(gè)項(xiàng)目,沒(méi)有了多項(xiàng)目多語(yǔ)言的切換痛苦。

看完上述內(nèi)容,你們掌握如何淺析基于Serverless的前后端一體化框架的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI