考慮以下情況: 實體A上存在更新請求,以創建子實體A.B. A上可能有很多B,每個B都有唯一的電子郵件地址。 實體A是一個共享實體,相同的請求可能發生在多個並行服務器(可擴展的微服務)中。資源鎖定和業務邏輯
爲了創建A.B,我們必須驗證B是否已經作爲A上的子實體存在(根據B的電子郵件地址)。
處理此更新請求的服務應該鎖定A(通過它的唯一ID)以便更新安全。
我的問題是不是技術更概念化:
是否鎖定資源A在這種情況下是這樣的更新任務的業務邏輯的一部分?
你會考慮把資源鎖放在一個單獨的中間件中,而不是處理驗證和更新過程的中間件嗎? (另一個選項是把鎖作爲業務邏輯的一部分,並把它直接負責業務邏輯中間件。)
感謝您的評論。由於我知道並確定它很複雜,我當然不打算自己做 - 但使用redis。 我的問題是關於代碼中我們希望獲得資源鎖定的地方:在主代碼流中 - 將代碼中的代碼段指向需要鎖定並在本節中鎖定和解鎖的代碼段,或者將代碼段設置爲預處理動作,即在之前專門用於鎖定的中間件中。 – user132440
順便說一句:它可能是這種情況下,一致性是不可能的redis –
哦,就像我說的,它不是業務邏輯,因此它應該是持久性邏輯的一部分。最好不要編寫獲取和釋放鎖代碼 - 它應該是你正在使用的框架的一部分。 –