記一次目標驅動導致的bug

2021-10-07 12:55:08 字數 1432 閱讀 4708

背景

最近做的乙個專案中,用到了目標驅動架構模式,但由於目標下發的不準確,導致出現了線上bug。

目標驅動

目標驅動是通過不同的輪詢目標的狀態,決策出需要達到的目標,使得狀態能到達到最終的目標;

簡單點的意思就是不斷迴圈著四種狀態:輪詢—>決策—>傳送目標—>達到目標

目標驅動有什麼好處的?

系統a可以專注資料的收集,系統b可以進行目標驅動,使得系統c最終可以達成目標

假如沒有目標驅動,系統a即要資料的收集,資料的目標決策,資料的最終狀態下發管理,通知系統c

系統b可以一次處理多份資料,產生乙個最終目標下發給系統c

資料的目標決策過程可能是非常複雜的,資料的變更依賴系統的變更等也可能導致需要下發的目標改變,這樣目標驅動可以統一判斷這些資料的變更和系統的依賴;如果不是目標驅動,是不是資料變更的時候需要下發目標,依賴系統變更的時候,也需要下發目標,導致鏈路分散

bug分析

專案中的**邏輯demo如下:

public

void

poolstatus()

throws exception

}private

boolean

validate

(data data)

catch

(exception e)

}private

void

syndatatosys

(list

validatadatalist)

從**可以看出輪詢、決策和下發目標的過程,那導致目標下發不正確的地方到底在**呢?

聰明的同學可以看到是在validate函式的思考那裡了

原因是這樣的

validata函式是對data進行決策的過程,但是validata是需要通過第三方系統等進行決策的

假如第三方系統丟擲異常的時候,把異常catch住了,並且返回的是false

那就是說validata函式過濾掉了這data

便導致下發的目標沒有data了

正確的處理

應該是異常catch的時候,log日誌後,應該直接丟擲異常

這樣決策的過程便會停止,不會導致錯誤的目標進行下發

後續改進

目標驅動應該是應對比較複雜的目標決策與下發的,但專案中的使用到的目標驅動用於配置的下發,配置是乙個很關鍵的設定,比如系統a設定了什麼,就進行修改配置

不能因為第三方系統的錯誤,而決策出錯誤的狀態,這是乙個很致命的操作

如果決策是乙個很複雜的過程,需要進行故障的測試,保證決策的狀態正確

記一次由於快取導致的bug

bug描述 有一張資料庫表儲存的是 值日員工資訊,有時候可能一次性錄入1個月的資料 有時候也可能隔了很多天沒有錄入資料,也就是說這個錄資料不是很規律。bug現象 測試人員發現,上三亞地區能正常顯示當天值日員工資訊,但是珠海地區卻不能正確顯示當天值日員工資訊。而資料庫上實際是有珠海地區值日員工資訊的。...

記一次前端bug排查

前言 時隔三年,終於記得要找回賬號密碼開始寫筆記了,這周剛加入了乙個後台管理系統專案,測試反饋系統重新整理時經常會直接登出,嚴詞要求解決這個 重大 bug,so尷尬。更嚴重的是發現系統在ie上直接登不進去,嬸可忍叔不可忍,於是我開啟了苦逼的尋bug之路。既然是登出了,當然會有登出請求,chrome重...

記一次sum SQL 統計BUG

create table asgard share records id bigint 20 not null comment 分享記錄id status tinyint 3 unsigned not null default 1 comment 資料狀態 1 正常 0 刪除 create time...