本文源碼:GitHub·點這里 || GitEE·點這里
一、基礎概念
1、單服務
所有業務服務和應用組件部署在一台服務上,節省成本,這是單服務結構,適用於並發低,業務單一的場景。
2、集群模式
業務量逐漸增大,並發高,把一台服務進行水平擴展,做一個服務群,請求壓力分散到不同的服務上處理,每台服務稱為集群的一個節點,到這就是集群服務。
3、分布式架構
分布式結構就是按照業務功能,拆分成獨立的子服務,獨立的庫表,可以獨立運行,且服務之間通信和交互,帶來的好處降低業務間的耦合度,方便開發維護,水平擴展,復用性高等等。
4、技術體系
服務基礎架構:Dubbo框架,SpringCloud框架;
容器化運維:Docker、Kubernetes;
數據存儲:關系型MySQL,NoSQL數據庫,OLAP引擎;
常用組件:Zookeeper協調,MQ異步,Redis緩存;
二、分布式框架
1、Dubbo框架
垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務復用及整合的分布式服務框架(RPC)是關鍵。Dubbo框架的核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。
2、SpringCloud框架
分布式架構下最成熟的框架,SpringCloud是一系列框架的有序集合。它利用SpringBoot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用SpringBoot的開發風格做到一鍵啟動和部署。
https://github.com/cicadasmile/spring-cloud-base
核心組件
注冊中心:具備服務發現、服務記錄、查詢、動態管理的機制。常用的注冊中心,Zookeeper、Eureka、Consul、Nacos等。
熔斷降級:限制流量突然高並發沖垮系統,使這類報文以比較均勻的速度流動發送,達到保護系統相對穩定的目的。常用算法令牌桶、漏斗;常用組件Nginx、CDN、Hystrix、Sentinel,通過不同節點控制流量。
服務網關:在整個架構體系上也是一個服務,作為請求的唯一入口,與外觀模式十分類似,在網關層處理所有的非業務功能,為客戶端提供定制的API。常用組件Zuul、Tyk、Kong。
https://github.com/cicadasmile/husky-spring-cloud
3、業務型組件
消息中間件:RocktMQ、Kafka、RabbitMQ等;
緩存中間件:Redis、Eache等;
分布式事務:Seata、Hmily、TCC-transaction等;
三、架構細節
1、全局ID策略
業務場景產生的數據,都需要一個唯一ID作為核心標識,用來流程化管理。比如常見的:UUID、雪花算法、自增主鍵、ID容器等。
2、接口冪等性
冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。就是說,一次和多次請求某一個資源會產生同樣的作用影響。在接口、重試、補償的場景下尤其要保證操作的冪等性。
3、緩存處理
業務系統中,查詢時最容易出現性能問題的模塊,查詢面對的數據量大,篩選條件復雜,所以在系統架構中引入緩存層,則是非常必要的,用來緩存熱點數據、歸檔數據、首頁查詢等,達到快速響應的目的。
4、異步處理流程
異步是一種設計理念,異步操作不等於多線程,MQ中間件,或者消息廣播,這些是可以實現異步處理的方式,異步處理不用阻塞當前線程來等待處理完成,而是允許后續操作,直至其它線程將處理完成,並回調通知此線程。
5、高並發與資源鎖
高並發業務核心還是流量控制,控制流量下沉速度,或者控制承接流量的容器大小,多余的直接溢出,這是相對復雜的流程。一方面可以通過流量整形的方式解決請求量,另一方面可以通過加鎖解決並發訪問資源的問題。
6、分布式事務
不同的服務不同數據庫的多個細節操作組成,這些無感知的細節操作分布在不同服務上,甚至屬於不同的地區和應用,事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不同的分布式系統的不同節點,如何保證這些操作全部成功或者全部失敗,即保證不同數據庫間的數據一致性,這就是分布式事務需要解決的核心問題。
https://github.com/cicadasmile/data-manage-parent
四、數據源組件
1、關系型數據庫
采用了關系模型來組織數據的數據庫,其以行和列的形式存儲數據,例如MySQL、Oracle。在分布式系統下,為了保證核心流程的穩定性,在關鍵業務上基本都采用關系型數據庫,當業務完成后,如果數據量大,會把數據同步到其他查詢性能高組件中。
2、NoSQL數據庫
NoSQL意即"不僅僅是SQL"。對不同於傳統的關系型數據庫的數據庫管理系統的統稱。NoSQL用於超大規模數據的存儲。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。例如MongoDB、Cassandra等。
3、數據管理策略
讀寫庫分離、查詢數據分庫分表、分布式下業務分庫、基於用戶流量分庫。
https://github.com/cicadasmile/data-manage-parent
五、服務監控
1、生產故障
在分布式的復雜架構下,應用服務、軟件服務、硬件服務,任何層面出問題都可能導致請求不能完整執行,引發一系列效應,做好全鏈路的監控,快速定位問題是非常關鍵的。
2、應用層監控
應用層為開發的業務邏輯服務,也是最容易突發問題的一個層面,通常從請求流量、服務鏈路熔斷、系統異常日志幾個方面做監控指標,觀察系統是否穩定。
3、軟件層監控
這里通常指,數據庫層面,例如Druid的監控分析;常用中間件,例如RocketMQ的控制台;Redis緩存:提供命令獲取相關監控數據等。
4、硬件層監控
硬件層面,關注的三大核心內容:CPU、內存、網絡。底層硬件資源爆發的故障,來自上層的應用服務或者中間件服務觸發的可能性偏高。成熟的監控框架,例如zabbix,grafana等。
六、源代碼地址
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·點這里 | ☆☆☆☆☆ |