高併發架構最全詳解(圖文全面總結)
來源:mikechen的網際網路架構
高併發架構是架構師的必備技能,也是網際網路大廠經常使用的,下面我就全面來詳解高併發架構
高併發架構
"高併發" 是指系統在同一時間段內,同時處理大量請求或併發使用者訪問的能力。
比如:在阿里雙11期間,大量使用者會湧入阿里巴巴的電商平臺,導致系統面臨極大的併發訪問壓力,這就是高併發。
而高併發架構,主要是為了解決這樣的高併發場景的一種系統架構。
以下是一些常見的高併發架構設計原則和技術,比如:分散式、微服務、負載均衡、分庫分表等。
微服務架構
微服務架構是將整個應用拆解成小而獨立的服務單元,每個服務都執行在獨立的程式中,透過輕量級通訊協議相互通訊。
如下圖所示:
這種架構風格有助於提高系統的靈活性、可維護性和可擴充套件性。每個微服務都專注於特定業務功能,獨立開發、測試、部署和擴充套件,使團隊能夠更加敏捷地進行開發和部署。微服務之間透過 API 進行通訊,允許使用不同的技術棧和獨立部署。微服務架構有助於解耦系統的各個元件,提高系統的可伸縮性,使得應用能夠更好地適應不斷變化的需求和業務規模。
常見的分散式架構,最典型的一定會涉及到微服務架構,比如:Spring Cloud 和Spring Cloud Alibaba。
負載均衡
在大型網站、應用程式或分散式系統中,負載均衡是一個關鍵的架構設計元素。
常見的軟體負載均衡方式,包括:反向代理伺服器,比如:Nginx、HAProxy等,或應用伺服器自身實現的負載均衡機制。
然後負載均衡根據預定的演算法,比如:輪詢、加權輪詢、最小連線數等分配請求。
輪詢演算法(Round Robin): 請求按照順序輪流分配給每個伺服器,每個伺服器接收到的請求數目大致相等。
加權輪詢演算法(Weighted Round Robin): 類似於輪詢演算法,但每個伺服器被分配一個權重值,權重決定了每個伺服器獲得請求的機率。
最小連線數演算法(Least Connections): 請求被分配給當前連線數最少的伺服器,這樣可以確保負載更均勻,適用於處理每個連線時間不一致的場景。
隨機演算法(Random): 請求被隨機分配給後端伺服器,這是一種簡單但不夠精確的演算法,適用於負載均衡要求不太嚴格的場景。
分散式架構
分散式架構是將系統拆分成多個獨立的模組或服務,分佈在不同的物理或虛擬環境中,透過網路進行通訊和協同工作。
比如:將系統拆分成小型、獨立的服務,每個服務專注於特定的業務功能。
以及:將資料庫分佈在不同的節點上,以提高資料訪問速度和系統的容錯性。
以及:使用分散式計算框架,比如:Spark等,以處理大規模資料的計算和分析。
分散式快取
分散式快取是一種將快取資料分散式儲存在多個節點上的技術,目的是提高系統效能、降低資料庫負載。
一些流行的分散式快取系統包括:
Redis: 開源的記憶體資料庫,支援豐富的資料結構和高階功能。
Memcached: 一款高效能的分散式記憶體物件快取系統,主要用於快取鍵/值對。
當然,這也會面臨快取的問題,比如:快取雪崩、擊穿等問題。
快取雪崩是指大量快取同時過期或失效,導致大量請求直接落到底層儲存系統上,導致資料庫或其他儲存系統負載激增。
非同步處理
在非同步處理中,任務的執行不會阻塞程式的執行。
在傳統的同步模型中,當一個任務阻塞時,整個程式可能會停滯。
非同步處理透過避免阻塞,使得程式在等待某些操作完成的同時能夠繼續執行其他任務,從而提升效能。
比如:發簡訊、增加積分完成時,程式可以繼續執行其他任務而不必等待。
透過將任務放入訊息佇列中,可以實現非同步任務的解耦。
如下圖所示:
非同步處理可以用於提高系統對使用者請求的響應速度,尤其是對於需要等待外部資源的操作。
分庫分表
分庫分表是一種資料庫水平切分的策略,用於處理大型資料集,提高資料庫效能和可擴充套件性。
如下圖所示:
庫分表採用水平切分的方式,即按照一定規則將資料行分佈到不同的資料庫或表中。
通常,切分規則可以基於資料的範圍、雜湊演算法、業務邏輯等來確定。
分庫分表支援水平擴充套件,允許透過增加資料庫節點,或表的數量來適應不斷增長的資料量,從而提升效能。
常見的資料庫分庫分表的實現方式,包括:MySQL的分庫分表中介軟體,比如:MyCAT、Vitess等。
訊息中介軟體
訊息中介軟體是構建分散式、鬆散耦合系統的重要元件,為系統提供了強大的非同步通訊能力,以及流量削峰等能力。
削峰填谷是一種在系統中處理流量波動的策略,目的是避免因流量激增,或急劇下降而導致的系統效能問題。
如下圖所示:
這一策略通常結合了削峰和填谷兩個方面:
1.削峰(Peak Shaving)
削峰是指在系統面臨激增的請求時,透過一系列手段來平滑或減少請求的峰值,以確保系統穩定執行。
削峰的目標:是透過流量控制、限流等手段,防止瞬時高峰對系統造成衝擊,保障系統的正常執行。
2.填谷(Valley Filling)
填谷是指在系統面臨請求急劇下降時,透過調整資源分配等手段來填充谷底。
填谷的目標是在低流量期間合理利用資源,避免資源浪費。
比如:線上技術在阿里雙11都會涉及到。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024924/viewspace-3006754/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微服務最全詳解(圖文全面總結)微服務
- 負載均衡最全詳解(圖文全面總結)負載
- 分散式儲存最全詳解(圖文全面總結)分散式
- SSO單點登入最全詳解(圖文全面總結)
- DDD領域驅動最全詳解(圖文全面總結)
- Kafka 架構和原理機制 (圖文全面詳解)Kafka架構
- 高併發下的資料一致性保障(圖文全面總結)
- 9大效能最佳化方案詳解(圖文全面總結)
- 高併發架構架構
- [分散式][高併發]高併發架構分散式架構
- 高可用架構設計全面詳解(8大高可用方案)架構
- Twitter 高併發高可用架構架構
- Java泛型詳解,史上最全圖文詳解!Java泛型
- 架構師眼中的高併發架構架構
- 架構師眼裡的高併發架構架構
- 最全總結 JavaScript Array 方法詳解JavaScript
- Nginx+Redis+Ehcache:大型高併發與高可用的三層快取架構總結NginxRedis快取架構
- BAT研發面試36題總結:Spring+Redis+Docker+Dubbo+高併發架構BAT面試SpringRedisDocker架構
- 高併發架構的搭建(二)架構
- 資料庫高併發解決方法總結資料庫
- 最全面的 MySQL 索引詳解MySql索引
- 史上最全 Redis 高可用解決方案總結Redis
- 高併發網站架構設計網站架構
- ZooKeeper最全詳解(萬字圖文總結)
- 高併發秒殺系統架構詳解,不是所有的秒殺都是秒殺!架構
- 高併發程式設計系列:4種Java執行緒鎖全面詳解程式設計Java執行緒
- 支付寶架構師眼裡的高併發架構架構
- 高可用+高併發+負載均衡架構設計負載架構
- 最全面的JavaScript除錯技巧總結JavaScript除錯
- RabbitMQ架構詳解(7大架構原理模型圖解)MQ架構模型圖解
- 一文詳解微服務架構微服務架構
- 構建高併發高可用的電商平臺架構實踐架構
- MySQL架構與業務總結圖MySql架構
- 架構與思維:高併發下冪等性解決方案架構
- 高併發架構的TCP知識介紹架構TCP
- 高併發架構的CDN知識介紹架構
- [分散式]架構設計原則--高併發分散式架構
- 高併發架構系列:Redis快取和MySQL資料一致性方案詳解架構Redis快取MySql