首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NAutobot中使用Redis作为任务队列是否保证事务安全?

在NAutobot中使用Redis作为任务队列是否保证事务安全?
EN

Server Fault用户
提问于 2021-06-02 13:48:26
回答 1查看 88关注 0票数 0

我们希望使用NAutobot将机器状态存储在自定义字段中。

为了防止两个服务同时更新这个自定义字段,它需要适当的事务安全。如果我正确理解NAutobot文档,使用Redis将确保这一点。

有实际经验的人能证实这一点吗?

EN

回答 1

Server Fault用户

发布于 2021-06-04 07:14:45

在这里回答我自己的问题,因为我从Github上的一个维护人员那里得到了答案。

Redis本身并不保证这一点,但是我们当前用于任务的库(RQ)在一定程度上保证了操作的顺序,因为每个工作人员一次只能处理一个作业。对于大多数情况下(包括自定义字段),这并不重要,因为所有数据库写入都发生在事务中,使得同时更新同一个对象的竞争条件几乎不可能实现。IP地址对象的并发写锁是不同的。这是因为Nautobot内部的特性允许从网络前缀同时请求空闲地址空间(例如,“在192.168.0.0/24.给我下10个可用的in .”),并立即分配请求返回的任意数量的免费地址(例如“.并分配它们”)。为此,查询返回的IP列表将立即写入数据库,创建新的IPAddress对象,从而从空闲池中删除它们。IPAddress对象没有唯一性约束,因此如果没有这个显式的写锁,两个调用方就可以从同一个块请求IP,接收相同的空闲地址,并尝试分配重复的地址。这违反了最少惊讶的原则,而不是数据模型,因此这里的Redis写锁是保持第一个接收锁的调用方是分配IP的调用方的合理期望的关键,而下面的调用方要么收到正确的列表,要么由于地址不再空闲而无法分配地址。我希望这能回答你的问题!

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1065441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档