操作的Consul和隔离
Consul and isolation of operations
一些业务逻辑正在以下列方式使用 Consul KV:
- 检查
val1
是否存在
- 检查
val2
是否存在
- 如果验证正常,将对象放入
/val1/val2/
显然,这些检查是对 Consul 集群的 3 个单独请求。我如何确定此示例中的所有 3 个都被隔离(锁定)?
我想确定一下,例如。 val2
在 检查后 没有出现(由另一个 thread/user 执行)。
如果您需要同步访问某些内容,那么您需要一种称为 lock 的同步机制。在你的情况下(不同的进程)更正确的称呼它 "distributed lock".
你可以自己实现,但实际上Consul里面有,见https://www.consul.io/docs/commands/lock.html
因此,您的代码中所有以某种方式访问 (read/modify) val1
和 val2
的业务逻辑必须包含在锁定 asquisition/releasing 机制中:
- 申请锁
- 检查 val1 是否存在
- 检查 val2 是否存在
- 如果验证正常,将对象放入 /val1/val2/
- 解除锁定
一些业务逻辑正在以下列方式使用 Consul KV:
- 检查
val1
是否存在 - 检查
val2
是否存在 - 如果验证正常,将对象放入
/val1/val2/
显然,这些检查是对 Consul 集群的 3 个单独请求。我如何确定此示例中的所有 3 个都被隔离(锁定)?
我想确定一下,例如。 val2
在 检查后 没有出现(由另一个 thread/user 执行)。
如果您需要同步访问某些内容,那么您需要一种称为 lock 的同步机制。在你的情况下(不同的进程)更正确的称呼它 "distributed lock".
你可以自己实现,但实际上Consul里面有,见https://www.consul.io/docs/commands/lock.html
因此,您的代码中所有以某种方式访问 (read/modify) val1
和 val2
的业务逻辑必须包含在锁定 asquisition/releasing 机制中:
- 申请锁
- 检查 val1 是否存在
- 检查 val2 是否存在
- 如果验证正常,将对象放入 /val1/val2/
- 解除锁定