【分布式架構理論2】分布式架構要處理的問題及解決方案

文章目錄

      • 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),用于收集和分析系統狀態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894765.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【PyQt】pyqt小案例實現簡易文本編輯器

pyqt小案例實現簡易文本編輯器 分析 實現了一個簡單的文本編輯器,使用PyQt5框架構建。以下是代碼的主要功能和特點: 主窗口類 (MyWindow): 繼承自 QWidget 類。使用 .ui 文件加載用戶界面布局。設置窗口標題、狀態欄消息等。創建菜單欄及其子菜單項&…

Unity中的虛擬相機(Cinemachine)

Unity Cinemachine詳解 什么是Cinemachine Cinemachine是Unity官方推出的智能相機系統,它提供了一套完整的工具來創建復雜的相機運動和行為,而無需編寫大量代碼。它能夠大大簡化相機管理,提高游戲開發效率。 Cinemachine的主要組件 1. Vi…

【PyQt】getattr動態訪問對象的屬性

問題 使用qtdesigner設計好大體的軟件結構,需要使用代碼進行批量修改控件樣式,self.ui.x 會被解釋為訪問 self.ui 中名為 x 的屬性,而不是將 x 作為變量名來解析,此時需要通過字符串動態訪問 self.ui 中的按鈕對象 for i in range(20):x f…

【電腦系統】電腦突然(藍屏)卡死發出刺耳聲音

文章目錄 前言問題描述軟件解決方案嘗試硬件解決方案嘗試參考文獻 前言 在 更換硬盤 時遇到的問題,有時候只有卡死沒有藍屏 問題描述 更換硬盤后,電腦用一會就卡死,藍屏,顯示藍屏代碼 UNEXPECTED_STORE_EXCEPTION 軟件解決方案…

DEEPSEKK GPT等AI體的出現如何重構工廠數字化架構:從設備控制到ERP MES系統的全面優化

隨著深度學習(DeepSeek)、GPT等先進AI技術的出現,工廠的數字化架構正在經歷前所未有的變革。AI的強大處理能力、預測能力和自動化決策支持,將大幅度提升生產效率、設備管理、資源調度以及產品質量管理。本文將探討AI體&#xff08…

【大模型LLM面試合集】大語言模型架構_Transformer架構細節

Transformer架構細節 1.Transformer各個模塊的作用 (1)Encoder模塊 經典的Transformer架構中的Encoder模塊包含6個Encoder Block. 每個Encoder Block包含兩個?模塊, 分別是多頭?注意?層, 和前饋全連接層. 多頭?注意?層采?的是?種Scaled Dot-Pr…

【華為OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【華為OD-E卷 - 跳格子2 100分(python、java、c、js、c)】 題目 小明和朋友玩跳格子游戲,有 n 個連續格子組成的圓圈,每個格子有不同的分數,小朋友可以選擇以任意格子起跳,但是不能跳連續的格子&#xff…

訂單狀態監控實戰:基于 SQL 的狀態機分析與異常檢測

目錄 1. 背景與問題 2. 數據準備 2.1 表結構設計 3. 場景分析與實現 3.1 場景 1:檢測非法狀態轉換

說一下JVM管理的常見參數

Java虛擬機&#xff08;JVM&#xff09;有許多常見參數&#xff0c;用于控制其行為和性能。以下是一些常見的JVM參數及其說明&#xff1a; 1. 內存管理參數 -Xms<size> START 設置初始堆內存大小。例如&#xff0c;-Xms512m表示初始堆大小為512MB。 -Xmx<size>…

驗證工具:GVIM和VIM

一、定義與關系 gVim&#xff1a;gVim是Vim的圖形界面版本&#xff0c;提供了更多的圖形化功能&#xff0c;如菜單欄、工具欄和鼠標支持。它使得Vim的使用更加直觀和方便&#xff0c;尤其對于不習慣命令行界面的用戶來說。Vim&#xff1a;Vim是一個在命令行界面下運行的文本編…

