0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解四種軟件架構(gòu)的應用和優(yōu)缺點

如意 ? 來源:掘金 ? 作者:程序員白楠楠 ? 2021-02-15 15:04 ? 次閱讀

如果一個軟件開發(fā)人員,不了解軟件架構(gòu)的演進,會制約技術(shù)的選型和開發(fā)人員的生存、晉升空間。這里我列舉了目前主要的四種軟件架構(gòu)以及他們的優(yōu)缺點,希望能夠幫助軟件開發(fā)人員拓展知識面。

一、單體架構(gòu)

單體架構(gòu)比較初級,典型的三級架構(gòu),前端(Web/手機端)+中間業(yè)務(wù)邏輯層+數(shù)據(jù)庫層。這是一種典型的Java Spring mvc或者Python Drango框架的應用。其架構(gòu)圖如下所示:

單體架構(gòu)

單體架構(gòu)的應用比較容易部署、測試, 在項目的初期,單體應用可以很好地運行。然而,隨著需求的不斷增加, 越來越多的人加入開發(fā)團隊,代碼庫也在飛速地膨脹。慢慢地,單體應用變得越來越臃腫,可維護性、靈活性逐漸降低,維護成本越來越高。下面是單體架構(gòu)應用的一些缺點:

復雜性高: 以一個百萬行級別的單體應用為例,整個項目包含的模塊非常多、模塊的邊界模糊、 依賴關(guān)系不清晰、 代碼質(zhì)量參差不齊、 混亂地堆砌在一起??上攵麄€項目非常復雜。 每次修改代碼都心驚膽戰(zhàn), 甚至添加一個簡單的功能, 或者修改一個Bug都會帶來隱含的缺陷。

技術(shù)債務(wù): 隨著時間推移、需求變更和人員更迭,會逐漸形成應用程序的技術(shù)債務(wù), 并且越積 越多?!?不壞不修”, 這在軟件開發(fā)中非常常見, 在單體應用中這種思想更甚。 已使用的系統(tǒng)設(shè)計或代碼難以被修改,因為應用程序中的其他模塊可能會以意料之外的方式使用它。

部署頻率低: 隨著代碼的增多,構(gòu)建和部署的時間也會增加。而在單體應用中, 每次功能的變更或缺陷的修復都會導致需要重新部署整個應用。全量部署的方式耗時長、 影響范圍大、 風險高, 這使得單體應用項目上線部署的頻率較低。 而部署頻率低又導致兩次發(fā)布之間會有大量的功能變更和缺陷修復,出錯率比較高。

可靠性差: 某個應用Bug,例如死循環(huán)、內(nèi)存溢出等, 可能會導致整個應用的崩潰。

擴展能力受限: 單體應用只能作為一個整體進行擴展,無法根據(jù)業(yè)務(wù)模塊的需要進行伸縮。例如,應用中有的模塊是計算密集型的,它需要強勁的CPU; 有的模塊則是IO密集型的,需要更大的內(nèi)存。 由于這些模塊部署在一起,不得不在硬件的選擇上做出妥協(xié)。

阻礙技術(shù)創(chuàng)新: 單體應用往往使用統(tǒng)一的技術(shù)平臺或方案解決所有的問題, 團隊中的每個成員 都必須使用相同的開發(fā)語言和框架,要想引入新框架或新技術(shù)平臺會非常困難。

二、分布式應用

中級架構(gòu),分布式應用,中間層分布式+數(shù)據(jù)庫分布式,是單體架構(gòu)的并發(fā)擴展,將一個大的系統(tǒng)劃分為多個業(yè)務(wù)模塊,業(yè)務(wù)模塊分別部署在不同的服務(wù)器上,各個業(yè)務(wù)模塊之間通過接口進行數(shù)據(jù)交互。數(shù)據(jù)庫也大量采用分布式數(shù)據(jù)庫,如redis、ES、solor等。通過LVS/Nginx代理應用,將用戶請求均衡的負載到不同的服務(wù)器上。其架構(gòu)圖如下所示:

詳解四種軟件架構(gòu)的應用和優(yōu)缺點

分布式架構(gòu)

該架構(gòu)相對于單體架構(gòu)來說,這種架構(gòu)提供了負載均衡的能力,大大提高了系統(tǒng)負載能力,解決了網(wǎng)站高并發(fā)的需求。另外還有以下特點:

