交易型系統設計的一些原則

墨菲定律:

  1. 任何事情都沒有表面看起來那麼簡單
  2. 所有的事情都會比你預計的時間長
  3. 可能出錯的事總會出錯
  4. 如果你擔心某種情況發生,那麼他就更有可能發生

高併發原則

無狀態

如果設計的應用是無狀態的,那麼應用比較容易進行水平擴展。

拆分

根據具體情況權衡,是設計一個大而全的系統還是按功能模塊拆分系統。

服務化

進程內服務->單機遠程服務->集羣手動註冊服務->自動註冊和發現服務->服務的分組、隔離、路由->服務治理如限流、黑白名單

消息隊列

數據異構

  1. 數據異構
  2. 數據閉環

緩存銀彈

緩存對於讀服務來說可謂抗流量的銀彈。

  1. 瀏覽器端緩存:適用於對實時性不太敏感的數據
  2. APP客戶端緩存:素材提前下發到客戶端緩存;離線地圖
  3. CDN緩存:一種是推送機制(當內容變更後主動推送到CDN邊緣節點),一種是拉取機制(先訪問邊緣節點,當沒有內容時,回源到服務器拿到內容並存儲到節點上)。URL中不能 有隨機數
  4. 接入層緩存:url重寫,一致性哈希,proxy_cache,proxy_cache_lock,shared_dict
  5. 應用層緩存
  6. 分佈式緩存

併發化

高可用原則

降級

限流

主要目的是防止惡意請求流量、惡意攻擊,或者防止流量超出系統峯值。

  1. 惡意請求流量只訪問到cache
  2. 對於穿透到後端的流量可以考慮使用Nginx的limit模塊處理
  3. 對於惡意IP可以使用nginx deny進行屏蔽
    原則是限制流量穿透到後端薄弱的應用層

切流量

對於一個大型應用,切流量是非常重要的,比如多機房環境下某個機房掛了,或者某個機架掛了,或則某臺服務器掛了,都需要切流量。

  1. DNS:切換機放入口
  2. HttpDNS:主要APP場景下,在客戶端分配好流量入口
  3. LVS/HaProxy:切換故障的nginx接入層
  4. Nginx:切換故障的應用層

可回滾

業務設計原則

防重設計

考慮重複提交,防止重複扣減庫存等

冪等設計

流程可定義

狀態與狀態機

後臺系統操作可反饋

後臺系統審批化

操作可追溯、可審計

文檔和註釋

系統發展的一開始就有文檔庫(設計架構、設計思想、數據字典/業務流程、現有問題),業務代碼和特殊需求都要有註釋。

備份

在這裏插入圖片描述

在這裏插入圖片描述

發佈了402 篇原創文章 · 獲贊 60 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章