考虑以下情况: 实体A上存在更新请求,以创建子实体A.B. A上可能有很多B,每个B都有唯一的电子邮件地址。 实体A是一个共享实体,相同的请求可能发生在多个并行服务器(可扩展的微服务)中。资源锁定和业务逻辑
为了创建A.B,我们必须验证B是否已经作为A上的子实体存在(根据B的电子邮件地址)。
处理此更新请求的服务应该锁定A(通过它的唯一ID)以便更新安全。
我的问题是不是技术更概念化:
是否锁定资源A在这种情况下是这样的更新任务的业务逻辑的一部分?
你会考虑把资源锁放在一个单独的中间件中,而不是处理验证和更新过程的中间件吗? (另一个选项是把锁作为业务逻辑的一部分,并把它直接负责业务逻辑中间件。)
感谢您的评论。由于我知道并确定它很复杂,我当然不打算自己做 - 但使用redis。 我的问题是关于代码中我们希望获得资源锁定的地方:在主代码流中 - 将代码中的代码段指向需要锁定并在本节中锁定和解锁的代码段,或者将代码段设置为预处理动作,即在之前专门用于锁定的中间件中。 – user132440
顺便说一句:它可能是这种情况下,一致性是不可能的redis –
哦,就像我说的,它不是业务逻辑,因此它应该是持久性逻辑的一部分。最好不要编写获取和释放锁代码 - 它应该是你正在使用的框架的一部分。 –