领事和行动的隔离

时间:2016-03-28 14:14:20

标签: consul

一些业务逻辑正在以下列方式使用Consul KV:

  • 检查val1是否存在
  • 检查val2是否存在
  • 如果验证正常,请将对象放入/val1/val2/

显然,这些检查是对Consul集群的3个单独请求。如何确保此示例中的所有3个都被隔离(锁定)?

我想确保例如。在检查后,val2不会出现(由另一个线程/用户执行)。

1 个答案:

答案 0 :(得分:1)

如果您需要同步访问某些内容,则需要一个名为lock的同步机制。在你的情况下(不同的过程),更正确地称它为#34;分布式锁定"。

您可以自己实施,但实际上Consul将其包含在内,请参阅https://www.consul.io/docs/commands/lock.html

因此,以某种方式访问​​(读取/修改)val1val2的代码的所有部分中的业务逻辑必须包含在锁定请求/释放机制中:

  • asquire lock
  • 检查val1是否存在
  • 检查val2是否存在
  • 如果验证正常,则将对象放入/ val1 / val2 /
  • 释放锁定