完成度
只完成了主从复制;但是主备切换、依据处理能力动态调整消费能力、一些write失败逻辑处理 没有完成
基本逻辑
数据
主要分成了三部分数据的复制
- 发送
SLAVE_SYNC_INFO命令,返回所有的topic和其对应的channel - 发送
SLAVE topic_name命令,携带当前topic的关键4个参数fileindexfilenumtotalMsgCntviroffset和一个maxnum希望本次同步返回的消息数量,返回master的关键参数和消息本身 - 发送
SLAVE topic_name channel_name,携带当前的4个关键参数,返回master的关键参数
客户端请求
对于slave是不可以接受普通client的请求的 ,连接master复用了master与client的 tcp端口
同步 or 异步
一开始写了一个同步版本,就是slave每次发送SLAVE消息,就等待结果
后来改成了异步发送,异步里面主要需要做大量的check避免时序问题,造成SYNC数据错乱问题
conn
conn需要上锁和保持心跳, 最好加上SetDeadline来确保心跳包没有抵达情况下tcp假死
异常
异常问题,例如如果slave和 master设置的单个最大文件大小不一致,应该如何落盘
异步接受报文,如果接收到同一个topic或者chanel,应该需要一个乐观锁来保证数据最新
使用sync.pool来控制bytes.Buffer的内存块使用前需要bps.Reset()