我有 ac# rest 服務,它分布在不同的服務器之間。在服務中,我對傳入請求金額進行了余額檢查,如果存在余額,我們繼續并創建交易。
if(txnamount> balamount){
// return
}
else{
//create txn
}
余額金額是使用之前的 txn 金額計算的。如果快速會話中出現批量請求,則在未從余額中減少之前的 txn 金額時余額檢查條件失敗。如何解決這個問題
uj5u.com熱心網友回復:
這是計算機系統的基本限制。
在單個系統上,這相當簡單,因為您在語言和作業系統中內置了鎖。
對于多個系統,簡單的答案是使用資料庫并讓它處理鎖定等。資料庫是專門為處理此類問題而構建的。只需打開一個事務并在事務內部進行操作。或者在每行保留一個版本值,如果版本值在讀取和寫入之間發生更改,則提交失敗。
在更基本的層面上,您需要確保獨占訪問。這可以由管理訪問的中央機構(如資料庫)來完成。或者您可以將值分配給特定機器,因此對該值的所有請求都需要在該機器上運行(如資料庫分片)。或者您可以使用兩相鎖定。如果你想深入研究,這個話題可能會花費你的整個職業生涯。
uj5u.com熱心網友回復:
看起來您正在處理需要事件溯源技術的事情,您需要某種不可變狀態,尤其是在處理財務問題時
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/515460.html
標籤:C#休息wcf
