自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

系統(tǒng)設(shè)計目標:如何提升系統(tǒng)性能?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
優(yōu)化方案因問題不同而異。例如,如果是數(shù)據(jù)庫訪問慢,可能需要檢查是否有鎖表、全表掃描、索引是否合適、JOIN 操作是否優(yōu)化、是否需要加緩存等;如果是網(wǎng)絡(luò)問題,則需要檢查網(wǎng)絡(luò)參數(shù)、抓包分析是否有大量超時重傳、網(wǎng)卡是否有丟包等。

高并發(fā)系統(tǒng)設(shè)計的核心目標是要保證系統(tǒng)在處理大量并發(fā)請求時,能夠保持高性能、高可用性以及良好的可擴展性。這三個方面相互關(guān)聯(lián),共同支撐著系統(tǒng)能夠應(yīng)對不斷增加的流量和需求。具體來說:

  1. 性能:系統(tǒng)需要在高并發(fā)場景下保持低延遲的響應(yīng)時間,確保用戶體驗。比如,面對每秒一萬次請求的情況下,系統(tǒng)需要保證響應(yīng)時間在毫秒級,而非秒級,否則用戶體驗會大打折扣。
  2. 可用性:高并發(fā)系統(tǒng)需要能夠保持長時間的穩(wěn)定運行。即使面對突發(fā)的大量流量,系統(tǒng)也應(yīng)當能夠保證服務(wù)不中斷。例如,一些大型電商平臺在“雙十一”期間,雖然流量激增,但仍需確保全天候無故障運行。
  3. 可擴展性:高并發(fā)系統(tǒng)必須能夠應(yīng)對峰值流量的挑戰(zhàn),這需要系統(tǒng)具備良好的擴展能力。通常,面對流量的波動,特別是突發(fā)流量時,系統(tǒng)應(yīng)該能夠在短時間內(nèi)擴容,并且不影響正常運行。

在進入如何提升系統(tǒng)性能之前,我們可以從一些常見的技術(shù)手段著手,例如:

  • 負載均衡:通過分發(fā)請求到多個服務(wù)器,避免單點瓶頸,提高系統(tǒng)的并發(fā)處理能力。
  • 緩存:減少對數(shù)據(jù)庫和其他后端服務(wù)的依賴,通過緩存熱點數(shù)據(jù),減輕系統(tǒng)壓力。
  • 異步處理:對于耗時操作,通過異步任務(wù)來處理,不阻塞主流程。
  • 數(shù)據(jù)庫優(yōu)化:通過讀寫分離、分庫分表等策略優(yōu)化數(shù)據(jù)庫訪問效率。

這些方法是提高性能的基礎(chǔ),接下來可以深入探討如何根據(jù)具體情況進一步優(yōu)化。

性能優(yōu)化原則

在進行性能優(yōu)化時,確實需要遵循一些基本原則,尤其是面對高并發(fā)系統(tǒng)設(shè)計的復(fù)雜性。下面總結(jié)了幾個優(yōu)化的關(guān)鍵點,幫助我們有效地提升系統(tǒng)性能:

1. 問題導向

盲目優(yōu)化是效率低下的。優(yōu)化應(yīng)當基于實際的性能瓶頸,而不是做無目的的優(yōu)化。例如,如果系統(tǒng)中某個組件沒有遇到性能問題,就不需要對其進行優(yōu)化。相反,我們應(yīng)當關(guān)注最影響性能的部分,優(yōu)先解決這些問題。這通??梢酝ㄟ^ 性能監(jiān)控 和 分析工具 來幫助識別瓶頸。

2. “八二原則”

性能優(yōu)化要遵循“八二原則”——20%的優(yōu)化措施解決80%的問題。在實際工作中,我們經(jīng)常會發(fā)現(xiàn),只有少數(shù)幾個性能瓶頸點在占據(jù)了大部分系統(tǒng)資源。因此,找到這些瓶頸并對其進行優(yōu)化,可以帶來最明顯的性能提升。

3. 數(shù)據(jù)支撐