降低了耦合度:把模塊拆分,使用接口通信,降低模塊之間的耦合度。

責任清晰:把項目拆分成若干個子項目,不同的團隊負責不同的子項目。

擴展方便:增加功能時只需要再增加一個子項目,調(diào)用其他系統(tǒng)的接口就可以。

部署方便:可以靈活的進行分布式部署。

提高代碼的復用性:比如service層,如果不采用分布式rest服務(wù)方式架構(gòu)就會在手機wap商城,微信商城,pc,android,ios每個端都要寫一個service層邏輯,開發(fā)量大,難以維護一起升級,這時候就可以采用分布式rest服務(wù)方式,公用一個service層。

缺點 :系統(tǒng)之間的交互要使用遠程通信,接口開發(fā)增大工作量,但是利大于弊。

三、微服務(wù)架構(gòu)

微服務(wù)架構(gòu),主要是中間層分解,將系統(tǒng)拆分成很多小應用(微服務(wù)),微服務(wù)可以部署在不同的服務(wù)器上,也可以部署在相同的服務(wù)器不同的容器上。當應用的故障不會影響到其他應用,單應用的負載也不會影響到其他應用,其代表框架有Spring cloud、Dubbo等。 其架構(gòu)圖如下所示:

詳解四種軟件架構(gòu)的應用和優(yōu)缺點

微服務(wù)架構(gòu)

易于開發(fā)和維護: 一個微服務(wù)只會關(guān)注一個特定的業(yè)務(wù)功能,所以它業(yè)務(wù)清晰、代碼量較少。 開發(fā)和維護單個微服務(wù)相對簡單。而整個應用是由若干個微服務(wù)構(gòu)建而成的,所以整個應用也會被維持在一個可控狀態(tài)。

單個微服務(wù)啟動較快: 單個微服務(wù)代碼量較少, 所以啟動會比較快。

局部修改容易部署: 單體應用只要有修改,就得重新部署整個應用,微服務(wù)解決了這樣的問題。 一般來說,對某個微服務(wù)進行修改,只需要重新部署這個服務(wù)即可。

技術(shù)棧不受限:在微服務(wù)架構(gòu)中,可以結(jié)合項目業(yè)務(wù)及團隊的特點,合理地選擇技術(shù)棧。例如某些服務(wù)可使用關(guān)系型數(shù)據(jù)庫MySQL;某些微服務(wù)有圖形計算的需求,可以使用Neo4j;甚至可根據(jù)需要,部分微服務(wù)使用Java開發(fā),部分微服務(wù)使用Node.js開發(fā)。

微服務(wù)雖然有很多吸引人的地方,但它并不是免費的午餐,使用它是有代價的。使用微服務(wù)架構(gòu)面臨的挑戰(zhàn)。

運維要求較高:更多的服務(wù)意味著更多的運維投入。在單體架構(gòu)中,只需要保證一個應用的正常運行。而在微服務(wù)中,需要保證幾十甚至幾百個服務(wù)服務(wù)的正常運行與協(xié)作,這給運維帶來了很大的挑戰(zhàn)。

分布式固有的復雜性:使用微服務(wù)構(gòu)建的是分布式系統(tǒng)。對于一個分布式系統(tǒng),系統(tǒng)容錯、網(wǎng)絡(luò)延遲、分布式事務(wù)等都會帶來巨大的挑戰(zhàn)。

接口調(diào)整成本高:微服務(wù)之間通過接口進行通信。如果修改某一個微服務(wù)的API,可能所有使用了該接口的微服務(wù)都需要做調(diào)整。

重復勞動:很多服務(wù)可能都會使用到相同的功能,而這個功能并沒有達到分解為一個微服務(wù)的程度,這個時候,可能各個服務(wù)都會開發(fā)這一功能,從而導致代碼重復。盡管可以使用共享庫來解決這個問題(例如可以將這個功能封裝成公共組件,需要該功能的微服務(wù)引用該組件),但共享庫在多語言環(huán)境下就不一定行得通了。

四、Serverless架構(gòu)

當我們還在容器的浪潮中前行時,已經(jīng)有一些革命先驅(qū)悄然布局另外一個云計算戰(zhàn)場:Serverless架構(gòu)。

詳解四種軟件架構(gòu)的應用和優(yōu)缺點

Serverless架構(gòu)

