- 高并發系統:設計原理與實踐
- 唐揚
- 1998字
- 2025-04-24 19:43:53
前言
隨著互聯網的迅猛發展,全球網民數量以及網民在網絡上消耗的時間都明顯增長,隨之而來的就是互聯網系統的并發量明顯提升。以下是幾個我們曾參與其中的案例:
● QuestMobile的數據顯示,2023年“雙11”期間,購物類App的日均活躍用戶數約為7.0億;
● 2024年春運期間,火車票官方售票網站12306的單日最高售票量創下春運歷史紀錄,達到2090.1萬張,單日最高訪問量達838.8億次;
● 在2015年除夕第一次出現搶紅包的互動形式時,微信“搖一搖”的互動峰值達到了每分鐘8.1億次。
然而,并不是只有開發、運維這些大型應用的開發和運維人員才會面對高并發的問題。無論是電子商務、社交網絡、在線娛樂還是金融服務等方面的系統,當面對運營活動時,都可能需要處理大量的并發請求,需要系統開發和運維人員確保系統在高負載下仍然能保持穩定、高效運行。
前瞻產業研究院在2024年發布的一份報告中指出,在全球從事軟件行業的公司中,99%以上是中小微企業。對于這些企業運維的系統來說,其日均活躍用戶數不會超過百萬,請求量也不高,因此其開發人員缺少高并發系統設計的經驗。
而在當今競爭激烈的技術行業,高并發系統設計成了許多崗位的必備技能之一。無論是互聯網公司、金融機構還是其他企業,都對具備高并發系統設計技能的候選人持有很高的需求。這是因為高并發系統設計不僅代表著對系統架構和性能優化的深入理解,更意味著候選人具備解決復雜技術難題的能力。因此,對于求職者而言,精通高并發系統設計成了一張極具吸引力的名片,是打開許多公司大門的“鑰匙”之一。因此,缺乏高并發系統設計經驗的開發人員,亟需一本系統、全面地講解高并發系統設計的圖書,幫助他們更深入地理解和應用高并發系統設計技術。
本書的內容覆蓋高并發系統設計和運維,旨在幫助讀者系統、快速地掌握設計和搭建高并發系統的原理,學習互聯網“大廠”積累的與高并發系統相關的實踐經驗。
高并發系統的設計是本書的重點內容,本書先明確設計難點是系統的高可用和訪問的高性能,然后展開講解4個基本設計原則(面向失敗編程、可擴展、緩存和并發)及其實現方式。做好運維,是保證高并發系統的高可用和高性能的重要手段,本書將從系統運維和團隊流程管理兩個角度展開。
本書共6章,內容組織如下。
第1章,從高并發系統的發展歷史講起,重點介紹高并發系統的設計難點、基本設計原則和度量指標。需要注意,高并發系統的4個基本設計原則對應了眾多方式,如系統容錯、冗余、分片等,這些內容將在后續章節展開。通常情況下,在高并發系統的設計中,系統的高可用可以通過面向失敗編程、可擴展和緩存這3個基本設計原則的實現來保證,訪問的高性能可以通過并發這一基本設計原則的實現來保證。如圖0-1中兩條虛線所示。
第2章,講解系統容錯的6種實現方式,包括重試、熔斷、降級、超時、限流和隔離。系統容錯用于解決當系統出現局部問題時如何確保整體系統的高可用的問題。
第3章,講解冗余的3種實現方式,包括存儲資源冗余、計算資源冗余和機房冗余。其中,存儲資源冗余包括存儲冗余、緩存冗余、CDN冗余;計算資源冗余的主要實現方式是服務器冗余;而機房冗余則將存儲資源和計算資源作為實現冗余的方法,從而提升系統跨機房、跨地域的可用性。
第4章,介紹分片,包括數據庫分片和緩存分片這兩種實現方式,以及分片后引入的新問題及對應的解決方案。
第5章,介紹并發與異步,這是提高高并發系統訪問性能的常用手段。本章先介紹并發與異步的區別,然后介紹并發編程的實現方式、安全性與性能,最后介紹使用消息隊列實現異步編程時可能遇到的問題及相應的解決方案。
第6章,從系統運維和團隊流程管理兩個角度介紹高并發系統的運維。從系統運維角度,本章將介紹如何通過全鏈路監控、報警系統、全鏈路壓測和故障演練發現系統問題、性能瓶頸和系統可用性方面的薄弱點;從團隊流程管理角度,本章將從變更流程、SOP文檔、故障復盤機制和日常系統梳理方面介紹如何在團隊內構建穩定性保障流程,從而提升高并發系統的可用性。
本書的內容組織結構如圖0-1所示。

圖0-1 本書的內容組織結構
本書案例的代碼主要使用的是Java語言,在講解熔斷開源實現時用到了Go語言。為方便閱讀,本書將在正文和代碼注釋中對代碼的主要邏輯、重點和難點進行講解,因此不要求讀者同時具備Java和Go的語言基礎。
最后,我要向許多人表達最誠摯的感謝和深深的敬意,本書的完成離不開他們的支持、幫助和鼓勵。首先,我要感謝我的家人,他們在我最需要支持和理解的時候給予了我最大程度的關愛和包容,讓我有了充分的精力和動力投入寫作;其次,我要衷心感謝我的領導,他們在我職業生涯的各個階段都給予了我無私的指導、支持和鼓勵;同時,我還要感謝所有參與本書撰寫和編輯的同事們,他們辛勤工作、通力合作,為本書的順利完成提供了堅實的保障;最后,我要向所有閱讀本書的讀者表示誠摯的感謝,是你們的支持和關注,讓我有了寫作的動力和信心。我希望本書能夠給讀者帶來有益的指導,成為讀者學習和工作中的良師益友。
唐揚
2024年9月
- Mastering Entity Framework Core 2.0
- Implementing Modern DevOps
- Testing with JUnit
- Learning C++ Functional Programming
- 程序員考試案例梳理、真題透解與強化訓練
- Python金融數據分析
- Python數據分析從0到1
- FPGA Verilog開發實戰指南:基于Intel Cyclone IV(進階篇)
- Instant Lucene.NET
- Microsoft Azure Storage Essentials
- Julia 1.0 Programming Complete Reference Guide
- Learning Nessus for Penetration Testing
- App Inventor 2 Essentials
- Java Web從入門到精通(第2版)
- 奔跑吧 Linux內核