單體架構,分布式系統的差別在哪裡?

2020-10-10 JAVA架構

前言

隨著技術日新月異的發展,最近幾年微服務和分布式技術成為主流。每一個好的解決方案不一定是直接設計出來的,但每一個優秀的架構都必須承受得住業務的考驗和需求驅動的積累。最初我們開發系統都是在單個的應用上進行開發、測試、部署和運維等。每次新的需求迭代都將可能涉及到整個系統的修改,尤其是龐大而臃腫的業務系統需要進行大量的數據增刪改查操作,開發起來變得非常麻煩。為了應對更高的並發和業務需求,解決單個應用的缺點,把龐大複雜的單體應用按照業務拆分成多個子業務模塊,可進行垂直拆分或水平拆分,從而達到更高效的開發、更好的管理和維護的目的,這就是所謂的分布式系統。

一、單體架構是什麼?

1.1 定義

一個歸檔包(可以是JAR、WAR、EAR或其它歸檔格式)包含所有功能的應用程式,通常稱為單體應用。而架構單體應用的方法論,就是單體應用架構。

1.2 單體應用舉例
單體應用集成了前端頁面和後端接口服務及業務邏輯和數據操作於一體的單個完整系統,Struts1、Struts2及SSH、SSM架構的系統等,單個應用囊括了所有業務模塊。


1.3 單體架構示意圖

1.4 單體應用優缺點
1.4.1 優點

  • 易於集中式開發、測試、管理、部署。
  • 無需考慮跨語言。
  • 能避免功能重複開發(相對分布式)。

1.4.2 缺點

  • 團隊合作困難
  • 代碼的維護、重構、部署都比較難。
  • 穩定性、可用性(停機維護)、擴展性不高。

當用戶規模越來越大時,單體應用可以通過集群來應對。如通過DNS、Nginx或硬體F5分配集群中的伺服器來提供服務。它的缺點(開發效率低、可維護差穩定性查)導致需要對單體應用進行拆分,垂直拆分或水平拆分。

二、分布式系統(微服務)是什麼?

2.1 微服務定義

微服務架構風格是一種將一個單一應用程式開發為一組小型服務的方法,每個服務運行在自己的進程中,服務間通信採用輕量級通信機制。這些服務圍繞業務能力構建並且可通過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發,使用不同的數據存儲技術。

2.2 微服務舉例

市面上目前典型主流的微服務架構有SpringBoot、SpringCloud、Dubbo,微服務興起的時代,除了官方幾個代表的框架外,各大廠商也開始了各自開源的分布式框架。除了上面說的Dubbo外,還有騰訊的Tars,京東的JSF,新浪的Motan等。

2.3 示意圖

2.4 優缺點

2.4.1 優點

  • 每個業務模塊獨立開發、測試、部署和管理。
  • 每個業務模塊之間相互的影響小,按需分配資源。
  • 所有業務模塊既是獨立,又組成一個完整整體。
  • 可通過配置進行上遊調用的升級或降級。
  • 支持高並發、高擴展、高可用等大型系統。

2.4.2 缺點

  • 資源耗用相對單體應用增大,每個業務模塊需單獨部署。
  • 分布式數據一致性問題(CAP)。
  • 系統維護成本加大,需要更多的人工介入。
  • 業務間耦合度變高,調用關係錯綜複雜。

儘管分布式微服務給開發人員帶來極大的使用便利性和系統性能上的優越性。但也暴露了分布式難以解決的一些問題,著名的CAP理論就是其中的一個典型。不過整體來說還是利大於弊,選擇分布式微服務架構是未來的趨勢,也是淘汰舊技術的必經之路。


三、總結

從單體架構到分布式微服務架構,我們可以把單體應用簡單分為水平拆分或垂直拆分兩種方式。如一個電商系統,包含:商品模塊、會員模塊、物流模塊、支付模塊、訂單模塊幾個核心模塊。水平拆分,單體應用把所有這些模塊集中在一個電商系統裡面,水平拆分後分為:商品系統、會員系統、物流系統、支付系統、訂單系統。垂直拆分,會員系統可按會員等級分為:普通用戶、VIP用戶、超級VIP用戶等。

福利:

點擊查看:

