副本

    一个 shard 依据配置的备份数会对应一个或多个物理的 storage 节点,broker 查询 etcd 中数据了解到这些信息,通过 rpc 将 shard 日志文件中 record 有序的复制到对应的 storage 节点。依据目前的设计,storage 直接将 record 数据写入到内存中,不会再额外写 wal。等内存中数据写入磁盘后,通过 rpc 通知 broker 这部分数据已经完全消费。broker 等所有storage 节点完成确认后删除磁盘文件。

    一个 shard 的复制过程可以抽象为 Fanout queue 的生产和消费过程,实现时借鉴了 ,broker 将写入的数据计算 shard,累计成批后写入 Fanout queue,异步 go routine 负责将数据推送到对应的 storage 节点,storage 确认成功消费的数据记录。broker 删除被所有 storage 确认消费的 queue 文件。

    replication

    Broker处理流程:

    1. broker 询问 storage 消费 record 的 index ,如果 index 对 broker 有效(未超过 broker 当前写入的 head index,大于 broker 已经确认的 tail index),进入第 3 步,否则进入第 2 步

    Storage处理流程:

    1. 接收 broker 复制推送的 record,检测 record index 和 storage index是否一致,一致则返回正常,index 自增 1,否则返回错误