文章目錄
- 1. 應用服務拆分
- 2. 分布式調用
- 3. 分布式協同
- 4. 分布式計算
- 5. 分布式存儲
- 6. 分布式資源管理與調度
- 7. 高性能與可用性優化
- 8. 指標與監控
將分布式架構需要解決的問題按照順序列舉為如下幾步
問題分類 | 具體內容 |
---|---|
應用服務拆分 | 分布式是用分散的服務和資源代替集中的服務和資源,所以先根據業務進行應用服務拆分。 |
分布式調用、協同與計算 | - 由于服務分布在不同的服務器和網絡節點上,所以要解決分布式調用的問題。 - 服務能夠互相感知和調用以后,需要共同完成一些任務,因此需要解決分布式協同問題。 - 在協同工作時,會遇到大規模計算的情況,需要考慮使用多種分布式計算的算法來應對。 |
分布式存儲、資源管理與調度 | - 任何服務的成果都需要保存下來,這就要考慮存儲問題。和服務一樣,存儲的分布式也可以提高存儲的性能和可用性,因此需要考慮分布式存儲的問題。 - 所有的服務與存儲都可以看作資源,因此需要考慮分布式資源管理和調度。 |
服務的高性能與高可用、與監控 | - 設計分布式架構的目的是實現高性能和可用性。為了達到這個目的,一起來看看高性能與可用性的最佳實踐,例如緩存的應用、請求限流、服務降級等。 - 系統上線以后需要對性能指標進行有效的監控才能保證系統穩定運行,此時指標與監控就是我們需要關注的問題。 |
1. 應用服務拆分
分布式架構的第一步是應用服務的拆分。合理的拆分方式能夠確保系統的高可用性和可擴展性,而拆分過細或過粗都會帶來額外的復雜度。為此,領域驅動設計(DDD)提供了一種有效的方法,它通過領域建模、限界上下文劃分等方式,確保服務的高內聚、低耦合。
?
2. 分布式調用
針對調用的問題,在不同架構層面有不同的處理方式:
- 在用戶請求經過互聯網進入應用服務器之前,需要通過負載均衡和反向代理;
- 在內網的應用服務器之間需要 API 網關調用;ing
- 服務與服務之間可以通過服務注冊中心、消息隊列、遠程調用等方式互相調用。
可以將分布式調用總結為兩部分,第一部分是感知對方,包括負載均衡、API 網關、服務注冊與發現、消息隊列;第二部分是信息傳遞,包括 RPC、RMI、NIO 通信。
常見的分布式調用方式包括:
- 負載均衡:如 Nginx、F5,確保請求均勻分配到不同的服務實例。
- API 網關:如Spring Cloud Gateway,用于統一管理和路由 API 請求。
- 服務注冊與發現:如 Eureka、Consul,動態管理服務實例。
- 遠程調用:采用 RPC、RMI、消息隊列等方式,實現跨服務通信。
?
3. 分布式協同
多個分布式服務在處理同一業務時,需要協調工作,避免數據不一致和資源競爭。解決方案包括:
- 分布式鎖:如 Redis 鎖、ZooKeeper 實現的互斥鎖,確保臨界資源的獨占性。
- 分布式事務:包括 2PC(兩階段提交)、TCC(Try-Confirm-Cancel)等事務控制機制。
- 分布式選舉:如 Bully 算法、Raft 算法,實現主從數據庫切換等場景的選主機制。
4. 分布式計算
在大數據和高計算需求場景下,分布式計算提供了高效的處理能力。主要計算模式包括:
- MapReduce:適用于批量靜態數據計算,常見框架有 Hadoop。
- Stream 計算:適用于實時數據流計算,常見工具有 Apache Storm、Flink。
?
5. 分布式存儲
分布式存儲涉及數據的持久化與管理,需要考慮存儲均衡、故障恢復和擴展性。主要技術方案包括:
- 分布式數據庫:MySQL 分庫分表、主從復制等。
- 分布式緩存:如 Redis Cluster,實現緩存分片,提高訪問性能。
- 分布式文件存儲:如 HDFS、Ceph,適用于大規模數據存儲。
?
6. 分布式資源管理與調度
操作系統的進程調度和分布式系統的資源調度在處理并發計算任務時,都是為了解決有限的資源(如 CPU、內存、存儲等)如何合理分配給多個任務的問題。
-
操作系統的進程調度:在單核 CPU 的情況下,操作系統通過調度算法(如時間片輪轉)在多個進程之間快速切換,使得它們看起來幾乎是同時執行的。進程調度屬于微觀調度,它關注的是如何在有限的 CPU 時間片內高效管理和調度進程。
-
多核 CPU 和并發處理:隨著技術發展,單核 CPU 的瓶頸被突破,進入了多核 CPU 的時代。多核 CPU 通過在不同的核心上并行執行任務來提高性能,操作系統的調度算法需要適應這種硬件的變化,合理分配任務到不同的核心上。
-
分布式系統的資源調度:為了進一步擴展計算能力,分布式系統通過水平擴展,將資源分配到多個服務器和網絡節點上。這些節點擁有獨立的 CPU、內存、硬盤等資源,任務需要跨多個節點進行調度和協調。分布式系統調度更加復雜,需要考慮節點之間的通信、負載均衡、容錯性等因素。
綜上,操作系統和分布式系統的調度雖然在不同層次和范圍上進行,但核心目標一致:如何在有限的資源下,最有效地處理并發計算任務,提高系統整體性能。
?
資源管理和調度決定了系統的計算效率。常見調度架構包括:
- 中心化調度:由單個調度中心統一管理資源。
- 兩級調度:資源管理層與任務調度層分離,提高調度靈活性。
- 共享狀態調度:如 Kubernetes 共享任務狀態,實現高效調度。
?
7. 高性能與可用性優化
提升分布式系統性能的關鍵在于緩存和高可用策略。
- 緩存優化:使用 HTTP 緩存、CDN、分布式緩存等方式加快數據訪問。
- 可用性策略:采用限流(Rate Limiting)、熔斷(Circuit Breaker)、降級(Fallback)等方式,提高系統穩定性。
?
8. 指標與監控
判斷一個架構是好是壞時,有兩個參考標準,即性能指標和可用性指標,分布式架構也是如此。性能指標又分為吞吐量、響應時間和完成時間。由于系統的分布性,服務會分布到不同的服務器和網絡節點,因此監控程序需要在不同的服務器和網絡節點上對服務進行監控。
監控系統確保分布式架構的穩定運行,主要包括:
- 性能指標:如吞吐量、響應時間、錯誤率、系統負載。
- 監控系統:Zabbix、Prometheus、ELK(Elasticsearch + Logstash + Kibana),用于收集和分析系統狀態。