<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          4 大軟件架構,你是否都經歷過?

          共 4618字,需瀏覽 10分鐘

           ·

          2021-01-27 13:57

          不點藍字,我們哪來故事?

          每天 11 點更新文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          • 一、單體架構
          • 二、分布式應用
          • 三、微服務架構
          • 四、Serverless架構

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

          一、單體架構

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

          單體架構

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

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

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

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

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

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

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

          二、分布式應用

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

          分布式架構

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

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

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

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

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

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

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

          三、微服務架構

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

          微服務架構

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

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

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

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

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

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

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

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

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

          四、Serverless架構

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

          Serverless架構

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

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

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

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

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

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

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

          但ServerLess架構也有其缺點:

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

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

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

          往期推薦

          誤用一個雙引號,生產數(shù)據(jù)全變0了!千萬不要犯這樣的錯誤!

          一次線上 Redis 高負載排查經歷,步步驚心!

          Java 中的通配符 T,E,K,V,?,你確定都了解嗎?

          5分鐘了解 CDN 加速原理

          下方二維碼關注我

          技術草根堅持分享?編程,算法,架構

          看完文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          朋友,助攻一把!點個在看
          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草先锋资源 | 四虎殴美 | 中文字幕+乱码+中文乱码电影 | 一级黄色电影在线免费观看 | 五月婷婷网站导航 |