高并發(fā)原則
- 無狀態(tài):應(yīng)用無狀態(tài),配置文件有狀態(tài)
- 拆分:系統(tǒng)維度、功能維度、讀寫維度、AOP維度、模塊維度
- 服務(wù)化:進(jìn)程內(nèi)服務(wù)->單機(jī)遠(yuǎn)程服務(wù)->集群手動注冊服務(wù)->自動注冊和發(fā)現(xiàn)服務(wù)->服務(wù)分組/隔離/路由->服務(wù)治理(限流/黑名單)
- 消息隊(duì)列:實(shí)現(xiàn)服務(wù)解耦、異步處理、流量削峰/緩沖(需要注意:處理生產(chǎn)消息失敗、消息重復(fù)接收處理、生產(chǎn)重試;作為大流量緩沖,犧牲強(qiáng)一致性,保證最終一致性;需要數(shù)據(jù)校對)
- 數(shù)據(jù)異構(gòu):異構(gòu)數(shù)據(jù)形成閉環(huán),數(shù)據(jù)存儲到合適的存儲引擎;聚合數(shù)據(jù),使前端通過少量調(diào)用拿到所需數(shù)據(jù);依賴系統(tǒng)出問題,還能正常工作
- 緩存:1、瀏覽器緩存(時(shí)效性不強(qiáng)的數(shù)據(jù))2、APP客戶端緩存(大促前提前下發(fā)素材到客戶端)3、CDN緩存(把資源推送到離用戶最近的CDN節(jié)點(diǎn))4、接入層緩存(沒有CDN緩存可以考慮使用Nginx搭建一層接入層)5、應(yīng)用層緩存(在應(yīng)用所在機(jī)器上部署一組Redis,直接本機(jī)讀取數(shù)據(jù),多機(jī)之間主從同步數(shù)據(jù))6、分布式緩存(數(shù)據(jù)量太多,單機(jī)存儲不了,用分片機(jī)制分散流量到多臺要,或用分布式緩存實(shí)現(xiàn),常見的分片規(guī)則:一致性哈希算法)
- 并發(fā)化
高可用原則
- 降級:開關(guān)集中化管理,推送機(jī)制把開關(guān)推送到各個應(yīng)用;可降級的多級讀服務(wù);開關(guān)前置化;業(yè)務(wù)降級,高并發(fā)流量來襲,保障核心業(yè)務(wù),保證數(shù)據(jù)最終一致性即可,可同步改異步,優(yōu)先處理高優(yōu)先級數(shù)據(jù)
- 限流:惡意請求只到Cache層;對于穿透到后端的流量考慮Nginx的limit模塊;對惡意IP可用Nginx deny屏蔽
- 切流量:可用Nginx切換故障的應(yīng)用層
- 可回滾:版本化(事務(wù)回滾、代碼庫回滾、部署版本回滾、數(shù)據(jù)版本回滾、靜態(tài)資源版本回滾)
業(yè)務(wù)設(shè)計(jì)原則
- 防重設(shè)計(jì):防重key、防重表、記錄重復(fù)日志后續(xù)處理
- 冪等設(shè)計(jì):業(yè)務(wù)系統(tǒng)重復(fù)消息消費(fèi)冪等處理;第三方支付異步回調(diào)冪等處理
- 流程可定義
- 狀態(tài)與狀態(tài)機(jī):狀態(tài)設(shè)計(jì)有狀態(tài)軌跡·,方便追溯;并發(fā)狀態(tài)修改問題;狀態(tài)變更有序問題;狀態(tài)變更消息先到后到問題
- 系統(tǒng)后臺操作可反饋
- 系統(tǒng)后臺審批化
- 文檔和注釋
- 備份:代碼庫、多版本、人員備份