微服務架構下互斥資源解決方案

2021-10-14 01:43:46 字數 1505 閱讀 1823

目錄背景

業務流程漏洞(低概率出現重複新增問題)

解決方案

併發轉成順序操作(互斥)。

延時雙校驗

延時雙校驗變體

本地+遠端雙校驗+定時刪除資料(推薦)

介面專用+資源互斥(取巧方案) 附錄

樂觀鎖新增、刪除示例

現狀:同一公司下2個部門都有人員服務,這2個人員服務由不同的團隊開發,資料庫不公用。

需求:同乙個身份證只能出現在其中乙個人員服務中。

解決方案:新增人員的時候,先向對方諮詢,「你那邊是否有這個人」

若同時新增a,則互相向對方諮詢都發現對方系統中沒有a,所以都新增成功了。

如引入分布式鎖zookeeper/redis。

優點:

缺點:

沒有共同的分布式鎖服務。

流程如下

優點:

缺點:

當第二次校驗有a的時候,五菱放棄新增。寶駿那邊處理成功。

優點:

注意,以下的樂觀鎖刪除、新增是保證不重複新增記錄的關鍵點,若有乙個地方操作失敗,則新增失敗。(關鍵點:具備閉環的順序操作+重試機制)

1新增流程(設idcard=a):

無,繼續

遠端查詢是否有a

2遠端查詢流程(設idcard=a):

有狀態為在職的a

3定時刪除資料

優點:

缺點:

關鍵點:只要呼叫我的查詢介面,我就認為對方可能在新增。因此在超時時間內,拒絕一切新增請求。

新增流程

查詢對方系統,是否有a資料

查詢(加鎖)流程

直接用idcard=a的在redis上加超時鎖,並查詢a詳情

優點

缺點

-- 樂觀鎖方式新增

insert into staff(id,idcard,status) values(a,b,c)

where not exists(

select idid

from staff

where idcard = a

)-- 樂觀鎖方式刪除

delete from staff where idcard = a and status=middle and ***

微服務基礎架構解決方案

業務模組 服務模組 工具模組 前端後端 建立資料庫gem admin,資料庫編碼為utf 8 執行gem utlis jpa即可生成資料庫表結構 執行db gem.sql檔案,初始化表資料 在gemframe目錄下,執行mvn clean install eclipse idea開啟專案 webst...

微服務下分頁的解決方案思考

專案中遇到了乙個聚合業務,需要從多個 2個以上資料級聯 中臺服務層獲取資料,並做列表分頁。如從使用者中心 a 獲取一部分特定使用者,再從訂單中心 b 將這些使用者對應的歷史訂單全部獲取並可根據a或b的某些屬性排序。這樣乙個過程就需要業務層先從a拿到所有使用者id,再根據這些使用者id從b中拿到所有對...

15 26 微服務安全解決方案

restful 的通訊安全有很多中解決方案,例如 http basic auth 認證 cooke session 認證 token 認證 oauth openid 等等,每一種方案都很成熟,這裡不依依解釋,如果不了解,請去搜尋引擎查詢相關資料。這裡我談談在實施微服務專案中的心得,首先專案採用 sp...