我有3项服务A,B,C。
服务A接收来自客户端的请求。然后A为自己的数据库,服务B和C准备数据。基本上A是协调员。
如果成功
如果成功
如果任何步骤失败,我们必须还原所有插入的数据。
我使用的是Cassandra NoSQL DB。
现在我需要针对所有可能发生的情况的通用解决方案:
我
假设C正在插入数据(正在进行中),同时,A数据库上的某些读取查询R读取插入的数据。几毫秒之后,C无法插入,但R已经读取了很快就会被恢复的错误数据。
在这种情况下该怎么办? - >改变数据库设计,这样的情况永远不会发生?
II。
如果服务C数据插入失败,服务B有应用程序服务器停机因此无法恢复,该怎么办?
答案 0 :(得分:0)
您可以使用批量查询。 yaml文件中有一个参数用于配置批处理大小。 batch_size_fail_threshold_in_kb:默认为50。
答案 1 :(得分:0)
如果您的服务完全独立,那么使用cassandra时会遇到困难。您要求使用自己的数据存储围绕这三种服务进行交易。
Cassandra本身仅支持轻量级交易 - 请参阅http://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlLtwtTransactions.html
您可以去实施自己的两阶段提交: https://en.wikipedia.org/wiki/Two-phase_commit_protocol https://en.wikipedia.org/wiki/Paxos_(computer_science)