高併發、高可用系統設計原則

高併發原則

  • 無狀態:應用無狀態,配置文件有狀態
  • 拆分:系統維度、功能維度、讀寫維度、AOP維度、模塊維度
  • 服務化:進程內服務->單機遠程服務->集羣手動註冊服務->自動註冊和發現服務->服務分組/隔離/路由->服務治理(限流/黑名單)
  • 消息隊列:實現服務解耦、異步處理、流量削峯/緩衝(需要注意:處理生產消息失敗、消息重複接收處理、生產重試;作爲大流量緩衝,犧牲強一致性,保證最終一致性;需要數據校對)
  • 數據異構:異構數據形成閉環,數據存儲到合適的存儲引擎;聚合數據,使前端通過少量調用拿到所需數據;依賴系統出問題,還能正常工作
  • 緩存:1、瀏覽器緩存(時效性不強的數據)2、APP客戶端緩存(大促前提前下發素材到客戶端)3、CDN緩存(把資源推送到離用戶最近的CDN節點)4、接入層緩存(沒有CDN緩存可以考慮使用Nginx搭建一層接入層)5、應用層緩存(在應用所在機器上部署一組Redis,直接本機讀取數據,多機之間主從同步數據)6、分佈式緩存(數據量太多,單機存儲不了,用分片機制分散流量到多臺要,或用分佈式緩存實現,常見的分片規則:一致性哈希算法)
  • 併發化

高可用原則

  • 降級:開關集中化管理,推送機制把開關推送到各個應用;可降級的多級讀服務;開關前置化;業務降級,高併發流量來襲,保障核心業務,保證數據最終一致性即可,可同步改異步,優先處理高優先級數據
  • 限流:惡意請求只到Cache層;對於穿透到後端的流量考慮Nginx的limit模塊;對惡意IP可用Nginx deny屏蔽
  • 切流量:可用Nginx切換故障的應用層
  • 可回滾:版本化(事務回滾、代碼庫回滾、部署版本回滾、數據版本回滾、靜態資源版本回滾)

業務設計原則

  • 防重設計:防重key、防重表、記錄重複日誌後續處理
  • 冪等設計:業務系統重複消息消費冪等處理;第三方支付異步回調冪等處理
  • 流程可定義
  • 狀態與狀態機:狀態設計有狀態軌跡·,方便追溯;併發狀態修改問題;狀態變更有序問題;狀態變更消息先到後到問題
  • 系統後臺操作可反饋
  • 系統後臺審批化
  • 文檔和註釋
  • 備份:代碼庫、多版本、人員備份
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章