性能優(yōu)化不僅要有明確的目標,還要通過數(shù)據(jù)來驗證效果。你可以利用 性能測試工具(如 JMeter、LoadRunner、或者自己的自定義監(jiān)控工具)來進行基準測試,評估響應(yīng)時間、吞吐量、并發(fā)請求數(shù)等關(guān)鍵指標。優(yōu)化之后,及時記錄和比較優(yōu)化前后的數(shù)據(jù)變化,從而確保優(yōu)化是有效的。

4. 持續(xù)優(yōu)化

性能優(yōu)化是一個不斷迭代的過程。隨著系統(tǒng)的業(yè)務(wù)邏輯變得越來越復(fù)雜,新的瓶頸可能會不斷出現(xiàn)。因此,持續(xù)的性能測試和優(yōu)化是非常重要的。在設(shè)計高并發(fā)系統(tǒng)時,我們不可能一次性解決所有問題,而是要持續(xù)監(jiān)控、分析并逐步優(yōu)化。

性能的度量指標

性能優(yōu)化中,性能度量標準至關(guān)重要,因為它幫助我們明確系統(tǒng)的實際性能狀態(tài),并能用來衡量優(yōu)化措施的效果。只有通過合理的度量指標,我們才能清晰地知道性能瓶頸在哪里,哪些優(yōu)化是有效的。單次響應(yīng)時間是基礎(chǔ)指標,但它并不足夠全面,因此需要通過一些統(tǒng)計方法來進一步分析數(shù)據(jù)。

常見的性能度量特征值

  1. 平均值
    平均響應(yīng)時間是最常見的性能度量指標,它通過將所有請求的響應(yīng)時間加總并除以總請求數(shù)來計算。雖然平均值在一定程度上能反映系統(tǒng)性能,但它對極端值(如偶爾的慢請求)非常不敏感。正如你提到的,在大多數(shù)請求響應(yīng)時間為1ms的情況下,單個100ms的慢請求也不會對平均值產(chǎn)生很大影響,因此可能導致性能問題被低估。
    優(yōu)點:簡單易懂,易于計算。
    缺點:對偶發(fā)的慢請求不敏感,可能掩蓋性能問題。
  2. 最大值
    最大響應(yīng)時間記錄了所有請求中最慢的一次響應(yīng)。它可以告訴我們最糟糕的性能情況,但它對偶發(fā)的異常情況(如一次長時間的網(wǎng)絡(luò)延遲)非常敏感,可能會嚴重扭曲性能的實際水平。
    優(yōu)點:可以展示最差的性能情況。
    缺點:非常敏感,可能不代表大部分請求的實際性能。
  3. 分位值
    分位值是性能度量中更為精確的標準,常見的有 90分位、95分位 和 99分位。以90分位為例,它表示在所有請求中,90%的請求響應(yīng)時間小于等于某個值,剩余10%的請求響應(yīng)時間則更長。分位值通過消除極端的慢請求影響,能夠更準確地反映大多數(shù)請求的性能情況。

圖片圖片

在我來看,分位值是最適合作為時間段內(nèi),響應(yīng)時間統(tǒng)計值來使用的,在實際工作中也應(yīng)用最多。除此之外,平均值也可以作為一個參考值來使用。我在上面提到,脫離了并發(fā)來談性能是沒有意義的,我們通常使用吞吐量或者響應(yīng)時間來度量并發(fā)和流量,使用吞吐量的情況會更多一些。但是你要知道,這兩個指標是呈倒數(shù)關(guān)系的。這很好理解,響應(yīng)時間 1s 時,吞吐量是每秒 1 次,響應(yīng)時間縮短到 10ms,那么吞吐量就上升到每秒 100 次。所以,一般我們度量性能時都會同時兼顧吞吐量和響應(yīng)時間,比如我們設(shè)立性能優(yōu)化的目標時通常會這樣表述:在每秒 1 萬次的請求量下,響應(yīng)時間 99 分位值在 10ms 以下。

高并發(fā)下的性能優(yōu)化

假如說,你現(xiàn)在有一個系統(tǒng),這個系統(tǒng)中處理核心只有一個,執(zhí)行的任務(wù)的響應(yīng)時間都在 10ms,它的吞吐量是在每秒 100 次。那么我們?nèi)绾蝸韮?yōu)化性能從而提高系統(tǒng)的并發(fā)能力呢?主要有兩種思路:一種是提高系統(tǒng)的處理核心數(shù),另一種是減少單次任務(wù)的響應(yīng)時間。

