这可能不需要对 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/