2

我对分布式数据库相当陌生,尽管我已经研究了相关文献(例如 CAP 定理、CRDT)并实现了一些 POC 以允许水平扩展我的应用程序。

然而,现在我面临一个具有挑战性的问题。为了水平扩展应用程序,服务之间的通信是通过分布式队列完成的。作为这里的背景,我确实需要一个自定义 CRDT 方法来保持数据最终一致,并且我确实需要我的应用程序像缓存一样工作(与 REDIS 远程相关)。

现在的挑战是我还需要持久化数据。这要求我使应用程序缓存和数据库中的数据最终保持一致。我检查了 Cassandra,我看到了一张票 [1],有人试图为自定义 CRDT 合并功能添加功能(正如我提到的那样,这是有原因的)。这从未进入 Cassandra,并且似乎有一些问题需要解决。

我的选择是什么,要么是允许自定义合并的具体分布式数据库引擎,要么是可以帮助解决问题的算法(例如,以数据库触发器或类似的形式)。

[1] https://issues.apache.org/jira/browse/CASSANDRA-6412

4

1 回答 1

3

据我所知,很少有数据库允许您指定自己的自定义冲突解决算法。太棒了。我真正找到的唯一一个——免责声明:我不是微软的倡导者——是 Azure CosmosDB。它具有与 MongoDB 兼容的 API,并且可以配置为使用主-主复制策略,您需要指定自己的冲突解决算法(使用 JavaScript)。您可以使用它来定义自己的合并操作。

如果您将查看数据库原生解决方案之外的应用程序级解决方案,那么有几种工具,例如 ie。Akka(在 JVM 或 .NET 版本中可用)使您能够在分布式数据模块内编写自定义 CRDT。JVM 版本还支持多数据中心持久性,这在概念上更接近可交换 CRDT 的工作方式,并且可以与 Cassandra 后端集成。

于 2020-11-10T13:21:47.057 回答