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