目錄
系統設計
防重控制
流量控制
并發控制
異常處理
備份機制
系統開發???????
前端隊列操作
外系統交互
??????????????
系統設計
防重控制
對于進入到系統中的數據(文件導入、手工錄入、系統直連等)以及本系統發往外系統的數據都需要進行防重控制處理,主要是采用數據庫表的主鍵或者唯一索引機制來進行防重。
防重表的主鍵應該選取能夠唯一標識該筆交易的字段,例如對于文件導入的數據,可以先計算文件內容的MD5,然后將MD5的值作為防重主鍵。
防重表的數據也需要備份,僅保留一段時期(參數化設置)的數據,其余的可以備份到歷史表。
對于實時聯機交易,引入冪等流水做好控制
流量控制
為了避免系統被前端流量壓垮,以及系統自身的流量把后端系統壓垮,因此需要在數據接收和數據發送時引入流量控制機制。
具體實現可以考慮令牌桶、漏桶、計數器等算法,對于微服務架構的項目直接使用熔斷器即可。
并發控制
并發控制是為了應對同一條記錄被多人同時操作的情況,常見于前端界面隊列操作以及后端定時任務,并發控制常用的方式也是數據庫表,利用表的主鍵來防止并發。
異常處理
目前主要是自動流程、外系統交互、定時任務等場景異常情況比較常見,對應的處理機制基本如下:
需要分析出可能的異常點,每一種異常可以先嘗試系統自動重試,重試一定次數(參數化設置)仍然不成功的,需要提醒(短信或其他方式)到相應的處理人員,另外還需要展示在前端異常隊列,處理人員可以在該隊列觸發重試或者其他操作(視具體業務而定)。
備份機制
數據庫的數據、日志文件、交易文件都需要考慮備份,數據庫一般是建立歷史表,采用分區的方式,當前表保留一段時間后轉到歷史表;日志文件和交易文件一般是保留一段時間(參數化設置)后刪除。
??????????????系統開發???????
前端隊列操作
1、前端按鈕點擊過后要禁用,防止用戶連續點擊,造成重復發送請求到后臺
2、前端請求發送到后臺后,后端邏輯需要先判斷該筆交易的狀態是否已經發生改變,如果已經改變的話直接返回提示前端;沒有改變的話,先加并發控制鎖,加鎖成功后然后再次判斷該筆交易的狀態是否已經發生改變,沒有改變則進行后續業務邏輯,最后在finally中釋放并發控制鎖
外系統交互
- 需要跟對接系統確定好通訊的字符集編碼
- 如果通訊數據中包含金額欄位,需要確定好傳輸過程中金額是否包含小數點,需要處理好精度問題
- 在發請求給外系統之前,需要先關閉數據庫連接,通訊完成后,再重新開啟數據庫連接
- 需要設置連接超時以及讀超時參數,對于串行連接的多個后端系統,則需要遵循越后端的系統超時時間越小
- 數據接入和數據轉出都需要有防重控制
- 發送請求給后端系統時,需要先更新發報流水的狀態為發送中,對于長期處于發送中狀態的流水需要進行異常預警,技術人員視具體情況進行手工干預處理或者提供前端界面供業務人員處理
- 發送請求給后端系統時,需要考慮幾種異常情況:組包異常、連接超時、讀超時、解包異常、交易重復、交易未明(不一定有),并針對每一種異常都有對應的處理機制,每一種異常都需要預警