如何设计一个高并发系统?
所謂高并發系統,是指能同時處理大量并發請求,并及時響應,從而保證系統的高性能和高可用
那么我們在設計一個高并發系統時,應該考慮哪些方面呢?
1. 搭建集群
如果你只部署一個應用,只部署一臺服務器,那抗住的流量請求是非常有限的。并且,單體的應用,有單點的風險,如果它掛了,那服務就不可用了
因此,設計一個高并發系統,我們可以采用分布式部署的方式,部署多臺服務器,使用負載均衡的方式把流量分流開,讓每個服務器都承擔一部分的并發和流量,從而提升整體系統的并發能力
2. 微服務拆分
所謂的微服務拆分,其實就是把一個單體的應用,按功能單一性,拆分為多個服務模塊。比如一個電商系統,拆分為用戶系統、訂單系統、商品系統等等。
因此,微服務拆分同樣可以分攤請求流量,提高并發能力。如果配合分布式部署,為每個微服務搭建集群,性能將進一步提升
3. 分庫分表
在高并發的場景下,大量請求訪問數據庫,如果表存儲的數據量太大,會影響 MySQL 性能,此時可以考慮分庫分表
不管是分庫還是分表,都有兩種切分方式:水平切分和垂直切分
- 分表
- 垂直分表:表中的字段較多,將字段拆分到多個表
- 水平分表:表中的數據較多,將數據拆分到多個表
- 分庫
- 垂直分庫:數據庫表太多,按照業務邏輯進行切分,比如用戶相關表放在一個數據庫,訂單相關表放在另一個數據庫
- 水平分庫:指將單張表的數據切分到多個數據庫,每個數據庫都具有相應的表,只是表的數據不同
4. 主從分離
單機 MySQL 支撐的請求訪問是有限的,如果遇到雙十一這種情況查詢請求量會非常大。這時可以做主從分離,實時性要求不高的讀請求都去讀從庫,寫請求或者實時性要求高的請求才走主庫,提高了系統的吞吐
5. 使用緩存
使用緩存可以提升接口的性能,在高并發場景下支持更多的用戶同時訪問。常用的緩存包括:Redis 緩存,內存緩存,瀏覽器緩存等等
6. CDN
CDN 就是內容分發網絡,它表示將靜態資源分發到位于多個地理位置機房的服務器,可以做到數據就近訪問,加速了靜態資源如圖片、視頻等的訪問速度,讓系統更好處理正常別的動態請求
7. 異步處理
在類似雙十一的活動可能會遇到流量暴漲,系統處理不過來,造成請求阻塞,系統崩潰。這時可以引用消息隊列,將請求寫入消息隊列,系統再以合適的速率從消息隊列獲取請求處理,避免造成阻塞,提高系統性能
8. 熔斷降級
當前互聯網系統一般都是分布式部署的,如果出現某個基礎服務不可用,最終將導致整個系統不可用。比如分布式調用鏈路 A -> B -> C,如果 C 出現問題,將導致 B 也會延遲,從而 A 也會延遲。A 會不斷失敗重新請求,消耗占用系統資源,最終會造成其他的請求同樣不可用,導致系統崩潰。熔斷機制可以防止應用不斷嘗試可能超時或失敗的服務,保證自身快速響應,提高系統吞吐量
降級機制是指在流量過大,系統資源有限的情況下,為了保證關鍵服務正常運行,降低部分非關鍵服務的優先級或質量的一種策略。比如電商網站,流量大的時候就把評論功能停掉,把資源讓出來給關鍵服務
9. 限流
大流量過來時,如果系統資源有限,實在沒辦法處理全部處理,可以采用限流機制,控制接口發送或接收請求的速率,當超過閾值時,限制新的請求對系統的訪問,從而保證系統的穩定性
總結
以上是生活随笔為你收集整理的如何设计一个高并发系统?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初探: 通过pyo3用rust为pyth
- 下一篇: python jira 读取表数据批量新