在我的应用程序中,我们具有带有多个实例的微服务,为确保同一微服务的两个实例都不能处理同一组数据,我们有一个逻辑,其中实例尝试通过更新字段来获取锁在数据库表中。 更新成功后,实例将继续处理数据集。另外,其他实例也无法在该数据集上使用,因为另一个实例已在该数据集上使用。
例如我的桌子看起来像这样
CREATE TABLE locking_table(
data_set text,
instance_id text,
PRIMARY KEY (data_set)
);
因此可以获取查询数据集上的锁
update locking_table set instance_id = "myServiceId1" where data_set = "dataset1" if instance_id = null
我们有3个节点的集群,所有节点始终处于低/中负载状态。但是我们会定期在应用程序日志中看到此错误 遇到错误:在写查询期间,卡桑德拉超时,一致性为LOCAL_SERIAL(需要2个副本,但只有1个确认了写操作)
我想了解为什么我们会定期看到此错误?