Marmot 是一个分布式 SQLite 复制引擎,具有无领导和最终一致性。它允许您构建强健的复制 通过构建在容错 NATS Jetstream 之上的节点之间。这意味着如果您正在运行读取 基于 SQLite 的繁重网站,您应该能够通过添加更多 SQLite 复制节点轻松扩展它。SQLite 是 可能是几乎无处不在的最普遍的数据库,Marmot 旨在使其在服务器中更加普遍 通过在其上构建复制层来辅助应用程序。
有一些解决方案,如rqlite,dqlite和LiteFS等。 它们要么是SQLite之上的层(例如 rqlite,dqlite),要求它们坐在网络层的中间,以便提供 复制;或者截获物理页级写入以将其流式传输到副本。在两者中 在这种情况下,它们需要一个主节点,所有写入都必须进行,然后这些 更改将应用于多个只读副本。
另一方面,Marmot天生不同。它的诞生是为了充当您现有流程的副车:
做出这些选择具有多种好处:
Marmot是运行在NATS之上的CDC(变更数据捕获)管道。它可以自动配置适当的 JetStreams,确保 这些流在这些分片上均匀地分配负载,因此扩展简单地归结为添加更多节点并重新平衡 那些 JetStreams(将在未来的版本中自动化)。
目前,当前解决方案存在一些限制:
启动 0.4+ 土拨鼠依赖于支持 JetStream 的 nats 服务器。 这不是构建进程内共识算法,而是解锁了更多用例,例如让 外部应用程序订阅这些更改,并围绕其构建更复杂的用例 应用需求。下面是一个您可以使用 Deno 在本地运行的示例:
deno run --allow-net https://gist.githubusercontent.com/maxpert/d50a49dfb2f307b30b7cae841c9607e1/raw/6d30803c140b0ba602545c1c0878d3394be548c3/watch-marmot-change-logs.ts -u <nats_username> -p <nats_password> -s <comma_seperated_server_list>
go build -o build/marmot ./marmot.go
确保您有 2 个具有完全相同模式的 SQLite 数据库,然后运行:
nats-server --jetstreambuild/marmot -config config-1.toml -verbosebuild/marmot -config config-2.toml -verbose
此处和应该是具有更新的节点 ID 和数据库路径的副本。
config-1.tomlconfig-2.tomlconfig.toml
#头条创作挑战赛#