目錄背景
業務流程漏洞(低概率出現重複新增問題)
解決方案
併發轉成順序操作(互斥)。
延時雙校驗
延時雙校驗變體
本地+遠端雙校驗+定時刪除資料(推薦)
介面專用+資源互斥(取巧方案) 附錄
樂觀鎖新增、刪除示例
現狀:同一公司下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...