4 HBase 的高級 shell 管理命令

4 HBase 的高級 shell 管理命令 1.status 例如&#xff1a;顯示服務器狀態 hbase(main):058:0> status node012.whoami 顯示 HBase 當前用戶&#xff0c;例如&#xff1a; hbase> whoami3.list 顯示當前所有的表 hbase> list4.count 統計指定表的記錄數&#xff0c…

Web - CSS3基礎語法與盒模型

概述 這篇文章是關于 Web 前端 CSS3 的基礎語法與盒模型的講解。包括 CSS3 層疊性及處理沖突規則、偽元素和新增偽類元素、屬性選擇器等。還介紹了文本與字體屬性&#xff0c;如段落和行相關屬性、字體文本屬性。最后闡述了盒子模型&#xff0c;如元素隱藏、行內與塊元素轉換、…

國防科大:雙目標優化防止LLM災難性遺忘

&#x1f4d6;標題&#xff1a;How to Complete Domain Tuning while Keeping General Ability in LLM: Adaptive Layer-wise and Element-wise Regularization &#x1f310;來源&#xff1a;arXiv, 2501.13669 &#x1f31f;摘要 &#x1f538;大型語言模型&#xff08;LLM…

Verilog基礎(一):基礎元素

verilog基礎 我先說,看了肯定會忘,但是重要的是這個過程,我們知道了概念,知道了以后在哪里查詢。語法都是術,通用的概念是術。所以如果你有相關的軟件編程經驗,那么其實開啟這個學習之旅,你會感受到熟悉,也會感受到別致。 入門 - 如何開始 歡迎來到二進制的世界,數字…

一次線程數超限導致的hive寫入hbase作業失敗分析

1.集群配置 操作系統:SuSe操作系統 集群節點:100臺相同配置的服務器 單臺:核心112Core,內存396G 2.問題現象 現象1:跑單個入庫任務報錯,批量提交任務后出現OOM異常 執行12個hivesql,將數據寫入hbase.hbase入庫有近一半的任務報錯。 每次報錯的任務不是同一個,hivesql…

優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案

fm.jiecao:jiecaovideoplayer:x.x.x 優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案&#xff1a; 僅優化關鍵代碼部分&#xff0c;源碼&#xff1a; public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …

多無人機--強化學習

這個是我對于我的大創項目的構思&#xff0c;隨著時間逐漸更新 項目概要 我們的項目平臺來自挑戰杯揭綁掛帥的無人機對抗項目&#xff0c;但是在由于時間原因&#xff0c;并未考慮強化學習&#xff0c;所以現在通過大創項目來彌補遺憾 我們項目分為三部分&#xff0c;分為虛…

工業相機常用詞語解釋

線陣相機和面陣相機&#xff1a; 線陣相機&#xff0c;是采用線陣圖像傳感器的相機。線陣圖像傳感器以CCD為主&#xff0c; 一行的數據可以到幾K甚至幾十K&#xff0c;但是高度只有幾個像素&#xff0c;行頻很高&#xff0c;可以到每秒幾萬行&#xff0c;適合做非常高精度、寬…

2501,編寫dll

DLL的優點 簡單的說,dll有以下幾個優點: 1)節省內存.同一個軟件模塊,若是源碼重用,則會在不同可執行程序中編譯,同時運行這些exe時,會在內存中重復加載這些模塊的二進制碼. 如果使用dll,則只在內存中加載一次,所有使用該dll的進程會共享此塊內存(當然,每個進程會復制一份的d…

Python----Python高級(并發編程:進程Process,多進程,進程間通信,進程同步,進程池)

一、進程Process 擁有自己獨立的堆和棧&#xff0c;既不共享堆&#xff0c;也不共享棧&#xff0c;進程由操作系統調度&#xff1b;進程切換需要的資源很最大&#xff0c;效率低。 對于操作系統來說&#xff0c;一個任務就是一個進程&#xff08;Process&#xff09;&#xff…