nsq 支持分布式事务(三)
完成度
只完成了主从复制;但是主备切换、依据处理能力动态调整消费能力、一些write
失败逻辑处理 没有完成
基本逻辑
数据
主要分成了三部分数据的复制
- 发送
SLAVE_SYNC_INFO
命令,返回所有的topic
和其对应的channel
- 发送
SLAVE topic_name
命令,携带当前topic
的关键4个参数fileindex
filenum
totalMsgCnt
viroffset
和一个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()