AdSense

網頁

2023/4/10

系統設計 遠端資源狀態一致性問題 - 資源已建立但系統失效

遠端資源是指系統外的資源,例如另一個服務的資料,或是雲端資源等。


在遠端資源已建立後並回應成功時本地應用程式發生故障,因此出現遠端資源存在,但本地紀錄未被更新的狀況。



plantuml

@startuml
participant client
participant app
database    db
participant remote
skinparam sequenceMessageAlign center
skinparam ParticipantPadding 50

client ->> app : create request
activate app
app -->> client : accepted
app -> db : CREATE record\nwith state 'building'
activate db
db -->> app : success
deactivate db
|||
app -> remote:CREATE resource
activate remote
remote -->> app !! :success
deactivate remote
note over app : system failure
note over db: record state remains 'building'\n, but resource existed.
@enduml

由於已建立的資源紀錄未被更新,所以狀態會停在「建構中(building)」。

可能的解法是透過一時間較短的排程(e.g. 每分鐘)固定去掃描這些「建構中」的紀錄,去檢查遠端資源是否已確實建立,若是則將紀錄狀態改為「已建立(created)」若否則標記為「建立失敗(created-failed)」,留待使用者手動刪除建立失敗的記錄。

遠端資源已建立但本地紀錄更新失敗」狀況同此處理手法。

沒有留言:

AdSense