业务设计原则
下面這些內(nèi)容摘自張開濤的書籍《億級流量網(wǎng)站架構(gòu)核心技術(shù)》,推薦大家閱讀本書。
業(yè)務(wù)設(shè)計原則,主要有:
防重設(shè)計
比如,結(jié)算頁面要考慮重復(fù)提交的問題,還有下單時扣減庫存要防止重復(fù)扣減的問題。解決方案可以考慮防重key、防重表。而有些場景下如重復(fù)支付,是因為有的電商網(wǎng)站同時支持微信支付、京東支付,渠道不一樣是無法防止重復(fù)支付的。但是在系統(tǒng)設(shè)計時,需要將支付的每筆情況記錄下來。
冪等設(shè)計
在交易系統(tǒng)中,經(jīng)常會用到消息,而現(xiàn)有消息中間件基本不保證不發(fā)生重復(fù)消息的消費。因此,需要業(yè)務(wù)系統(tǒng)在重復(fù)消費時進行冪等處理。還有在使用第三方支付時,第三方支付會進行異步回調(diào),也要做好回調(diào)的冪等處理。
流程可定義
如果接觸過保險業(yè)務(wù),就會發(fā)現(xiàn)不同保險的理賠服務(wù)是不一樣的。在設(shè)計系統(tǒng)時就設(shè)計了一套專門的理賠流程模塊。而承保流程和理賠流程是分離的,在需要時進行關(guān)聯(lián),從而可以復(fù)用一些理賠流程,并提供個性化的理賠流程。
狀態(tài)與狀態(tài)機
在設(shè)計交易訂單系統(tǒng)時,會存在正向狀態(tài)和逆向狀態(tài),正向狀態(tài),例如待付款、待發(fā)貨、已發(fā)貨;逆向狀態(tài)如取消訂單、退款等。正向狀態(tài)和逆向狀態(tài)應(yīng)該根據(jù)系統(tǒng)的特征來決定要不要分離存儲。狀態(tài)設(shè)計時應(yīng)有狀態(tài)軌跡,方便用戶跟蹤當(dāng)前訂單的軌跡并記錄相關(guān)日志,萬一出問題時可回溯問題。
另外,還有訂單狀態(tài)的變遷,例如待支付、已支付待發(fā)貨、待收貨的遷移。要考慮要不要使用狀態(tài)機來驅(qū)動狀態(tài)的變更和后續(xù)流程節(jié)點的操作,尤其當(dāng)狀態(tài)很多的時候使用狀態(tài)機能更好的控制狀態(tài)遷移。
還要考慮并發(fā)狀態(tài)修改問題,如一個訂單同時只能有一個修改;狀態(tài)變更的有序問題,以及狀態(tài)變更消息的先到后到的問題,如支付成功消息和用戶取消消息的時間差。
后臺系統(tǒng)操作可反饋
假如修改了某些內(nèi)容后想預(yù)覽看最終效果,這就是希望得到反饋結(jié)果;還有就是在規(guī)則系統(tǒng)中,希望看到這些規(guī)則在系統(tǒng)數(shù)據(jù)下的反饋。因此,在設(shè)計后臺系統(tǒng)時,需考慮效果的可預(yù)覽、可反饋。
后臺系統(tǒng)審批化
對于有些重要的后臺功能需要設(shè)計審批流,比如調(diào)整價格,并對操作進行日志記錄,從而保證操作可追溯、可審計。
文檔和注釋
在一個系統(tǒng)發(fā)展的初期就應(yīng)該建立文檔庫,例如設(shè)計架構(gòu)、設(shè)計說明書、業(yè)務(wù)規(guī)則說明書,程序猿在寫代碼時也應(yīng)寫清楚注釋,不然會給其他的程序猿帶來理解上的障礙,并嚴重降低工作效率。
備份
一種是代碼備份,代碼要提交到代碼倉庫進行管理和備份。還有一種就是程序猿的備份,我們要確保一個模塊,至少有兩個程序猿對其是相當(dāng)熟悉的。
?
總結(jié)
- 上一篇: 基础算法学习(二)_二叉树及应用赫夫曼编
- 下一篇: 最新整理完成