2014年11月14日,亞馬遜AWS發(fā)布了新產(chǎn)品Lambda。當時Lambda被描述為:一種計算服務(wù),根據(jù)時間運行用戶的代碼,無需關(guān)心底層的計算資源。從某種意義上來說,Lambda姍姍來遲,它像云計算的PaaS理念:客戶只管業(yè)務(wù),無需擔心存儲和計算資源。在此前不久,2014年10月22日,谷歌收購了實時后端數(shù)據(jù)庫創(chuàng)業(yè)公司Firebase。Firebase聲稱開發(fā)者只需引用一個API庫文件就可以使用標準REST API的各種接口對數(shù)據(jù)進行讀寫操作,只需編寫HTML+CSS+JavaScrip前端代碼,不需要服務(wù)器端代碼(如需整合,也極其簡單)。

相對于上兩者,F(xiàn)acebook 在2014年二月收購的 Parse,則側(cè)重于提供一個通用的后臺服務(wù)。這些服務(wù)被稱為Serverless或no sever。想到PaaS(平臺即服務(wù))了是嗎?很像,用戶不需要關(guān)心基礎(chǔ)設(shè)施,只需要關(guān)心業(yè)務(wù),這是遲到的PaaS,也是更實用的PaaS。這很有可能將會變革整個開發(fā)過程和傳統(tǒng)的應用生命周期,一旦開發(fā)者們習慣了這種全自動的云上資源的創(chuàng)建和分配,或許就再也回不到那些需要微應用配置資源的時代里去了。

Serverless架構(gòu)能夠讓開發(fā)者在構(gòu)建應用的過程中無需關(guān)注計算資源的獲取和運維,由平臺來按需分配計算資源并保證應用執(zhí)行的SLA(服務(wù)等級協(xié)議),按照調(diào)用次數(shù)進行計費,有效的節(jié)省應用成本。ServerLess的架構(gòu)如上圖所示。其優(yōu)點如下所示:

低運營成本:在業(yè)務(wù)突發(fā)性極高的場景下,系統(tǒng)為了應對業(yè)務(wù)高峰,必須構(gòu)建能夠應對峰值需求的系統(tǒng),這個系統(tǒng)在大部分時間是空閑的,這就導致了嚴重的資源浪費和成本上升。在微服務(wù)架構(gòu)中,服務(wù)需要一直運行,實際上在高負載情況下每個服務(wù)都不止一個實例,這樣才能完成高可用性;在Serverless架構(gòu)下,服務(wù)將根據(jù)用戶的調(diào)用次數(shù)進行計費,按照云計算pay-as-you-go原則,如果沒有東西運行,你就不必付款,節(jié)省了使用成本。同時,用戶能夠通過共享網(wǎng)絡(luò)、硬盤、CPU等計算資源,在業(yè)務(wù)高峰期通過彈性擴容方式有效的應對業(yè)務(wù)峰值,在業(yè)務(wù)波谷期將資源分享給其他用戶,有效的節(jié)約了成本。

簡化設(shè)備運維:在原有的IT體系中,開發(fā)團隊即需要維護應用程序,同時還要維護硬件基礎(chǔ)設(shè)施;Serverless架構(gòu)中,開發(fā)人員面對的將是第三方開發(fā)或自定義的API 和URL,底層硬件對于開發(fā)人員透明化了,技術(shù)團隊無需再關(guān)注運維工作,能夠更加專注于應用系統(tǒng)開發(fā)。

