《億級流量網站架構核心技術》讀書筆記
一、防重設計
防重是通過在盡可能前端的位置阻擋請求重復執行,從而防止影響業務。它主要運用于“重復發生會造成業務影響”的場景。
請求本身可以發生多次,需要定義何為同一條業務數據。
分成業務本身允許多次和只允許一次的場景。
1、前端新增數據提報,對于一次提報應該只允許新增一條數據。如何在系統內確定為同一次提報:將同一次提報抽象為一個id,在前端觸發進入表單填寫界面的時候生成該id。
2、支付場景,同一個訂單只允許支付一次。由于有多個調用目標方,無法感知用戶上一次支付是否成功,在用戶轉換渠道發起支付時,無法認為該次支付是重復支付從而中止當前支付,但可以調用上一次支付的渠道嘗試取消接口,如果返回取消成功,可繼續支付,返回已支付則中斷當前支付。或者在支付成功回調后判斷是否已有支付流水,有則調用退款接口。
3、重復扣減庫存,同一個單據只允許成功扣減一次庫存,在庫存側保證只有一次庫存扣減成功,可以在庫存流水表做冪等
二、冪等設計
冪等和防重的目的一樣,不同的是冪等一般不會報錯,調用方無需感知是否重復的結果。
三、流程可定義
不同業務的流程,流程節點代碼可重用,方便不同需求復用。
四、狀態與狀態機
1、正、逆狀態考慮要不要分離存儲
2、狀態軌跡
3、并發狀態修改
五、后臺系統操作可反饋
1、可預覽
2、可反饋
六、后臺系統審批化
1、可追溯
2、可審計
七、文檔和注釋
1、目的:便于多人維護,防止信息孤島,防止系統斷代
2、文檔庫:設計架構、設計思想、數據字典、業務流程、現有問題
3、注釋:業務代碼和特殊需求應有注釋
八、備份
1、代碼備份:多地容災
2、人員備份:防止單點阻塞