分佈式與系統架構的演變

分佈式

分佈式就是把計算機通過網絡連接起來協同工作。由多臺計算機負責完成同一件事。

在這裏插入圖片描述

SOA全稱 Service-Oriented Architecture,面向服務架構,它可以根據需求通過網絡對鬆散耦合的粗粒度應用組件(服務)進行分佈式部署、組合、和使用。一個組件(服務)以獨立的形式存在於操作系統的進程中。

站在功能的角度上,把業務邏輯抽象成可複用、可組裝的服務,通過服務編排、組裝實現業務快速再生,把原先的固有業務轉變爲通用業務服務,實現業務邏輯的快速複用。

特點:分佈式、可複用、擴展靈活、松耦合。

當垂直應用越來越多時,應用之間的交互是不可避免的,將核心業務抽取出來,做成獨立的服務組件。逐漸形成穩定的服務中心,使得前端應用能夠更加快速響應市場多變的需求。

優點:

  • 把公共功能抽取出來形成一個個可複用的服務。提高開發效率。
  • 可以對不同的服務根據實際情況進行不同力度的集羣化部署,解決系統壓力。比如某個服務訪問量大,就集羣化力度大,某個服務訪問量較小,就集羣化力度比較小,實現比較靈活的性能擴展。
  • 基於ESB總線或者Dubbo等框架,減小系統間的耦合。

缺點:

  • 抽取服務的力度較大。
  • 服務提供方與服務調用方的接口耦合度較高。

分佈式架構要解決的問題:

任務分解

如何把本身單體的系統架構拆分成一個個獨立部署的節點。可以通過領域模型進行拆分。

節點通信

各個節點之間進行通信,才能保證系統正常運行。可以通過RPC框架(Dubbo)或者消息中間件(ActiveMQ等)進行節點通信。

分佈式和集羣的關係

  • 分佈式就是把一個業務拆分成多個子系統。部署在不同的服務器上。各個子系統之間通過網絡進行通信,協調完成業務。對外呈現出的是一個整體。
  • 集羣是把同一子系統部署多個服務器上,通過負載均衡等方案對系統進行訪問。達到系統性能擴展和實現高可用。

系統架構的演變

以一個商城系統架構發展作爲例子。系統有用戶模塊,商品模塊,訂單模塊。

第一版

由於項目初期,用戶量少
使用到的架構:
容器:tomcat,jsp/servlet。
數據庫:mysql。

在這裏插入圖片描述

第二版

隨着用戶數增多,單機負載越來越大,將數據庫服務器與應用服務器分離。
在這裏插入圖片描述

第三版

隨着訪問量的繼續增多,一臺應用服務器不能處理達到瓶頸,就對應用服務器進行集羣部署。

在這裏插入圖片描述
這也引出了一些問題:比如Session共享等。可以使用 cookie、session集中存儲等方案解決。

第四版:

隨着訪問量的繼續增多,單臺數據庫達到了瓶頸,使用數據庫讀寫分離和數據同步。
在這裏插入圖片描述
這時又引出一些問題:
比如:
數據庫讀寫分離如何實現。mysql主從模式。
數據同步如何實現。mysql主從模式。
數據庫路由。mycat

第五版

商品搜索如何實現高效率,高相關檢索,就引入了搜索引擎,ES等。

在這裏插入圖片描述
又引入問題:
搜索引擎索引數據如果同步,實時增量同步還是定時全量同步。

第六版

訪問量持續增大,引入緩存機制。redis等。

在這裏插入圖片描述

第七版:

數據庫數據量過大,進行垂直/水平拆分。拆分成訂單數據庫。用戶數據庫,商品數據庫等。
在這裏插入圖片描述

第八版

訪問量,數據量,持續增大,對應用進行拆分成多個沒有關聯的應用,比如把原本一個應用拆分成三個應用,用戶系統、訂單系統。

在這裏插入圖片描述
這個與分佈式架構還是有點區別的,因爲拆分的應用都是沒有關係的,各自完成相應的功能,沒有進行通信。這種架構會存在冗餘的代碼,比如訂單系統會涉及商品跟用戶,所以訂單系統裏面就會有相應的關於用戶和商品相關的代碼。

第九版

訪問量,數據量,業務複雜度,持續增大,對各個模塊按照一定業務,一定粒度進行抽取成一個個服務/組件,各個服務之間通過網絡進行通信,完成相應業務,該架構就是分佈式架構。

在這裏插入圖片描述
此時每種業務都被抽取出來獨立運行,系統之間相互通信,比如訂單系統用到了用戶相關的,就通過與用戶服務組件進行通信進行調用,完成業務邏輯處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章