以便主领导者在将 WAL 条目发送

Solve china dataset issues with shared expertise and innovation.
Post Reply
sakib40
Posts: 704
Joined: Sat Dec 21, 2024 3:21 am

以便主领导者在将 WAL 条目发送

Post by sakib40 »

首先,我们实现了创建持久对象副本,该副本仅包含数据库的只读副本。这些副本对象通过获取最新快照并从冷存储中重放日志,直到主数据库的领导者上次提交为止。这实际上为我们提供了时间点副本,因为如果没有持续更新,副本在持久对象重新启动之前永远不会更新。

其次,我们将副本领导者注册到主领导者,给持久性追随者的同时,也将所有写入 WAL 的条目 巴林电报号码数据 发送给副本。每个 WAL 条目都标记有一个书签,该书签在 WAL 条目序列中唯一地标识该 WAL 条目。我们稍后会用到这个书签。

请注意,由于这些写入是在法定数量的持久性追随者确认之前发送到副本的,因此这些写入实际上是未确认的写入,并且副本领导者必须小心地将这些写入隐藏在副本持久对象之外,直到它们被确认为止。存储中继服务中的副本领导者通过实现足够的 SQLite 的WAL 索引协议来实现这一点,以便来自主领导者的未确认写入在 SQLite 看来就像另一个执行未确认写入的 SQLite 客户端一样。SQLite 知道忽略这些写入,直到它们在日志中得到确认。这样做的结果是,副本领导者可以立即将 WAL 条目写入 SQLite WAL,然后在主领导者告诉副本条目已被持久性追随者确认时“提交”它们。

这种方法的一个巧妙之处在于,写入操作会在主服务器生成后立即从主服务器发送到副本服务器,从而有助于最大限度地减少副本服务器之间的延迟。理论上,如果写入查询通过副本服务器代理到主服务器,那么返回副本服务器的响应几乎会与更新副本服务器的消息同时到达。在这种情况下,副本服务器延迟几乎为零!
Post Reply