高併發設計技術方案

Jas0n0ss發表於2024-08-07

高併發設計技術方案

一、負載均衡

對於一些大型系統,一般會採用 DNS+四層負載+七層負載的方式進行多層次負載均衡

  • 演算法:隨機演算法、輪詢演算法、輪詢權重演算法、一致性雜湊演算法、最小連線、自適應演算法。

  • 負載均衡工具:LVS、Nginx、HAProxy

img

二、分散式微服務

常用微服務框架有:Spring Cloud 、Dubbo 、kubernetes、gRPC、Thrift

  • 按照業務劃分服務,單個服務程式碼量小,業務單一,容易維護。
  • 每個微服務都有自己獨立的基礎元件,例如資料庫。
  • 微服務之間的通訊是透過HTTP協議或者私有協議,且具有容錯能力。
  • 微服務有一套服務治理的解決方案,服務之間不耦合,可以隨時加入和剔除。
  • 單個微服務能夠叢集化部署,有負載均衡的能力。
  • 整個微服務系統應該有完整的安全機制,包括使用者驗證,許可權驗證,資源保護。
  • 整個微服務系統有鏈路追蹤的能力。
  • 有一套完整的實時日誌系統。

img

三、快取機制

效能不夠,快取來湊。要想快速提升效能,快取肯定少不了,快取能夠帶來效能的大幅提升。以 Memcache 為例,單臺 Memcache 伺服器簡單的 key-value 查詢能夠達到 TPS 50000 以上,Redis效能資料是10W+ QPS。

img

  • 常見的快取: 分為本地快取分散式快取,區別在與是否要走網路通訊。
  • 常見快取策略:
    • Cache aside,通常會先更新資料庫,然後再刪除快取,為了兜底還會設定快取時間。
    • Read/Write through, 一般是由一個 Cache Provider 對外提供讀寫操作,應用程式不用感知操作的是快取還是資料庫。
    • Write behind,延遲寫入,Cache Provider 每隔一段時間會批次寫入資料庫,大大提升寫的效率。像作業系統的page cache也是類似機制。

四、分散式關係型資料庫

  • MySQL資料庫採用B+數索引,三層結構,為了保證IO效能,一般建議單表儲存 千萬 條資料。
  • 如果遇到單機資料庫效能瓶頸,我們可以考慮分表。分表又可以細分為 垂直分表 和 水平分表 兩種形式。

1、垂直分表

資料表垂直拆分就是縱向地把一張表中的列拆分到多個表,表由“寬”變“窄”,簡單來講,就是將大表拆成多張小表,一般會遵循以下幾個原則:

  • 冷熱分離,把常用的列放在一個表,不常用的放在一個表。
  • 欄位更新、查詢頻次拆分。
  • 大欄位列獨立存放。
  • 關係緊密的列放在一起。

2、水平分表

表結構維持不變,對資料行進行切分,將表中的某些行切分到一張表中,而另外的某些行又切分到其他的表中,也就是說拆分後資料集的並集等於拆分前的資料集.

分庫分表技術點:

  • SQl組合。因為是邏輯表名,需要按分表鍵計算對應的物理表編號,根據邏輯重新組裝動態的SQL。
  • 資料庫路由。如果採用分庫,需要根據邏輯的分表編號計算資料庫的編號。
  • 結果合併。如果查詢沒有傳入指定的分表鍵,會全庫執行,此時需要將結果合併再輸出。

五、分散式訊息佇列

六、CDN

CDN 全稱 (Content Delivery Network),內容分發網路。目的是在現有的網路中增加一層網路架構,將網站的內容釋出到最接近使用者的網路“邊緣”,使使用者可以就近取得所需的內容,提高使用者訪問網站的響應速度。

CDN = 映象(Mirror)+快取(Cache)+整體負載均衡(GSLB)。

CDN都以快取網站中的靜態資料為主,如:CSS、JS、圖片和靜態頁面等資料。使用者從主站伺服器中請求到動態內容後,再從CDN下載靜態資料,從而加速網頁資料內容的下載速度。

img

相關文章