DRS任务该建在源端还是目标端
DRS任务的数据迁移和同步的速度受网络、距离等因素影响,在远距离使用DRS同步数据的时候,建议DRS部署在离目标端近的地方,如果是云上,则建议使用入云任务。
DRS工作原理
从源库拉取增量日志,DRS会向源库发送日志请求,每次请求源库会返回大量增量数据,相当于“一次TCP同步交互可以获取大量数据”。
向目标库同步数据,DRS使用的是JDBC执行SQL,时不时会创建新的连接,然后每个事务会先开启事务,再执行小批量写入,最后commit,相当于“三次TCP同步交互,可以回放少量数据”。
DRS任务耗时计算与比较示例
以MySQL到MySQL链路为例,根据DRS工作原理,设想在长距离或者网络延迟较大的环境下,比如网络延迟在100ms的时候,每次TCP同步交互就是客户端给服务端发一次请求,服务端响应给客户端数据或者状态。
拉取日志的时候一次请求,可以返回所有增量数据,也就是说如果有10MB的日志,带宽是10MB/s,根据拉取耗时公式理论上需要的时间如下所示:
写目标库的时候,每个事务需要三次交互,假设平均事务大小为1k,如果总数据量是10MB,带宽是10MB/s,根据回放耗时公式理论上64线程耗时如下所示:
但是实际上TCP滑动窗口及拥塞算法会对拉日志有影响,拉取日志的时候,可能会比1.1秒稍长一些,比如2~3秒,但是对回放影响较小,因为本身回放耗时就达到了46秒以上了。
所以在远距离使用DRS同步数据的时候,建议DRS部署在离目标端近的地方,如果是云上,则建议使用入云任务。