分布式環境中(非分布式也一樣)在對某個進行資料新增的時候比如:點讚,使用者點讚的時候將點贊資訊存入到點讚表中,然後就是校驗點讚查詢是否存在一條記錄,考慮到一些外界原因(dubbo 重新發起請求,當然正式環境下是關閉重新請求的,插入成功後沒有給客戶端返回成功資訊等等。。。)導致重複提交點讚資訊,這個時候資料庫中就會有多條記錄,當然就有問題了,查詢的時候在sql中增加limit 1保證系統不會有問題,當然這樣解決是不合理的,但是這樣可以保證系統不會因為資料的問題整個癱瘓
解決辦法:
1.在資料庫中對能確定這條點讚記錄的字段建立唯一索引,列如:使用者id,記錄id,記錄型別等等,那麼在插入庫的時候就不會插入重複的記錄了,如果業務要求可以點讚多次的時候這樣就不行了,所以不建議用,不利於擴充套件
2.插入記錄之前,首先查詢,校驗資料庫中是否已經存在記錄,這種方法最簡單,但是對於分布式環境下,多個執行緒操作的時候,有可能查詢的時候不存在,但是插入的時候庫裡邊已經存在
3.加編號
分布式 冪等性
現在你的服務提供一些外部介面呼叫,然後你這個服務又是部署在多台機器上的,然後前端在操作的時候正好呼叫了請求,假如我們的業務功能是扣款,然後在負載均衡的時候你的請求被傳送到不同的機器上,所以你需要保證的就是同樣的一次請求只能成功一次,另外的需要丟棄調。那麼如何保證分布式環境下的冪等性呢?保證冪等性主要...
分布式環境下介面冪等性
任意多次執行所產生的影響均與一次執行的影響相同。類似資料庫的update set。1 資料庫建立唯一性索引,可以保證最終插入資料庫的只有一條資料 2 token機制,每次介面請求前先獲取乙個token,然後再下次請求的時候在請求的header體中加上這個token,後台進行驗證,如果驗證通過刪除to...
如何保證分布式系統介面冪等?
這是實戰經常遇到的乙個問題,舉個例子 我們系統的開票介面受理對方系統的報文 結算單號settleno 開票單號ticketno 由於網路抖動或者前端提交多次導致同一筆重複請求,如果不設定冪等,我們系統就會受理多筆相同的請求,最終可能導致多次重複開票的問題。所以我們要保證介面冪等,使得重複請求只會成功...