1. 提高系統(tǒng)的處理核心數(shù)

提高系統(tǒng)的處理核心數(shù)就是增加系統(tǒng)的并行處理能力,這個思路是優(yōu)化性能最簡單的途徑。

通過增加并行進程提高吞吐量

以我們之前的例子為基礎(chǔ),假設(shè)你將系統(tǒng)的處理核心數(shù)增加為兩個,并且增加一個進程,使得這兩個進程分別在不同的核心上運行。這樣,從理論上講,你的系統(tǒng)吞吐量可以增加一倍。

在這種情況下,吞吐量和響應(yīng)時間不再呈倒數(shù)關(guān)系,而是遵循以下公式:

吞吐量 = 并發(fā)進程數(shù) / 響應(yīng)時間

這意味著,增加并發(fā)進程數(shù)有助于提高系統(tǒng)的吞吐量,然而,響應(yīng)時間并不一定按比例縮短。

阿姆達爾定律 (Amdahl’s Law)

計算機領(lǐng)域的 阿姆達爾定律(Amdahl’s Law)由吉恩·阿姆達爾在 1967 年提出,用于描述并發(fā)進程數(shù)與響應(yīng)時間之間的關(guān)系。它主要說明了并行計算的加速比,也就是并行化之后效率提升的情況。

阿姆達爾定律的公式為:

其中:

  • W_s 表示任務(wù)中的串行計算量
  • W_p 表示任務(wù)中的并行計算量
  • s 表示并行進程數(shù)

從這個公式,我們可以推導出另一個公式:

其中:

  • s 表示并行進程數(shù)
  • p 表示任務(wù)中并行部分的占比

結(jié)論

  1. 當 p = 1 時,也就是任務(wù)完全可以并行化時,加速比與并行進程數(shù) s 成正比,系統(tǒng)的性能可以隨之線性提升。
  2. 當 p = 0 時,任務(wù)完全是串行的,無法并行化,加速比為 1,系統(tǒng)性能無法提升。
  3. 當 s 趨近于無窮大時,加速比趨近于 1 / (1 - p),這意味著即使增加無限多個處理核心,提升的效果也會受到 p(并行部分的占比)的限制。

特別注意

  • 當 p = 1 時,任務(wù)完全并行化時,理論上加速比是無限的,這也是并行化帶來的最大效益。
  • 當 p 遠小于 1,即任務(wù)中大部分是串行計算時,即便增加大量并行進程,性能提升也會受到極大限制。

簡化結(jié)論

盡管阿姆達爾定律的公式推導有些復(fù)雜,實際工作中我們通常只需要記住以下結(jié)論:

  • 完全并行的任務(wù)能夠無限加速(p = 1)。
  • 任務(wù)的串行部分(p < 1)會限制系統(tǒng)的并行化效果。

我們似乎找到了解決問題的銀彈,是不是無限制地增加處理核心數(shù)就能無限制地提升性能,從而提升系統(tǒng)處理高并發(fā)的能力呢?很遺憾,隨著并發(fā)進程數(shù)的增加,并行的任務(wù)對于系統(tǒng)資源的爭搶也會愈發(fā)嚴重。在某一個臨界點上繼續(xù)增加并發(fā)進程數(shù),反而會造成系統(tǒng)性能的下降,這就是性能測試中的拐點模型。

圖片圖片

從圖中可以看出,當并發(fā)用戶數(shù)處于輕壓力區(qū)時,響應(yīng)時間保持平穩(wěn),吞吐量與并發(fā)用戶數(shù)呈線性關(guān)系。而當并發(fā)用戶數(shù)進入重壓力區(qū)時,系統(tǒng)資源接近極限,吞吐量開始下降,響應(yīng)時間略有上升。進一步增加壓力時,系統(tǒng)進入拐點區(qū),超負荷狀態(tài)下吞吐量下降,響應(yīng)時間急劇上升。因此,評估系統(tǒng)性能時,我們通常通過壓力測試來找到系統(tǒng)的“拐點”,以了解系統(tǒng)的承載能力,并定位瓶頸,進行持續(xù)優(yōu)化。

