1. 程式人生 > >一文詳解高效能伺服器架構設計

一文詳解高效能伺服器架構設計

引言
本文從一個簡單的伺服器架構,通過討論出現的問題,進行一步一步優化,最後進化成高效能分散式伺服器架構。


  1. 初始情況:一個典型的伺服器結構
    在這裡插入圖片描述

  2. 新增資料訪問層DAL,解決超出連線次數的問題
    在這裡插入圖片描述

  3. 新增快取,減少與資料庫建立連線
    即使添加了DAL,但是資料庫每秒允許建立的連線總會有上限,可以從不與資料庫建立連線就能訪問資料庫中的資料著手,來提高訪問效率。
    答案:新增快取,將資料庫經常訪問的資料,假如到快取,可以使得訪問資料時不與資料庫建立連線,而是直接從快取中查詢。
    在這裡插入圖片描述

  4. 資料庫主從複製實現讀寫分離
    在這裡插入圖片描述

  5. APP伺服器的負載均衡
    (1)在實際開發中,APP伺服器肯定並不是一個,而是根據事先的功能有很多種APP伺服器,如APP1、APP2、APP3等伺服器,它們分別負責實現不同的功能。(2)由於伺服器的變多,因此就存在有的伺服器任務很多,有的伺服器無任務可做,造成負載分配不均衡的問題。
    解決方案:(1)新增任務伺服器:客戶端請求都發送給任務伺服器 (2)空閒的APP伺服器主動從任務伺服器中“拿”任務
    在這裡插入圖片描述

  6. 水平/垂直分庫分表
    資料庫中的資料太多,將會導致激烈的鎖競爭
    垂直分表/分庫:資料庫可以按照一定的邏輯,將表分散到不同的資料庫,比如有3中表:使用者表、業務表、基礎資訊表。採用垂直分割槽,將使用者表、業務表、基礎資訊表分別存放到3個數據庫中。
    在這裡插入圖片描述
    水平分表:一般情況下不使用垂直分表,而是使用水平分表,將資料庫切分成10塊,每塊都包含使用者表、業務表、基礎資訊表,將每塊都存放到一個數據庫上。
    在這裡插入圖片描述


伺服器效能的四大殺手
8. 資料拷貝 —— 快取
9. 環境切換 —— 該不該用多執行緒?單執行緒好還是多執行緒好?
10. 記憶體分配 —— 記憶體池
11. 鎖競爭 —— 通過邏輯避免鎖