探究网络延迟对事务的影响
1.背景概述
最近在做数据同步测试,需要通过DTS将kafka中的数据同步到数据库中,4G的数据量同步到数据库用了大约4个多小时,这看起来并不合理;此时查看数据库所在主机的CPU,IO的使用率都不高,没有瓶颈;最后通过排查发现由于kafka,DTS,数据库不再同一个机房,网络延迟较大,导致同步速率缓慢;
将kafka,DTS,数据库部署到同一个机房后,同步速度明显提升,只需要15分钟就能同步完。
2.问题复现
本次测试通过sysbench在不同网络延迟的情况下,进行数据写入及性能压测,对比网络延迟对数据库事务的影响。
2.1 查看当前网络延迟
$ ping 192.168.137.162 PING 192.168.137.162 (192.168.137.162) 56(84) bytes of data. 64 bytes from 192.168.137.162: icmp_seq=1 ttl=64 time=0.299 ms 64 bytes from 192.168.137.162: icmp_seq=2 ttl=64 time=0.180 ms 64 bytes from 192.168.137.162: icmp_seq=3 ttl=64 time=0.297 ms 64 bytes from 192.168.137.162: icmp_seq=4 ttl=64 time=0.329 ms 64 bytes from 192.168.137.162: icmp_seq=5 ttl=64 time=0.263 ms 64 bytes from 192.168.137.162: icmp_seq=6 ttl=64 time=0.367 ms 64 bytes from 192.168.137.162: icmp_seq=7 ttl=64 time=0.237 ms 64 bytes from 192.168.137.162: icmp_seq=8 ttl=64 time=0.160 ms 64 bytes from 192.168.137.162: icmp_seq=9 ttl=64 time=0.180 ms 64 bytes from 192.168.137.162: icmp_seq=10 ttl=64 time=0.257 ms
当前2台主机在同一个机房,网络延迟大约在 0.3ms 左右
2.2 (正常延迟)通过sysbench写入数据
2.2.1 创建一张表写入500W条数据
$ time sysbench lua/oltp_read_write.lua --mysql-db=sysbench --mysql-host=192.168.137.162 --mysql-port=3307 --mysql-user=root --mysql-password=greatdb --tables=1 --table_size=5000000 --report-interval=2 --threads=10 --time=600 --mysql-ignore-errors=all prepare sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3) Initializing worker threads... Creating table 'sbtest1'... Inserting 5000000 records into 'sbtest1' Creating a secondary index on 'sbtest1'... real1m56.459s user0m7.187s sys0m0.400s
写入 500w 数据量耗时 1m56s
2.2.2 sysbench 压测3分钟
SQL statistics: queries performed: read: 1711374 write: 488964 other: 244482 total: 2444820 transactions: 122241 (407.37 per sec.) queries: 2444820 (8147.45 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Throughput: events/s (eps): 407.3725 time elapsed: 300.0718s total number of events: 122241 Latency (ms): min: 10.68 avg: 122.72 max: 1267.88 95th percentile: 502.20 sum: 15000894.94 Threads fairness: events (avg/stddev): 2444.8200/14.99 execution time (avg/stddev): 300.0179/0.02
可以看到 TPS:407.37 QPS:8147.45
2.3通过tc命令模拟网络延迟
tc命令是Linux系统中的一个网络管理工具,用于配置和管理网络流量控制。它可以用来限制网络带宽、延迟、丢包等,以及实现QoS(Quality of Service)等功能。
# 对ens3网卡进行延迟设置,设置延迟为10ms tc qdisc add dev ens3 root netem delay 10ms
如果在使用tc命令时报错如下错误,可以升级一下内核模块
# 报错 tc qdisc add dev ens3 root netem delay 10ms Error: Specified qdisc not found. # 升级 $ yum install kernel-modules-extra* # 重启主机 $ reboot
2.4查看当前网络延迟
$ ping 192.168.137.162 PING 192.168.137.162 (192.168.137.162) 56(84) bytes of data. 64 bytes from 192.168.137.162: icmp_seq=1 ttl=64 time=10.5 ms 64 bytes from 192.168.137.162: icmp_seq=2 ttl=64 time=10.4 ms 64 bytes from 192.168.137.162: icmp_seq=3 ttl=64 time=10.5 ms 64 bytes from 192.168.137.162: icmp_seq=4 ttl=64 time=10.4 ms 64 bytes from 192.168.137.162: icmp_seq=5 ttl=64 time=10.4 ms 64 bytes from 192.168.137.162: icmp_seq=6 ttl=64 time=10.4 ms 64 bytes from 192.168.137.162: icmp_seq=7 ttl=64 time=10.4 ms 64 bytes from 192.168.137.162: icmp_seq=8 ttl=64 time=10.5 ms 64 bytes from 192.168.137.162: icmp_seq=9 ttl=64 time=10.5 ms 64 bytes from 192.168.137.162: icmp_seq=10 ttl=64 time=10.2 ms
网络延迟大约为 10ms
2.3 (延迟10ms)通过sysbench写入数据
2.3.1 创建一张表写入500W条数据
$ time sysbench lua/oltp_read_write.lua --mysql-db=sysbench --mysql-host=192.168.137.162 --mysql-port=3307 --mysql-user=root --mysql-password=greatdb --tables=1 --table_size=5000000 --report-interval=2 --threads=10 --time=600 --mysql-ignore-errors=all prepare sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3) Initializing worker threads... Creating table 'sbtest1'... Inserting 5000000 records into 'sbtest1' Creating a secondary index on 'sbtest1'... real2m11.656s user0m7.314s sys0m0.470s
写入 500w 数据量耗时 2m11s
2.3.2 sysbench 压测3分钟
SQL statistics: queries performed: read: 788214 write: 225204 other: 112602 total: 1126020 transactions: 56301 (187.41 per sec.) queries: 1126020 (3748.16 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) Throughput: events/s (eps): 187.4079 time elapsed: 300.4196s total number of events: 56301 Latency (ms): min: 210.14 avg: 266.68 max: 493.91 95th percentile: 419.45 sum: 15014235.80 Threads fairness: events (avg/stddev): 1126.0200/1.16 execution time (avg/stddev): 300.2847/0.16
可以看到 TPS:187.41 QPS:3748.16
3.总结
通过上面的测试可以看出网络延迟较大时,对数据的写入及每秒执行的事务数都有较大影响;如果需要做性能测试及数据同步,尽量将压测工具或同步工具部署在同一个机房,避免网络延迟较大,对测试结果有影响。
Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc
)好友,待社区助手拉您进群。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ModStartCMS v8.2.0 白色清爽主题,桌面快捷应用
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市场,后台一键快速安装 会员模块通用且完整,支持完整的API调用 大文件分片上传,进度条显示,已上传文件管理 强大的模块扩展功能,所有模块可以无缝集成,支持在线安装、卸载模块 完善的开发助手,实现模块、主题的的一键创建 完善的后台权限管理,支持基于RBAC的权限管理系统 后台管理支持使用手机、平板、PC,无论何时何地都可方便管理 第三方登录(QQ、微信、微博、支付宝、微信小程序) 第三方支付支持(微信、支付宝、支付宝当面付、微信扫码、微信小程序) 第三方云存储支持,支持云储存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云) 第三方短信支持(阿里云、腾讯云、华为云、百度云、253云通讯、聚合、七牛云、融云、赛邮、UCloud、云片、网易云) V8.2.0版本更新 2024年03月26日ModStartCMS发布v8...
- 下一篇
2024 最热门开源 GitOps 工具盘点
GitOps 是一种侧重于自动化、协作和持续交付的基础设施管理现代方法。它的核心理念是将 Git 作为配置和代码的唯一真理源。在 GitOps 实践中,对基础设施的任何更改都必须通过 Pull Request(合并请求)来进行,这些合并请求需要在并入主分支之前得到团队其他成员的审查和同意。 在这篇文章里,我们将介绍几款开源的 GitOps 工具: 基础设施即代码(IaC):Terraform 基础设施即代码(IaC):Pulumi 为 Kubernetes 设计的持续交付工具:ArgoCD 快速、兼具 Git 友好性的 API 客户端:Bruno 全方位人到数据库操作管理:Bytebase Terraform Terraform 是一款开源的基础设施即代码(IaC)工具,它使得构建、修改以及版本控制基础设施变得既安全又高效。它覆盖了从低级组件(如计算实例、存储和网络)到高级组件(如 DNS 配置和 SaaS 功能)的广泛需求。 Terraform 采用 HashiCorp 配置语言(HCL)作为主要的配置语言,并同时支持 JSON 格式,以满足不同用户的编写习惯。 为了实施 GitOp...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19