单体、分布式、微服务、Serverless软件架构一览
目錄
- 軟件架構(gòu)
- 單體架構(gòu)
- 分布式應(yīng)用
- 微服務(wù)架構(gòu)
- Serverless架構(gòu)
- 總結(jié)
- Reference
軟件架構(gòu)
軟件架構(gòu)就是軟件的基本結(jié)構(gòu),合適的架構(gòu)是軟件成功的最重要因素之一。這里列舉了目前流行的4種軟件架構(gòu)。
單體架構(gòu)
典型的三級(jí)架構(gòu):前端(web/手機(jī)端)+ 中間業(yè)務(wù)邏輯層 + 數(shù)據(jù)庫。
這是典型的Java Spring MVC 或者Python Django框架的應(yīng)用。
單體架構(gòu)應(yīng)用容易部署測試,但是隨著需求不斷增加,會(huì)變得十分臃腫,可維護(hù)性、靈活性會(huì)逐漸降低。
復(fù)雜性高:一個(gè)百萬行級(jí)別的單體應(yīng)用,整個(gè)項(xiàng)目包含的模塊非常多,模塊之間的邊界、依賴關(guān)系容易模糊。可能添加一個(gè)簡單功能都會(huì)帶來隱藏的BUG
技術(shù)債務(wù):隨著時(shí)間推移、需求變更和人員更迭,會(huì)逐漸形成技術(shù)債務(wù),已經(jīng)使用的系統(tǒng)設(shè)計(jì)或代碼難以被修改,因?yàn)閼?yīng)用程序種的其他模塊可能會(huì)以意料之外的方式使用它
部署頻率低:每次功能的變更或者缺陷的修復(fù)都會(huì)導(dǎo)致重新部署整個(gè)應(yīng)用。全量部署的方式耗時(shí)長、影響范圍大、風(fēng)險(xiǎn)高,這使得單體應(yīng)用項(xiàng)目上線部署的頻率較低。部署頻率低又會(huì)導(dǎo)致兩次發(fā)布之間會(huì)有大量的功能變更和缺陷修復(fù),出錯(cuò)率比較高
可靠性差:某個(gè)應(yīng)用BUG,如死循環(huán)、內(nèi)存泄露,可能會(huì)導(dǎo)致整個(gè)應(yīng)用崩潰
擴(kuò)展能力受限:單體應(yīng)用只能作為一個(gè)整體進(jìn)行擴(kuò)展,無法根據(jù)業(yè)務(wù)模塊的需要進(jìn)行伸縮。應(yīng)用中有的模塊是計(jì)算密集型,需要強(qiáng)勁的CPU;有的模塊是IO密集型,需要更多的IO資源以及內(nèi)存。這些模塊部署在一起的話,不得不在硬件上做出妥協(xié)
阻礙技術(shù)創(chuàng)新:單體應(yīng)用往往使用統(tǒng)一的技術(shù)平臺(tái)和方案,使用相同的開發(fā)語言和框架,想要引入新框架或技術(shù)平臺(tái)較難
分布式應(yīng)用
中級(jí)架構(gòu),具有中間層分布式 + 數(shù)據(jù)庫分布式,是單體架構(gòu)的并發(fā)擴(kuò)展,將一個(gè)大的系統(tǒng)劃分為多個(gè)業(yè)務(wù)模塊,然后分別部署在不同的服務(wù)器上,各個(gè)業(yè)務(wù)模塊之間通過接口進(jìn)行數(shù)據(jù)交互。數(shù)據(jù)庫也采用分布式數(shù)據(jù)庫,通過Nginx代理應(yīng)用,將用戶請(qǐng)求均衡地負(fù)載到不同地服務(wù)器上。
這種架構(gòu)提供了負(fù)載均衡的能力,大大提高了系統(tǒng)的負(fù)載能力,解決了網(wǎng)站高并發(fā)的需求,另外還有以下特點(diǎn):
解耦:模塊炒粉,使用接口通信,降低了模塊之間的耦合度
責(zé)任清晰:拆解為若干個(gè)子項(xiàng)目,不同的團(tuán)隊(duì)負(fù)責(zé)不同的子項(xiàng)目
擴(kuò)展方便:增加功能時(shí)只需要增加一個(gè)子項(xiàng)目,調(diào)用其他系統(tǒng)的接口就可以
部署方便:分布式部署
提高代碼復(fù)用性:比如service層,如果不采用分布式服務(wù)方式架構(gòu),就會(huì)在pc、android、ios每個(gè)端都要寫一個(gè)service層邏輯,開發(fā)量大,難以維護(hù)一起升級(jí),此時(shí)可以用分布式rest服務(wù)方式,共用一個(gè)service層
缺點(diǎn)就是系統(tǒng)之間的交互要使用遠(yuǎn)程通信,接口發(fā)開增大工作量,但是利大于弊端
微服務(wù)架構(gòu)
微服務(wù)架構(gòu)主要是中間層分解,將系統(tǒng)拆分成很多小應(yīng)用(微服務(wù)),微服務(wù)可以部署在不同的服務(wù)器上,也可以部署在相同的服務(wù)器的不同容器上。但應(yīng)用的故障不會(huì)影響到其他應(yīng)用,單應(yīng)用的負(fù)載也不會(huì)影響到其他應(yīng)用,代表框架Spring cloud、Dubbo。
微服務(wù)有以下特點(diǎn):
易于開發(fā)和維護(hù):一個(gè)微服務(wù)只會(huì)關(guān)注一個(gè)特定的業(yè)務(wù)功能,所以業(yè)務(wù)清晰、代碼量較少。開發(fā)和維護(hù)單個(gè)微服務(wù)比較簡單。
單個(gè)微服務(wù)啟動(dòng)較快:單個(gè)微服務(wù)代碼量少,所以啟動(dòng)快
局部修改容易部署:單體應(yīng)用只要有修改就得重新部署整個(gè)應(yīng)用,而某個(gè)微服務(wù)修改只需要重新部署整個(gè)服務(wù)即可
技術(shù)棧不受限制
使用微服務(wù)也是有代價(jià)的:
運(yùn)維要求高:更多的服務(wù)意味著更多的運(yùn)維投入,微服務(wù)中需要保證幾十個(gè)幾百個(gè)服務(wù)的正常運(yùn)行和協(xié)作
分布式固有的復(fù)雜性:微服務(wù)構(gòu)建的仍然是分布式系統(tǒng),系統(tǒng)容錯(cuò)、網(wǎng)絡(luò)延遲、分布式事務(wù)也比較頭疼
接口調(diào)整成本高:微服務(wù)之間通過接口進(jìn)行通信,如果修改某一個(gè)微服務(wù)的API,那么所有使用該接口的微服務(wù)都需要進(jìn)行調(diào)整
重復(fù)勞動(dòng):很多服務(wù)可能都會(huì)使用到相同的功能,但是這個(gè)功能并沒有達(dá)到分解為一個(gè)微服務(wù)的程度,所以各個(gè)服務(wù)都會(huì)開發(fā)這個(gè)功能,從而導(dǎo)致代碼重復(fù)。盡管可以使用共享庫,但是共享庫在多語言環(huán)境下不一定能用
Serverless架構(gòu)
Serverless架構(gòu)能夠讓開發(fā)者在構(gòu)建應(yīng)用的過程中無需關(guān)注計(jì)算資源的獲取和運(yùn)維,由平臺(tái)來按需分配計(jì)算資源并保證應(yīng)用執(zhí)行的SLA(服務(wù)等級(jí)協(xié)議),按照調(diào)用次數(shù)進(jìn)行計(jì)費(fèi),有效的節(jié)省應(yīng)用成本。這有點(diǎn)像PaaS(平臺(tái)便是服務(wù))用戶不需要關(guān)心基礎(chǔ)設(shè)施,只需要關(guān)心業(yè)務(wù),全自動(dòng)云上資源創(chuàng)建和分配。
這種架構(gòu)的優(yōu)點(diǎn)如下:
低運(yùn)營成本:在業(yè)務(wù)突發(fā)性極高的場景下,系統(tǒng)為了應(yīng)對(duì)業(yè)務(wù)高峰,必須構(gòu)建出能夠應(yīng)對(duì)峰值需求的系統(tǒng),這種系統(tǒng)大部分時(shí)間是空閑的,這就導(dǎo)致了嚴(yán)重的資源浪費(fèi)和成本上升。在微服務(wù)架構(gòu)中,服務(wù)需要一直運(yùn)行,在高負(fù)載情況下的每個(gè)服務(wù)都不止一個(gè)實(shí)例,這樣才能完成高可用性。Serverless架構(gòu)下,服務(wù)將根據(jù)用戶的調(diào)用次數(shù)進(jìn)行付費(fèi),如果沒有東西運(yùn)行,就不必付費(fèi)。同時(shí)用戶可以通過共享網(wǎng)絡(luò)、硬盤、CPU等計(jì)算資源,在業(yè)務(wù)高峰通過彈性擴(kuò)容方式有效應(yīng)對(duì)業(yè)務(wù)峰值,在業(yè)務(wù)波谷期間將資源分享給其他用戶,節(jié)約成本
簡化設(shè)備運(yùn)維原有的IT體系中,開發(fā)團(tuán)隊(duì)需要維護(hù)程序,也需要維護(hù)硬件基礎(chǔ)設(shè)施。在此架構(gòu)中,開發(fā)人員面對(duì)的是第三方的API和URL,底層硬件對(duì)于開發(fā)人員透明化。
提高可維護(hù)性:應(yīng)用程序?qū)⒄{(diào)用多種第三方功能服務(wù),組成最終的應(yīng)用邏輯。目前的登錄鑒權(quán)服務(wù)、云數(shù)據(jù)庫服務(wù)等第三方服務(wù)在安全性、可用性、性能上都進(jìn)行了大量優(yōu)化,開發(fā)團(tuán)隊(duì)直接集成第三方服務(wù),能夠有效的降低開發(fā)成本
總結(jié)
目前微服務(wù)架構(gòu)在四種架構(gòu)中處于主流地位,很多應(yīng)用第一、第二種架構(gòu)的企業(yè)也開始慢慢轉(zhuǎn)向微服務(wù)架構(gòu)。第四種則是未來發(fā)展趨勢
Reference
單體→分布式→微服務(wù),這些年的軟件架構(gòu)是怎么發(fā)育的?
總結(jié)
以上是生活随笔為你收集整理的单体、分布式、微服务、Serverless软件架构一览的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: emuelec怎么退出偷袭
- 下一篇: 连续内存分区式内存管理