簡介
在系統架構的領域中,系統性能的現況常常是討論的焦點,其中所謂的三高——「高併發」、「高可用」與「高性能」更是不可或缺的概念。接下來,本文將對這三者進行介紹。
高併發
在網路文章與書籍中,「高併發」相關的主題經常被提及,因此這可以說是最受關注的概念之一。
高併發(High Concurrency)可以理解為承擔流量的能力,即如何應對短時間內的高流量。大多數系統在正常情況下運作良好,但在高併發情境下,情況可能就不那麼樂觀了。每個函數的處理速度、API的回傳速度、SQL的效能等,都是需要考量的因素。即使僅僅慢了0.1秒,都可能導致整個系統崩潰。
目前實現高併發的方式主要有以下幾種:
- 垂直擴展:直接升級伺服器等硬體設施,以提升計算速度,簡單暴力的方式。
- 水平擴展+負載均衡:通過負載均衡(Load Balance)將請求平均分配到多台伺服器上。[註1]
- 多線程:利用多線程技術同時處理多個請求。
- 事件驅動架構:透過事件循環和回調函數(如 Node.js)來處理大量併發請求。
- 緩存:利用緩存來減少對後端數據庫的請求,提高響應速度。
高可用
高可用性(High Availability, HA)是指系統能夠保持多長時間正常運行的能力,或稱低停機時間。高可用的目標在於最小化系統的停機時間,從而提升用戶體驗和服務的可靠性。
目前實現高併發的方式主要有以下幾種:
- 負載均衡:將請求分散到多個伺服器上,以減少單一伺服器的負擔,提升整體可用性。
- 灰度發布:在更新新版本時,先對部分機器進行更新,確認無誤後再更新其餘伺服器。
- 冗餘系統:通過使用多個伺服器或組件,確保即使某一部分出現故障,系統仍能正常運作。例如,在不同地理位置設置伺服器。
- 故障轉移:當主系統整個故障時,自動切換至備用系統以保持服務連續性。
- 監控和自動恢復:實施監控系統,及時檢測故障並自動啟動修復流程。
- 故障演練:利用工具進行各種故障的演練,確保應對流程的有效性。
高性能
高性能(High Performance)指的是系統或應用處理任務的能力,簡單來說,就是對用戶的體驗。一般而言,高性能包含「快速處理能力」、「高資源利用率」、「低延遲」以及「可擴展性」。
目前實現高性能的方式有以下幾種:
- 演算法:選擇高效的演算法和數據結構,可以有效減少計算量。
- 多線程:充分利用多核處理器的能力,同時執行多個任務。
- 緩存:使用緩存儲存頻繁訪問的數據,減少對資料庫的請求。
- 性能監控:實施監控工具,及時發現並解決性能瓶頸。
總結
在這篇文章中,我簡要介紹了系統架構的三高議題。在實務上,近年來越來越紅的電商、代購、限量商品等都會用到這方面的知識。若想深入了解更多詳細資料,可以參考這篇文章:高併發通用設計閱讀筆記。
[註1] 以 AWS、GCP 等雲端平台來說都有提供自動化的負載均衡設定,當流量達到設定值時,系統會自動啟動新的機器以分散流量,而在流量降低時則會關閉不需要的機器。
參考資料:
- https://ja99-doge.github.io/2022/12/12/high_concurrency/#如何提昇系統性能
- https://cloud.tencent.com/developer/article/2021745
- https://aws.amazon.com/tw/what-is/apache-kafka/
- https://ithelp.ithome.com.tw/articles/10222520
- https://hackmd.io/@tienyulin/redis-master-slave-replication-sentinel-cluster
- https://zh.wikipedia.org/zh-tw/內容傳遞網路