編程體系結構(09):分佈式系統架構

本文源碼:GitHub·點這裏 || GitEE·點這裏前端

1、基礎概念

image

一、單服務java

全部業務服務和應用組件部署在一臺服務上,節省成本,這是單服務結構,適用於併發低,業務單一的場景。git

二、集羣模式github

業務量逐漸增大,併發高,把一臺服務進行水平擴展,作一個服務羣,請求壓力分散到不一樣的服務上處理,每臺服務稱爲集羣的一個節點,到這就是集羣服務。算法

三、分佈式架構spring

分佈式結構就是按照業務功能,拆分紅獨立的子服務,獨立的庫表,能夠獨立運行,且服務之間通訊和交互,帶來的好處下降業務間的耦合度,方便開發維護,水平擴展,複用性高等等。數據庫

四、技術體系編程

服務基礎架構:Dubbo框架,SpringCloud框架;設計模式

容器化運維:Docker、Kubernetes;緩存

數據存儲:關係型MySQL,NoSQL數據庫,OLAP引擎;

經常使用組件:Zookeeper協調,MQ異步,Redis緩存;

2、分佈式框架

一、Dubbo框架

垂直應用愈來愈多,應用之間交互不可避免,將核心業務抽取出來,做爲獨立的服務,逐漸造成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提升業務複用及整合的分佈式服務框架(RPC)是關鍵。Dubbo框架的核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。

二、SpringCloud框架

分佈式架構下最成熟的框架,SpringCloud是一系列框架的有序集合。它利用SpringBoot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用SpringBoot的開發風格作到一鍵啓動和部署。

image

https://github.com/cicadasmile/spring-cloud-base

核心組件

註冊中心:具有服務發現、服務記錄、查詢、動態管理的機制。經常使用的註冊中心,Zookeeper、Eureka、Consul、Nacos等。

熔斷降級:限制流量忽然高併發沖垮系統,使這類報文以比較均勻的速度流動發送,達到保護系統相對穩定的目的。經常使用算法令牌桶、漏斗;經常使用組件Nginx、CDN、Hystrix、Sentinel,經過不一樣節點控制流量。

服務網關:在整個架構體系上也是一個服務,做爲請求的惟一入口,與外觀模式十分相似,在網關層處理全部的非業務功能,爲客戶端提供定製的API。經常使用組件Zuul、Tyk、Kong。

image

https://github.com/cicadasmile/husky-spring-cloud

三、業務型組件

消息中間件:RocktMQ、Kafka、RabbitMQ等;

緩存中間件:Redis、Eache等;

分佈式事務:Seata、Hmily、TCC-transaction等;

3、架構細節

一、全局ID策略

業務場景產生的數據,都須要一個惟一ID做爲核心標識,用來流程化管理。好比常見的:UUID、雪花算法、自增主鍵、ID容器等。

二、接口冪等性

冪等操做的特色是其任意屢次執行所產生的影響均與一次執行的影響相同。就是說,一次和屢次請求某一個資源會產生一樣的做用影響。在接口、重試、補償的場景下尤爲要保證操做的冪等性。

三、緩存處理

業務系統中,查詢時最容易出現性能問題的模塊,查詢面對的數據量大,篩選條件複雜,因此在系統架構中引入緩存層,則是很是必要的,用來緩存熱點數據、歸檔數據、首頁查詢等,達到快速響應的目的。

四、異步處理流程

異步是一種設計理念,異步操做不等於多線程,MQ中間件,或者消息廣播,這些是能夠實現異步處理的方式,異步處理不用阻塞當前線程來等待處理完成,而是容許後續操做,直至其它線程將處理完成,並回調通知此線程。

五、高併發與資源鎖

高併發業務核心仍是流量控制,控制流量下沉速度,或者控制承接流量的容器大小,多餘的直接溢出,這是相對複雜的流程。一方面能夠經過流量整形的方式解決請求量,另外一方面能夠經過加鎖解決併發訪問資源的問題。

六、分佈式事務

不一樣的服務不一樣數據庫的多個細節操做組成,這些無感知的細節操做分佈在不一樣服務上,甚至屬於不一樣的地區和應用,事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不一樣的分佈式系統的不一樣節點,如何保證這些操做所有成功或者所有失敗,即保證不一樣數據庫間的數據一致性,這就是分佈式事務須要解決的核心問題。

image

https://github.com/cicadasmile/data-manage-parent

4、數據源組件

一、關係型數據庫

採用了關係模型來組織數據的數據庫,其以行和列的形式存儲數據,例如MySQL、Oracle。在分佈式系統下,爲了保證核心流程的穩定性,在關鍵業務上基本都採用關係型數據庫,當業務完成後,若是數據量大,會把數據同步到其餘查詢性能高組件中。

二、NoSQL數據庫

NoSQL意即"不只僅是SQL"。對不一樣於傳統的關係型數據庫的數據庫管理系統的統稱。NoSQL用於超大規模數據的存儲。這些類型的數據存儲不須要固定的模式,無需多餘操做就能夠橫向擴展。例如MongoDB、Cassandra等。

三、數據管理策略

讀寫庫分離、查詢數據分庫分表、分佈式下業務分庫、基於用戶流量分庫。

image

https://github.com/cicadasmile/data-manage-parent

5、服務監控

一、生產故障

在分佈式的複雜架構下,應用服務、軟件服務、硬件服務,任何層面出問題均可能致使請求不能完整執行,引起一系列效應,作好全鏈路的監控,快速定位問題是很是關鍵的。

二、應用層監控

應用層爲開發的業務邏輯服務,也是最容易突發問題的一個層面,一般從請求流量、服務鏈路熔斷、系統異常日誌幾個方面作監控指標,觀察系統是否穩定。

三、軟件層監控

這裏一般指,數據庫層面,例如Druid的監控分析;經常使用中間件,例如RocketMQ的控制檯;Redis緩存:提供命令獲取相關監控數據等。

四、硬件層監控

硬件層面,關注的三大核心內容:CPU、內存、網絡。底層硬件資源爆發的故障,來自上層的應用服務或者中間件服務觸發的可能性偏高。成熟的監控框架,例如zabbix,grafana等。

6、源代碼地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

推薦閱讀:編程體系整理

序號 項目名稱 GitHub地址 GitEE地址 推薦指數
01 Java描述設計模式,算法,數據結構 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
02 Java基礎、併發、面向對象、Web開發 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆
03 SpringCloud微服務基礎組件案例詳解 GitHub·點這裏 GitEE·點這裏 ☆☆☆
04 SpringCloud微服務架構實戰綜合案例 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
05 SpringBoot框架基礎應用入門到進階 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆
06 SpringBoot框架整合開發經常使用中間件 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
07 數據管理、分佈式、架構設計基礎案例 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
08 大數據系列、存儲、組件、計算等框架 GitHub·點這裏 GitEE·點這裏 ☆☆☆☆☆
相關文章
相關標籤/搜索