提升可維護性:Serverless架構(gòu)中,應用程序?qū)⒄{(diào)用多種第三方功能服務(wù),組成最終的應用邏輯。目前,例如登陸鑒權(quán)服務(wù),云數(shù)據(jù)庫服務(wù)等第三方服務(wù)在安全性、可用性、性能方面都進行了大量優(yōu)化,開發(fā)團隊直接集成第三方的服務(wù),能夠有效的降低開發(fā)成本,同時使得應用的運維過程變得更加清晰,有效的提升了應用的可維護性。

更快的開發(fā)速度:這一點在現(xiàn)在互聯(lián)網(wǎng)創(chuàng)業(yè)公司得到很好的體現(xiàn),創(chuàng)業(yè)公司往往開始由于人員和資金等問題,不可能每個產(chǎn)品線都同時進行,這時候就可以考慮第三方的Baas平臺,比如使用微信的用戶認證、阿里云提供的RDS,極光的消息推送,第三方支付及地理位置等等,能夠很快進行產(chǎn)品開發(fā)的速度,把工作重點放在業(yè)務(wù)實現(xiàn)上,把產(chǎn)品更快的推向市場。

但ServerLess架構(gòu)也有其缺點:

廠商平臺綁定:平臺會提供Serverless架構(gòu)給大玩家,比如AWS Lambda,運行它需要使用AWS指定的服務(wù),比如API網(wǎng)關(guān),DynamoDB,S3等等,一旦你在這些服務(wù)上開發(fā)一個復雜系統(tǒng),你會粘牢AWS,以后只好任由他們漲價定價或者下架等操作,個性化需求很難滿足,不能進行隨意的遷移或者遷移的成本比較大,同時不可避免帶來一些損失。Baas行業(yè)內(nèi)一個比較典型的事件,2016年1月19日Facebook關(guān)閉曾經(jīng)花巨額資金收購的Parse,造成用戶不得不遷移在這個平臺中產(chǎn)生一年多的數(shù)據(jù),無疑需要花費比較大的人力和時間成本。

成功案例比較少,沒有行業(yè)標準:目前的情況也只適合簡單的應用開發(fā),缺乏大型成功案例的推動。對于Serverless缺乏統(tǒng)一的認知以及相應的標準,無法適應所有的云平臺。

目前微服務(wù)架構(gòu)在四種架構(gòu)中處于主流地位,很多應用第一、第二種架構(gòu)的企業(yè)也開始慢慢轉(zhuǎn)向微服務(wù)架構(gòu)。到目前為止微服務(wù)的技術(shù)相對于二三年前已經(jīng)比較成熟,第四種架構(gòu)將是未來發(fā)展的一種趨勢。
責編AJX

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4570

    瀏覽量

    86696
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    824

    瀏覽量

    74396
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    501

    瀏覽量

    25374
收藏 人收藏

    評論

    相關(guān)推薦

    單片機的四種按鍵硬件、軟件設(shè)計方式優(yōu)缺點大盤點

    在單片機系統(tǒng)里,按鍵是常見的輸入設(shè)備,在本文將介紹幾種按鍵硬件、軟件設(shè)計方面的技巧。一般的在按鍵的設(shè)計上,一般有四種方案。一是 GPIO 口直接檢測單個按鍵,如圖 1.1 所示;二是按鍵較多
    發(fā)表于 08-12 00:00

    接入網(wǎng)四種結(jié)構(gòu)的優(yōu)缺點

    被稱為“最后一公里”的接入網(wǎng),一共有四種結(jié)構(gòu),分別是總線形結(jié)構(gòu)、環(huán)形結(jié)構(gòu)、星形結(jié)構(gòu)和樹形結(jié)構(gòu),下面就簡單地介紹一下這四種結(jié)構(gòu)的優(yōu)缺點。一是總線形結(jié)構(gòu)。指以光纖作為公共總線、各用戶終端通過耦合器與總
    發(fā)表于 12-01 16:11

    ARM架構(gòu)優(yōu)缺點是什么?

    ARM架構(gòu)優(yōu)缺點是什么?MicroPython項目怎么移植?
    發(fā)表于 01-17 06:40

    詳解單片機的四種燒寫方式

    JTAG/SWD/ISP/SWIM詳解單片機的四種燒寫方式單片機是一可編程控制器,搭好硬件電路后,可以利用程序?qū)崿F(xiàn)很多非常復雜的邏輯功能,與純硬件電路相比,簡化了硬件外圍的設(shè)計、方便了邏輯
    發(fā)表于 01-27 06:57

    投影機大吊裝方式及優(yōu)缺點分析

    投影機大吊裝方式與優(yōu)缺點分析 如果查看投影機的性能參數(shù)表,大家可以發(fā)現(xiàn),安裝方式大致有正投,背投,吊投,桌面四種。這很容易使人產(chǎn)
    發(fā)表于 02-06 10:07 ?742次閱讀

    EDGE/GSM四種手機發(fā)送電路的架構(gòu)詳解

    EDGE/GSM四種手機發(fā)送電路的架構(gòu)詳解 為滿足成本、功耗和制造工藝的需求,我們提出如下四種發(fā)送電路架構(gòu):極性反饋(Polar Feed
    發(fā)表于 04-20 15:33 ?1047次閱讀
    EDGE/GSM<b class='flag-5'>四種</b>手機發(fā)送電路的<b class='flag-5'>架構(gòu)</b><b class='flag-5'>詳解</b>

    手機射頻電路四種架構(gòu)詳解

    為滿足成本、功耗和制造工藝的需求,我們提出如下四種發(fā)送電路架構(gòu):極性反饋(Polar Feedback)“Lite”、極性反饋、極性開環(huán)、直接調(diào)制(零差)。
    發(fā)表于 05-24 13:32 ?7156次閱讀
    手機射頻電路<b class='flag-5'>四種</b><b class='flag-5'>架構(gòu)</b><b class='flag-5'>詳解</b>

    關(guān)于四種高電壓鋰離子電池組的充電方法的分析和對比

    本文介紹了高電壓鋰離子電池組的四種充電方法,并進行了優(yōu)缺點的比較。 關(guān)鍵詞:高電壓;鋰離子電池組。
    發(fā)表于 10-06 12:02 ?1798次閱讀
    關(guān)于<b class='flag-5'>四種</b>高電壓鋰離子電池組的充電方法的分析和對比

    微流控芯片五大優(yōu)點及缺點分析

    本文首先介紹了微流控的五大優(yōu)點,其次就介紹了微流控的缺點,最后分析了四種微流控芯片材料的優(yōu)缺點以及闡述了微流控芯片材料選型原則。
    發(fā)表于 05-10 14:26 ?5.6w次閱讀

    消防泵控制器GYXF360-2XP四種啟動方式的優(yōu)缺點解析

    消防泵一用一備星三角控制器GYXF360-2XP啟動方式主要有四種:直接啟動、星三角、自耦降壓、軟啟動、。接下來,智能消防電氣控制器廠家國耀電子傾心為您科普:消防泵控制器GYXF360-2XP四種啟動方式的優(yōu)缺點
    的頭像 發(fā)表于 12-13 09:33 ?7109次閱讀

    無線充電技術(shù)(四種主要方式)原理與應用實例圖文詳解.

    無線充電技術(shù)(四種主要方式)原理與應用實例圖文詳解.(電源技術(shù)版面費)-無線充電技術(shù)(四種主要方式)原理與應用實例圖文詳解. ? ? ? ? ?
    發(fā)表于 09-22 18:27 ?146次下載
    無線充電技術(shù)(<b class='flag-5'>四種</b>主要方式)原理與應用實例圖文<b class='flag-5'>詳解</b>.

    您感測到了什么?—— 四種溫度傳感器類型的優(yōu)點與缺點

    您感測到了什么?—— 四種溫度傳感器類型的優(yōu)點與缺點
    發(fā)表于 11-03 08:04 ?1次下載
    您感測到了什么?—— <b class='flag-5'>四種</b>溫度傳感器類型的優(yōu)點與<b class='flag-5'>缺點</b>

    干貨:兩張圖總結(jié)四種汽車大燈優(yōu)缺點,歡迎拿走!

    過幾種大燈的優(yōu)缺點有億點點強迫癥的小編,總覺得有點差事兒于是針對市場的四種大燈總結(jié)了兩個大圖,方便大家對比參考廢話不多說,直接上圖~這里再劇透一下小編正在肝《AE
    的頭像 發(fā)表于 08-19 10:53 ?617次閱讀
    干貨:兩張圖總結(jié)<b class='flag-5'>四種</b>汽車大燈<b class='flag-5'>優(yōu)缺點</b>,歡迎拿走!

    球閥,蝶閥,止回閥,閘閥四種閥門的優(yōu)缺點

    閥門的類型有很多種,每種都有各自的優(yōu)缺點,下面小編就列舉五大閥門優(yōu)缺點,包括閘閥、蝶閥、球閥、截止閥和旋塞閥,希望對您有所幫助。
    發(fā)表于 08-11 11:47 ?1232次閱讀

    盤點自動化設(shè)備中四種直線模組的應用與優(yōu)缺點

    盤點自動化設(shè)備中四種直線模組的應用與優(yōu)缺點
    的頭像 發(fā)表于 03-13 16:29 ?1540次閱讀
    盤點自動化設(shè)備中<b class='flag-5'>四種</b>直線模組的應用與<b class='flag-5'>優(yōu)缺點</b>