通信协议
使用protobuf定义通信协议,参见src/proto/
.
meta表
meta表的加载:
master找到meta表(meta表持久化存储的位置是约定好的,大家都知道的),
选择某个ts加载meta表,然后将载有meta表的ts位置[ip:port]记录在zk下约定好的文件中。
client如何获取meta表?
参考[meta表的加载],从zk读取某个特定文件就可以知道哪个ts加载了meta表,进而访问meta表。
系统启动(和三者交互有关的部分)
ts的启动
- 在zk上注册特定文件
- 在该文件中写入自身[ip:port]
master的启动
- 通过zk获取master锁
- 扫描特定目录发现活跃状态的ts
- 与每个ts通信获取已经被载入的tablet列表
- 如果meta表未载入,则master命令某个ts载入meta表
- 读取meta表,获知所有tablet的信息以及未被载入的tablet集合
寻址
client如何获知某个tablet在哪个ts上?
先访问meta表,然后根据meta表的内容知道某个tablet在哪个ts上。
client如何获知master位置?
master启动时会在zk上的master锁中记下自己的位置[ip:port].
master如何获知ts的信息?
参考master的启动,可以获知master初始化时各个ts的状态(例如位置[ip:port]),
通过zk获知ts的加入或退出。