接下來,我們來看看優(yōu)化性能的另一種方式:減少單次任務(wù)的響應(yīng)時間。

2. 減少單次任務(wù)響應(yīng)時間

想要減少任務(wù)的響應(yīng)時間,首先需要判斷系統(tǒng)是 CPU 密集型還是 IO 密集型的,因為不同類型的系統(tǒng)優(yōu)化方法不同。

CPU 密集型系統(tǒng)

CPU 密集型系統(tǒng)主要處理大量的 CPU 運算。在這種情況下,選用更高效的算法或減少運算次數(shù)是提升性能的重要手段。例如,如果系統(tǒng)的主要任務(wù)是計算 Hash 值,選擇更高性能的 Hash 算法能夠顯著提升系統(tǒng)性能。

發(fā)現(xiàn)這類問題的主要方法是使用 Profile 工具,如 Linux 的 perf 或 eBPF,來找出消耗 CPU 時間最多的方法或模塊。

IO 密集型系統(tǒng)

IO 密集型系統(tǒng)的大部分操作都在等待 IO 完成,這里的 IO 指的是磁盤 IO 和網(wǎng)絡(luò) IO。大多數(shù)系統(tǒng),如數(shù)據(jù)庫系統(tǒng)、緩存系統(tǒng)、Web 系統(tǒng),都是 IO 密集型系統(tǒng)。其性能瓶頸可能出現(xiàn)在系統(tǒng)內(nèi)部,也可能在依賴的其他系統(tǒng)。

發(fā)現(xiàn) IO 性能瓶頸的手段主要有兩類:

  1. 使用工具,Linux 提供了豐富的工具集,如網(wǎng)絡(luò)協(xié)議棧、網(wǎng)卡、磁盤、文件系統(tǒng)、內(nèi)存等工具,能幫助排查問題。
  2. 通過監(jiān)控來發(fā)現(xiàn)性能問題,監(jiān)控可以對任務(wù)的每個步驟做分時統(tǒng)計,從而找出哪些步驟消耗了更多時間。

優(yōu)化方案

優(yōu)化方案因問題不同而異。例如,如果是數(shù)據(jù)庫訪問慢,可能需要檢查是否有鎖表、全表掃描、索引是否合適、JOIN 操作是否優(yōu)化、是否需要加緩存等;如果是網(wǎng)絡(luò)問題,則需要檢查網(wǎng)絡(luò)參數(shù)、抓包分析是否有大量超時重傳、網(wǎng)卡是否有丟包等。

責任編輯:武曉燕 來源: 二進制跳動
相關(guān)推薦

2024-08-12 09:38:33

2009-02-18 20:27:24

組策略提升Windows性能

2015-07-28 09:19:10

Linux內(nèi)核

2011-08-09 17:15:45

注冊表注冊表編輯器

2016-09-26 13:50:52

Linux系統(tǒng)性能

2024-12-11 07:59:02

2018-12-10 15:13:06

緩存系統(tǒng)性能數(shù)據(jù)

2009-03-22 19:19:15

多核多核服務(wù)器多核歷史

2023-10-23 08:23:16

系統(tǒng)性能數(shù)據(jù)庫

2023-06-12 00:22:50

操作系統(tǒng)應(yīng)用程序內(nèi)核鎖

2023-10-26 08:33:16

Redis管道技術(shù)

2009-09-29 10:39:04

Linuxlinux系統(tǒng)性能檢測

2010-04-23 11:44:34

Aix系統(tǒng)

2024-04-01 08:04:05

JProfilerJVM工具

2023-10-17 14:35:22

人工智能AI

2015-12-17 14:32:46

NmonLinux性能

2018-08-09 09:00:34

2012-12-10 13:43:07

固態(tài)硬盤系統(tǒng)性能內(nèi)存

2019-03-04 10:45:57

Linux Cockp系統(tǒng)性能命令

2020-09-29 07:59:22

CPU系統(tǒng)性能
點贊
收藏

51CTO技術(shù)棧公眾號