- Java并發編程深度解析與實戰
- 譚鋒(Mic)
- 877字
- 2022-05-10 18:39:12
1.2 系統如何支撐高并發
從一個完整的架構來考慮,一個架構整體支撐的并發數無非就是由硬件和軟件兩個方面來決定的,當然最根本的還是硬件性能,軟件的本質是最大限度地利用硬件資源來完成計算工作。
而硬件的組成無非就是CPU、網卡、帶寬、內存、磁盤等。所以對性能提升來說,關鍵是要提升硬件的基礎性能,比如CPU核心數由16核增加到32核、網卡升級到萬兆字節、使用更高效的SSD硬盤、擴大內存等。
有了硬件作為基礎,軟件方面就可以有更多的發揮空間,比如對于I/O性能要求較高的場景,可以盡可能使用內存來存儲,而內存足夠大的情況下,可以把更多的數據存到內存,減少和磁盤的交互以提升I/O性能。對于運算性能較高的場景,可以采用多線程的方式來處理。CPU核心數越多,并行計算的性能就越高。
當單個計算機的硬件資源達到瓶頸時,就可以采用水平擴展的方式來提升性能。所謂水平擴展就是橫向增加服務器,利用多個計算機資源組成一個分布式計算機,也就是我們熟知的分布式架構體系。但是架構由單體變成分布式之后,整個系統的復雜度會增加,比如涉及服務治理、服務監控、服務高可用等。
對于一個高并發的應用,系統架構最核心的問題就是如何讓更多用戶在最短的時間內獲得想要的信息及完成想要的操作,對于這個過程一般用RT(Response-Time)作為衡量指標,RT的數值大小反映了整個系統的快慢,因此本質上還是和硬件資源瓶頸有關系。
當然,在軟件系統層面還有一些其他優化方案。
? 使用集群化部署,通過多個計算機節點來分攤請求流量,從而降低單節點的計算瓶頸,最終達到提升性能的目的。
? 對于某些特定場景,采用多線程異步執行的方式進行優化,簡單來說就是服務端針對當前請求先返回一個正在處理中的標識,讓用戶先收到返回結果,然后服務端這邊異步運行該任務,當任務處理完成后再發給用戶一個通知。
? 引入緩存機制,減少應用直接和數據庫之間的交互及計算工作,提升I/O性能,使得客戶端能夠更快地收到任務的執行結果。
? 通過CDN(內容分發網絡)讓用戶訪問最近的節點來獲得需要的內容。
總之,系統支撐多少并發的決定因素非常多,而線程是最基礎、最重要的機制,因為它能夠利用多核CPU機制來提升程序的計算速度。