algorithm - 如何解决 K8s pod 之间的竞争条件

标签 algorithm spring-boot java-8 kubernetes amazon-dynamodb

这可能不需要对 K8s pod 做任何事情,但我怀疑是一些更算法化的东西。但这是我们面临的完整场景。

假设我们有 2 个 pod -> 正在运行 java 应用程序。

我们有 1 个 Dynamo 表 -> 有 id(hash_key)(不是唯一的),created_date(sort_key),id_2

程序的预期行为是检查给定的 id(最新)是否存在并获取其 id_2。如果不存在这样的 id,则生成一个新的 id_2

现在是竞争条件 --> 两个 pod 并行开始执行逻辑,它们都开始查询 Dynamo,巧合的是具有相同的 id。现在他们找不到任何这样的 id ..因为它们都没有被插入到 Dynamo 中,因此他们创建了完全独立的新 id_2..并且两个 pod 最终都插入了新的id_2 用于相同的 id.. 不应该是这种情况。

我们如何解决这个竞争条件。

任何线索将不胜感激。谢谢

最佳答案

我认为您应该重新考虑您的表架构。

通过以 id_2 作为散列的表,没有排序键和 id/created_data 上的全局二级索引

当然,只有当 id_2 在表中是唯一的,而不是每个 id

都是唯一的时,这才有效

关于algorithm - 如何解决 K8s pod 之间的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55933319/

相关文章:

java - 由于 firebase sdk 依赖性,构建失败

java - 自定义类方法的方法引用

java - Java 8 中的比较器接口(interface)如何变成@FunctionalInterface

javascript - 如何根据数组数组中的前一个元素过滤元素

python - 获得最大 yield 的算法

java - 我应该在二叉树中继续添加条目多长时间?

java - HystrixCommand 注释导致 ControllerLinkBuilder 中断

algorithm - 如何在不压缩的情况下解码 PNG 文件的 IDAT block

java - 多次注册的条件验证

java - 流 peek() 方法行为