相關焦點

  • 漫談Serverless、微服務、分布式和單體四種主流軟體架構
    漫談Serverless、微服務、分布式和單體四種主流軟體架構 如果一個軟體開發人員,不了解軟體架構的演進,會制約技術的選型和開發人員的生存、晉升空間。這裡我列舉了目前主要的四種軟體架構以及他們的優缺點,希望能夠幫助軟體開發人員拓展知識面。
  • 「系統架構」什麼是鏈路追蹤?分布式系統如何實現鏈路追蹤?
    接口請求慢在哪裡?1、單體架構時代在創業初期,我們的系統一般是單體架構,如下:2、微服務架構隨著業務的快速發展,單體架構越來越不能滿足需要,我們的系統慢慢會朝微服務架構發展,如下:它的出現是為了解決不同的分布式追蹤系統 API 不兼容的問題。
  • 架構師成長之路:分布式系統綜述
    作為一個資深架構師,一路走來,發現自己的技術水平很多時候其實是隨著項目的發展被迫成長的。其實,很多時候,自身水平達不到能順利完成架構項目的水平,但是,為了挑戰,為了技術成長,更是為了高薪資,只能咬牙堅持,熬夜學習,最終讓自己能順利設計和把控項目的架構。其中,最為艱難的,就是去設計、架構、規劃一整套,規模大的分布式系統。
  • 螞蟻金服的「技術中臺」:億級分布式系統架構實踐
    二、分布式架構實踐舉例--分布式TA系統08分布式TA系統架構TA系統架構,結構更合理,也更複雜。SOFAStack:螞蟻金服的通用服務組件,許多都開源了,包括:微服務框架、分布式事務、任務調度、消息隊列、數據代理、鏈路跟蹤等。分布式TA系統的需求攻克的技術難題。分布式清算任務如何高效實現?
  • 螞蟻金服的「技術中臺」:億級分布式系統架構實踐
    一、分布式架構的優勢和理念01 傳統單體架構特點(圖片來源:阿里雲峰會)通常一個初創型項目,都是從單體架構開始的。02 微服務架構 vs 單體架構(圖片來源:阿里雲峰會)複雜度較小時採用單體應用生產效率更高,複雜度到了一定規模時單體應用的生產效率開始急劇下降,這時對其進行服務化拆分才是合算的。微服務架構之所以得到廣泛認可,源於對業務多變性的不可預測,微服架構能夠不斷的自演化 ,進而快速適應業務變化。
  • Java開發網站架構演變過程-從單體應用到微服務架構詳解
    Java開發網站架構演變過程,到目前為止,大致分為5個階段,分別為單體架構、集群架構、分布式架構、SOA架構和微服務架構。下面玄武老師來給大家詳細介紹下這5種架構模式的發展背景、各自優缺點以及涉及到的一些技術,並且教會你如何區分它們。
  • 從單體架構遷移到微服務?
    當然設計面向微服務的單體架構也是一種聰明的方法,這遵守了系統演化的法則。複雜性增加:相對單體架構將所有功能打包部署在一起,集中地進行開發、測試和運維,微服務會將這些單體的服務進行拆分部署,業務拆分粒度是一個難點,拆分後服務聚合也是一個麻煩。因為服務粒度增加後,相互調用,相互依存,所以問題排查難度會增加,就需要一套完整的服務監控,服務跟蹤和治理的系統。
  • WEB單體應用 VS SOA架構 VS 微服務架構
    主要的內容如下:單體架構到分布式架構的演變;ORM、MVC、分布式、RPC、微服務等技術關鍵字介紹;MVC、RPC、SOA、微服務架構的區別;單體架構、SOA架構、微服務架構內部服務的組織;WEB單體應用介紹&單體應用會遇到的問題;SOA架構的演變介紹&SOA架構的的實現&
  • 明明是 SOA,做著做著就變單體架構了?
    「糟糕」的依賴結構是分布式單體的徵兆——開發單體的痛苦一點都不會少,面向服務的好處卻一點都不會有。此外,高度耦合的服務通常會讓你越陷越深。換句話說,如果不解決這些問題,隨著服務生態系統的增長,情況會變得更糟。
  • 什麼是分布式系統!以及分布式系統架構的優缺點
    現在的架構很多,各種各樣的,如高並發架構、異地多活架構、容器化架構、微服務架構、高可用架構、彈性化架構等,還有和這些架構相關的管理型的技術方法,如 DevOps、應用監控、自動化運維、SOA 服務治理、去 IOE 等等,還有很多。  那什麼是分布式系統?海威恆泰分布式系統是支持分布式處理的軟體系統,是由通信網絡互聯的多處理機體系結構上執行任務的系統。
  • 微服務架構概念特點與單體系統的對比如何實施微服務以及九大特性
    敏捷開發和自動化部署微服務 VS 單體系統——單體系統單體系統部署在一個進程內,修改某些功能會影響其他功能。單體應用中這些功能模塊的使用場景、 並發量、 消耗的資源類型都各有不同, 對於資源的利用又互相影響, 使得對各個業務模塊的系統容量很難給出較為準確的評估。
  • 漫談何時從單體架構遷移到微服務?
    本文從單體架構,微服務架構,微服務風險評估,微服務落地條件等幾個方面探討微服務的落地過程,希望對你有所啟發。  講解微服務之前,我們先簡單了解下單體架構。當然設計面向微服務的單體架構也是一種聰明的方法,這遵守了系統演化的法則。
  • 分布式架構在銀行的應用
    集中式架構模塊間耦合性高,靈活升級難度大,龐大的單體應用,影響軟體版本發布和交付效率,使得產品交付周期較長。3. 成本控制 - 銀行業集中式核心銀行系統基本都採用 IBM 大型主機作為基礎構建,IBM 形成事實上的壟斷,銀行議價能力較低。
  • 從單體式向分布式演進 金山雲打造更高性能的資料庫DragonBase
    從單體式向分布式演進 金山雲布局全係數據庫產品「從單體式向分布式轉變,整個資料庫架構發展大致分為三種形態,金山雲布局了全系的資料庫產品」餘邵在表示。第一種是單體式資料庫,以主、備架構為主,如MySQL、PostgreSQL,優勢是成熟度和穩定性較高,其劣勢在於性能和容量受限單機,在業務發展較快速的情況下,難以滿足業務發展的需求。
  • 分布式系統架構與雲原生—阿里雲《雲原生架構白皮書》導讀
    1.2 分布式系統架構的定義  此處定義參考百度百科為「在一個分布式系統中,一組獨立的計算機展現給用戶的是一個統一的整體,就好像是一個系統似的。系統擁有多種通用的物理和邏輯資源,可以動態的分配任務,分散的物理和邏輯資源通過計算機網絡實現信息交換。系統中存在一個以全局的方式管理計算機資源的分布式作業系統。
  • 分布式系統(微服務架構)的一致性和冪等性問題相關概念解析
    對於不同的分布式系統,其一致性語義以及面對的一致性難題可能略有差別1.1 分布式存儲系統中的一致性問題在分布式存儲系統中,為了保持系統的高可用,同時增加讀操作的並發性,同一份數據會有多份副本,不同的副本存儲於不同的節點上,如下圖所示
  • 苦練基本功之分布式系統學習
    雲網Cloud Network隨著網際網路的大量普及,越來越多的企業在不斷迭代產品的同時,也在進行技術架構升級,將早期的單體式架構升級成分布式架構升級改造的成本是非常之大的,那麼為什麼各大企業仍趨之若鶩的要做架構改造呢?
  • 編程體系結構:分布式系統架構
    它利用SpringBoot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用SpringBoot的開發風格做到一鍵啟動和部署。,查詢時最容易出現性能問題的模塊,查詢面對的數據量大,篩選條件複雜,所以在系統架構中引入緩存層,則是非常必要的,用來緩存熱點數據、歸檔數據、首頁查詢等,達到快速響應的目的。
  • 企業從單體架構向微服務架構轉型的 9 個難點
    使用微服務架構方案能解決企業面臨的很多挑戰,而且目前微服務架構的框架都比較成熟,例如Spring cloud或者dubbo在各大網際網路平臺都有成功案例,但看似簡單的框架在實際開發過程中會面臨很多問題。本文整理了企業從單體架構向微服務架構轉型的中的設計難點問題。
  • SpringCloud:分布式系統架構
    概念分布式系統是若干獨立計算機的集合,這些計算機對於用戶來說就像單個相關系統。也可以這麼說:分布式系統就是把所有的程序、功能拆分成不同的子系統,並且將這些個子系統部署在多臺不同的伺服器上,這些子系統相互協作共同對外提供服務,而對用戶而言他並不知道後臺是多個子系統和多臺伺服器在提供服務,在使用上就像訪問單個系統一樣。簡單來說:分布式就是將一個業務拆分多個子業務,部署在不同的伺服器上。一般來說,一個子業務我們稱為節點。