Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

分布式存储的疑问 #1

Open
tinycolds opened this issue Aug 30, 2022 · 1 comment
Open

分布式存储的疑问 #1

tinycolds opened this issue Aug 30, 2022 · 1 comment

Comments

@tinycolds
Copy link

一直有个疑问,这种基于 raft 的存储,a 节点 Apply raft.Log 成功了,b 节点在 Apply 的时候写数据库(S3 作为存储应该是调用接口失败?)异常了,这种情况怎么处理,这种 Case 下没有办法保证 Apply 都一定是成功的。

@uglyer
Copy link
Owner

uglyer commented Aug 30, 2022

我目前的设计并不直接将每次的 Apply 动作存储至 S3 ,优先本地,在快照时按需同步至S3 (Apply操作直接写S3延迟不可接受)。

一般情况下,相同时序的sql语句在不同的实例(节点)上执行的结果是一致的(受此影响,只有确定性的sql语句才受支持,不支持random()等,这一点与rqlite一致),如果极端情况传输等故障导致 节点B Apply 失败,直接 panic 。在节点B自动重启恢复后,会请求 Leader 先从快照恢复,再依次 Apply 快照后未执行的日志,故能保证数据的一致性。

当数据量或库数量大了之后,从生成快照与快照恢复的时间往往无法接受,这在 rqlitedqlite 中似乎不太注重这方面的情况 大量使用了直接完整拷贝至内存操作。以及 rqlite 不支持多数据库,ha-sqlite 的设计目标是能支持大量的sqlite数据库,会在快照这部分实现做一些优化。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants