高併發的一些思路

思路

一數據庫讀寫分離

  1. 在實際的項目中,我們對讀的操作是大於寫操作的,如果讀寫都在一個庫的情況下,寫操作會鎖行數據,這個時候查詢數據庫就會很慢,非常影響性能,而且數據庫讀寫切換也是非常耗性能的。
  2. 讀寫分離後,對數據庫的讀操作去讀庫,寫操作去寫庫,會提高高併發的數據庫訪問性能,但是也有風險,什麼風險呢,因爲讀庫的數據是從寫庫通過過來的,當讀一個數據的時候,寫庫的數據還沒有同步過來,這個時候就會產生錯誤數據。
    1. 案例(細節https://blog.csdn.net/zhou920786312/article/details/97813954)
      1. 我以前接手一個項目,項目的是數據庫是讀寫分離的,其中有個插入數據到數據庫,並查詢插入id的操作。

        1. 將數據插入數據庫(主鍵自增長)
        2. 查詢當前連接插入的最大id( LAST_INSERT_ID)
      2. 它查到的id不是當前插入的數據庫id,因爲寫庫的數據還沒有同步到讀庫,所以我們查到的數據不是插入數據的id。

二分離靜態資源

  1. 在web項目中,加載圖片是非常耗資源的。通常我們會把圖片放到圖片服務器,並針對圖片資源進行加速。
    1. 將大圖片分割多個小圖片,開啓多個線程進行操作,最後多各個進程的處理結果進行彙總處理。
  2. 同理針對js,css,zip文件我們可以做專門的處理

三 cdn加速

  1. CDN加速就是在靠近用戶的物理位置上架設服務器,根據就近原則讓用戶訪問物理上最近的服務器來節省網絡傳輸時間。
  2. 作用降低網絡傳輸時間

四 用戶請求,數據預處理

  1. 我們把一次HTTP請求的時間分成3段:請求–> 計算處理–> 響應。那麼我們能專門優化呢。
    1. 請求:數據壓縮傳輸,降低網絡傳輸時間
    2. 響應:數據壓縮傳輸,降低網絡傳輸時間
    3. 計算處理:預先處理好結果,並將結果緩存起來,當用戶請求的時候直接返回處理結果。
  2. 案例
    1. 我剛參加工作的那會,我接手一個項目,優化用戶登錄模塊。
      1. 用戶登錄,做了登錄校驗,校驗成功後
        1. 獲取用戶的基本信息
        2. 獲取用戶的零錢信息(我們有自己的購物商場)
        3. 獲取用戶物流地址信息
        4. 獲取用戶帖子信息(用戶發帖)
        5. 獲取用戶等級信息(類似qq的等級)
        6. 還有一大堆的用戶信息。
      2. 上面的操作是如此的多,而且有些表數據是非常大(單表查詢,單表性能高),造成用戶登錄非常耗時
      3. 針對上面的情況,我做了優化如下
        1. 針對固定的數據,如用戶基本信息,我放到緩存中,不去數據庫查詢,這樣減少數據庫的請求壓力
        2. 針對那些會變化,但是變化間隔時間很大的數據,放到緩存,比如物流地址
        3. 正對那些需要返回的實時數據,比如用戶帖子信息(其他用戶對帖子的評論),我開啓一個定時任務,間隔時間更新用戶帖子信息,並把帖子信息放到緩存中,當用戶請求帖子接口,不去操作數據庫,直接從緩存響應並給出結果。

五 緩存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章