我在 dot net 中有一个后台服务微服务,我将其作为容器部署到 Kubernetes。如果我有两个 pod,那么每个 pod 将同时执行相同的数据库操作,我该如何避免这种情况?请帮忙
我期望,如果我的一个 pod 正在访问数据库并获取少量记录,那么我的另一个 pod 不应该获取相同的记录,如果它们获取相同的记录,那么它们将在不同的 pod 中执行相同的操作两次
我看到三种解决方案:
UPDATE lock SET worker_id="1234", date_time=CURRENT_TIMESTAMP() WHERE lock="database_lock" AND (worker_id="1234" OR date_time < CURRENT_TIMESTAMP() - 30000);
。如果可以更新该行,则工作线程已成功“获取”锁并可以处理数据库。如果没有,则它保持空闲状态。在这两种情况下,它都会在 10 秒后尝试再次获取锁。如果worker已经拥有锁,或者已经在30秒前获取锁,则可以由worker获取锁。因此,获得锁的工作人员通常会保留它直到其死亡。我建议第一个解决方案(https://en.wikipedia.org/wiki/KISS_principle)。