【发布时间】:2019-02-12 06:02:10
【问题描述】:
我们在微服务项目中使用 Cassandra DB。在生产中,此服务部署在 PCF 中,可以扩展到 6 个实例。我们有一个表 (TableA),其中有一列 (materialSet) 作为冻结集。在功能之一中,并行线程正在执行以下功能(方法是同步的)–
- 读取TableA获取materialSet
- 添加/删除来自请求的材料到/从材料集
- 将最终 materialSet 写入 TableA
在较低的服务环境中使用单个实例,它可以正常工作。但是在生产中,当服务扩展到多个实例时,表中的结果会变得不一致。原因是同步将在同一个 JVM 中工作,但是当服务扩展时,其他实例在不同的 JVM 中运行,并且读/写是独立发生的。有没有办法解决这个问题?我可能知道我们所遵循的错误数据模型导致我们出现这个问题,但我们无法改变它。
有什么方法可以在 Cassandra 表中使用分布式行级锁定,或者有什么方法可以实现更高的一致性?
【问题讨论】: