亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

高并發(fā)系統(tǒng)數(shù)據(jù)冪等的解決方案

 更新時間:2016年08月07日 14:44:09   投稿:lqh  
本文主要介紹高并發(fā)系統(tǒng)數(shù)據(jù)冪等解決方案,這里整理了幾種方案供大家參考,有需要的小伙伴可以參考下

前言

在系統(tǒng)開發(fā)過程中,經(jīng)常遇到數(shù)據(jù)重復插入、重復更新、消息重發(fā)發(fā)送等等問題,因為應用系統(tǒng)的復雜邏輯以及網(wǎng)絡交互存在的不確定性,會導致這一重復現(xiàn)象,但是有些邏輯是需要有冪等特性的,否則造成的后果會比較嚴重,例如訂單重復創(chuàng)建,這時候帶來的問題可是非同一般啊。

什么是系統(tǒng)的冪等性

冪等是數(shù)據(jù)中得一個概念,表示N次變換和1次變換的結果相同。

高并發(fā)的系統(tǒng)如何保證冪等性?

1.查詢

查詢的API,可以說是天然的冪等性,因為你查詢一次和查詢兩次,對于系統(tǒng)來講,沒有任何數(shù)據(jù)的變更,所以,查詢一次和查詢多次一樣的。

2.MVCC方案

多版本并發(fā)控制,update with condition,更新帶條件,這也是在系統(tǒng)設計的時候,合理的選擇樂觀鎖,通過version或者其他條件,來做樂觀鎖,這樣保證更新及時在并發(fā)的情況下,也不會有太大的問題。

例如:update table_xxx set name=#name#,version=version+1 where version=#version# ,或者是 update table_xxx set quality=quality-#subQuality# where quality-#subQuality# >= 0 。

3.單獨的去重表

如果涉及到的去重的地方特別多,例如ERP系統(tǒng)中有各種各樣的業(yè)務單據(jù),每一種業(yè)務單據(jù)都需要去重,這時候,可以單獨搞一張去重表,在插入數(shù)據(jù)的時候,插入去重表,利用數(shù)據(jù)庫的唯一索引特性,保證唯一的邏輯。

4.分布式鎖

還是拿插入數(shù)據(jù)的例子,如果是分布是系統(tǒng),構建唯一索引比較困難,例如唯一性的字段沒法確定,這時候可以引入分布式鎖,通過第三方的系統(tǒng),在業(yè)務系統(tǒng)插入數(shù)據(jù)或者更新數(shù)據(jù),獲取分布式鎖,然后做操作,之后釋放鎖,這樣其實是把多線程并發(fā)的鎖的思路,引入多多個系統(tǒng),也就是分布式系統(tǒng)中得解決思路。

5.刪除數(shù)據(jù)

刪除數(shù)據(jù),僅僅第一次刪除是真正的操作數(shù)據(jù),第二次甚至第三次刪除,直接返回成功,這樣保證了冪等。

6.插入數(shù)據(jù)的唯一索引

插入數(shù)據(jù)的唯一性,可以通過業(yè)務主鍵來進行約束,例如一個特定的業(yè)務場景,三個字段肯定確定唯一性,那么,可以在數(shù)據(jù)庫表添加唯一索引來進行標示。

這里有一個場景,API層面的冪等,例如提交數(shù)據(jù),如何控制重復提交,這里可以在提交數(shù)據(jù)的form表單或者客戶端軟件,增加一個唯一標示,然后服務端,根據(jù)這個UUID來進行去重,這樣就能比較好的做到API層面的唯一標識。

7.狀態(tài)機冪等

在設計單據(jù)相關的業(yè)務,或者是任務相關的業(yè)務,肯定會涉及到狀態(tài)機,就是業(yè)務單據(jù)上面有個狀態(tài),狀態(tài)在不同的情況下會發(fā)生變更,一般情況下存在有限狀態(tài)機,這時候,如果狀態(tài)機已經(jīng)處于下一個狀態(tài),這時候來了一個上一個狀態(tài)的變更,理論上是不能夠變更的,這樣的話,保證了有限狀態(tài)機的冪等。

以上就是高并發(fā)系統(tǒng)數(shù)據(jù)冪等的解決方案的資料整理,后續(xù)繼續(xù)補充相關知識,謝謝大家對本站的支持!

相關文章

最新評論