文章摘要
Marmot v2是一个基于gossip协议的无主分布式SQLite复制系统,具有分布式事务和最终一致性特性。它支持MySQL协议兼容接口,提供轻量级、高可用的SQLite集群方案,适用于需要分布式数据库但不想使用重量级解决方案的场景。
文章总结
Marmot v2:分布式SQLite服务器
项目概述
Marmot v2是一款基于gossip协议的无主分布式SQLite复制系统,支持分布式事务和最终一致性,兼容MySQL协议。
核心特性
- 无主架构:任意节点均可写入,避免单点故障
- MySQL协议兼容:支持DBeaver、MySQL Workbench等客户端
- 分布式事务:采用Percolator风格写入意图和冲突检测
- 多数据库支持:支持集群内创建管理多个数据库
- DDL复制:通过集群级锁实现分布式模式变更
- CDC复制机制:基于行级变更数据捕获确保一致性
技术架构
- 写入协调:可配置一致性级别(ONE/QUORUM/ALL)
- 冲突解决:混合逻辑时钟(HLC)时间戳的LWW策略
- 集群管理:SWIM风格gossip协议实现成员管理
- 数据同步:全库复制+事务日志增量同步
关键创新
DDL复制机制
- 集群级锁保障模式变更安全(默认30秒租约)
- 自动化幂等转换(如
CREATE TABLE IF NOT EXISTS) - 模式版本跟踪与漂移检测
CDC复制引擎
- 行级变更捕获替代SQL语句重放
- Debezium兼容事件格式
- 支持Kafka/NATS等多目标输出
性能表现
3节点集群基准测试: - 插入吞吐:4,175 ops/sec - 混合负载:3,370 ops/sec - P99延迟:85.1ms
生产建议
- 配置PSK集群认证
- 启用反熵机制(默认60秒检测间隔)
- 事务日志保留至少2小时(推荐24小时)
使用限制
- 必须启用SQLite WAL模式
- 自动将AUTO_INCREMENT转为64位BIGINT
- 避免跨节点并发DDL操作
该项目通过创新的无主设计,为SQLite提供了生产级分布式能力,特别适合需要MySQL兼容性和轻量级分布式的场景。
注:本文保留了技术架构、核心特性和性能数据等关键信息,删除了安装脚本、示例代码等操作细节,合并了重复的功能说明,优化了技术术语的中文表达。
评论总结
以下是评论内容的总结:
对Marmot项目的积极评价
- 开发者maxpert介绍项目初衷:从sidecar项目发展为支持ACID和DDL复制的解决方案,采用MySQL协议提高兼容性("I realized the only clean way...was to expose SQLite over a standard protocol")
- 实际应用案例:用户_a9分享在大型社交媒体存档项目中的成功使用经历("It would sync the master db...so the user would be able to access it immediately")
技术特点讨论
- 性能表现:开发者称本地测试达6K-7K次插入/秒("about 6K-7K inserts per second on my local machine")
- 架构选择:采用无主 gossip协议引发对一致性质疑("does that mean it sacrifices consistency?" - bawolff)
- 协议争议:有评论认为SQLite更适合PostgreSQL协议("weird choice considering SQLite is more similar to PostgreSQL" - PunchyHamster)
与其他技术对比
- 替代方案询问:用户询问与SymmetricDS的区别("is this an alternative to SymmetricDS" - iliesaya)
- 同类工具需求:用户询问PostgreSQL版本("Is there something similar for Postgres?" - wg0)
- ORM关联:oblio提到同名FreePascal项目("DB devs really love marmots? :-))")
潜在应用场景
- WordPress扩展:开发者演示支持WordPress集群("works with WordPress...scale WordPress out properly")
- 备份方案:用户探讨与NAS/Litestream结合的可能性("use on a nas to keep wordpress sites' content backed up?" - savolai)
质疑声音
- 项目真实性:有用户怀疑是AI生成项目("Looks like yet another AI generated project" - phplovesong)
- 技术选型:用户质疑为何不直接使用PostgreSQL("why would you want to use this over, say postgre?" - joelthelion)
(注:原文评论均无评分信息,故未体现认可度差异)