- 结构: 1个
controller
+ 多个replica groups
- 为了负载均衡 -> 能够迁移分片
- 需要处理请求和配置项更新几乎同时到达的情况
- 建议的实现: raft也要保存配置项
- 配置更新后, 新的负责某分片的
replica groups
需要从旧的replica groups
复制旧分片
clients
和servers
都会询问controller
最新的配置信息RPC
Join
:- 重新分片时尽量平均
- 重新分片时移动的分片尽量少
- 允许重用
GID
Leave
- 重新分片时尽量平均
- 重新分片时移动的分片尽量少
Move
- 将某个
shard
分配给某个group
- 将某个
Query
- 返回配置信息
- 必须反映在其之前做出的配置信息更改
- 需要滤除重复的
RPC
- 执行碎片再平衡的状态机中的代码需要具有确定性