nsq 支持分布式事务(三)

主备同步 代码提交记录

完成度

只完成了主从复制;但是主备切换、依据处理能力动态调整消费能力、一些write失败逻辑处理 没有完成

基本逻辑
数据

主要分成了三部分数据的复制

  1. 发送SLAVE_SYNC_INFO命令,返回所有的topic和其对应的channel
  2. 发送SLAVE topic_name命令,携带当前topic的关键4个参数fileindex filenum totalMsgCnt viroffset和一个maxnum希望本次同步返回的消息数量,返回 master的关键参数和消息本身
  3. 发送SLAVE topic_name channel_name,携带当前的4个关键参数,返回master的关键参数
客户端请求

对于slave是不可以接受普通client的请求的 ,连接master复用了masterclienttcp端口

同步 or 异步

一开始写了一个同步版本,就是slave每次发送SLAVE消息,就等待结果

后来改成了异步发送,异步里面主要需要做大量的check避免时序问题,造成SYNC数据错乱问题

conn

conn需要上锁和保持心跳, 最好加上SetDeadline来确保心跳包没有抵达情况下tcp假死

异常

异常问题,例如如果slavemaster设置的单个最大文件大小不一致,应该如何落盘

异步接受报文,如果接收到同一个topic或者chanel,应该需要一个乐观锁来保证数据最新

使用sync.pool来控制bytes.Buffer的内存块使用前需要bps.Reset()