高併發解決方案總結

      本文總結面對高併發場景可以採用的解決方案,文章只是介紹整體相關概念,其中每一項都可以利用多種不同中間件或者框架來實現,可以根據需要選擇某幾個進行更加深入的學習和理解。

1. 擴容

  • 垂直擴容(縱向擴展):提高系統部件能力
  • 水平擴容(橫向擴展):增加更多系統成員來實現

(1) 數據庫擴容:

  • 讀多寫少--讀操作擴展:使用memcache、redis、CDN等緩存
  • 讀少寫多--寫操作擴展:使用Cassandra、Hbase等

2. 緩存
(1) 緩存特徵概念:

  • 命中率:命中數/(命中數+沒有命中數)
  • 最大元素(空間)
  • 清空策略:FIFO、LFU、LRU、過期時間、隨機等

(2) 緩存命中率影響因素:

  • 業務場景和業務需求
  • 緩存的設計(粒度和策略)
  • 緩存容量和基礎設施

(3) 緩存分類和應用場景:

  • 本地緩存:編程實現(成員變量、局部變量、靜態變量)、Guava Cache
  • 分佈式緩存:Memcache、Redis

(4) 高併發場景下緩存常見問題:

  • 緩存一致性
  • 緩存併發問題
  • 緩存穿透問題
  • 緩存的雪崩現象

3. 消息隊列

(1) 消息隊列特性

  • 業務無關:只做消息分發
  • FIFO:先投遞先到達
  • 容災:節點的動態增刪和消息的持久化
  • 性能:吞吐量提升,系統內部通信效率提高

(2) 消息隊列使用原因:生產和消費的速度或穩定性等因素不一致

(3) 消息隊列好處:

  • 業務解耦
  • 最終一致性
  • 廣播
  • 錯峯與流控

4. 應用拆分

(1) 應用拆分的原則

  • 業務優先
  • 循序漸進
  • 兼顧技術:重構、分層
  • 可靠測試

(2) 應用拆分時的思考

  • 應用之間通信機制:RPC(dubbo等)、消息隊列
  • 應用之間數據庫設計:每個應用都有獨立的數據庫
  • 避免事務操作跨應用

5. 應用限流

(1) 應用限流的算法

  • 計數器法
  • 華東窗口
  • 漏桶算法
  • 令牌桶算法

6. 服務降級和服務熔斷

(1) 服務降級的分類

  • 自動降級:超時、失敗次數、故障、限流
  • 人工降級:秒殺、雙11大促等

(2) 服務降級與服務熔斷的比較

  • 共性:目的、最終表現、粒度、自治
  • 區別:觸發原因、管理目標層次、實現方式

(3) 服務降級要考慮的問題

  • 核心服務、非核心服務
  • 是否支持降級,降級策略
  • 業務放通場景,策略

7. 數據庫切庫分庫分表

8. 高可用手段

  • 分佈式任務調度:elastic+zookeeper,schedulerx
  • 服務器主備切換:apache curator+zookeeper分佈式鎖實現
  • 監控報警機制
  • 阿里的中間件:tddl,diamond,精衛,txc,opensearch等

 

 

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