探究网络延迟对事务的影响

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社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492042.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬虫技术与IP代理池:数据采集的利器

文章目录 1、 爬虫技术的概念和原理1.1 爬虫的角色:1.2 爬虫的工作流程:1.3技术挑战和解决方案: 2、 IP代理池的功能和优势2.1 功能描述:2.2 优势描述:2.3 应用场景: 3、 IP代理池推荐 在当今数字化时代&am…

两种利用matplotlib绘制无填充的多边形的方法:ax.fill()和Polygon

两种利用matplotlib绘制无填充的多边形的方法:ax.fill()和Polygon 下面我们将使用np.rand随机生成5个多边形的顶点,使用不同的方法绘制多边形。 ax.fill()绘制多边形 函数原型为: Axes.fill(*args, dataNone, **kwargs) args参数指的是按x…

hadoop安装及基本使用

环境准备 三台centos7虚拟机,设置固定ip(自己设置),设置ssh秘密登录(自己设置),安装jdk8(自己安装) 准备安装包hadoop-3.3.6.tar.gz 位置在/home/hadoop 准备服务器之间…

【线段树二分】第十三届蓝桥杯省赛C++ A组/研究生组 Python 研究生组《扫描游戏》(C++)

【题目描述】 有一根围绕原点 O 顺时针旋转的棒 OA,初始时指向正上方(Y 轴正向)。 在平面中有若干物件,第 i 个物件的坐标为(,),价值为 。 当棒扫到某个物件时,棒的长度会瞬间增长 &#xff…

服务运营 | 印第安纳大学翟成成:改变生活的水井选址

编者按: 作者于2023年4月在“Production and Operations Management”上发表的“Improving drinking water access and equity in rural Sub-Saharan Africa”探讨了欠发达地区水资源供应中的可达性和公平性问题。作者于2020年1月去往非洲埃塞俄比亚提格雷地区进行…

鸿蒙操作系统-初识

HarmonyOS-初识 简述安装配置hello world1.创建项目2.目录解释3.构建页面4.真机运行 应用程序包共享包HARHSP 快速修复包 官方文档请参考:HarmonyOS 简述 1.定义:HarmonyOS是分布式操作系统,它旨在为不同类型的智能设备提供统一的操作系统&a…

【前端学习——js篇】4.浅拷贝与深拷贝

具体可见https://github.com/febobo/web-interview 4.浅拷贝与深拷贝 ①栈内存与堆内存 栈内存(Stack Memory) 栈内存用于存储基本类型的变量和引用类型的变量引用(即指向堆内存中实际数据的指针)。当一个函数被调用时&#xf…

javaWeb医院在线挂号系统

功能描述 医院挂号系统主要用于实现医院的挂号,前台基本功能包括:用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括:系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如下&…

申请IP地址证书

目录 IP证书的验证条件: 为什么需要申请IP地址证书? 申请IP证书的方法: 注释:IP地址证书也是SSL证书的一种,在验证IP地址所有权后部署于服务器上可实现https访问的一种证书。用公网IP证书可以解决很多问题&#xff…

JavaWeb学习笔记01

一、教程简介 全新JAVAWEB(里程碑版) 一套更适合后端工程师学习的WEB教程 All in Java 1、后端 ① Spring全家桶及微服务框架 ② 高性能数据库和消息组件 ③ Web攻击防护安全控制手段 ④ 其他第三方SDK生态环境 ...... 2、前端 ① 视图三大件&…

构建医疗服务新平台:开发智慧医院系统源码实战教学

本篇文章,小编将深入探讨如何通过开发智慧医院系统源码,构建医疗服务新平台的实战教学。 一、开发准备 在开始开发智慧医院系统之前,我们首先需要明确系统的功能需求和技术实现方案。 二、实战教学 1.系统架构设计 这包括数据库设计、前后…

【Git】日志功能

1. git日志显示 # 显示前3条日志 git log -3# 单行显示 git log --oneline# 图表日志 git log --graph# 显示更改摘要 git log --stat# 显示更改位置 git log --patch 或 git log -p# 查看指定文件的提交历史记录 git log {filename}例子1:单行显示 例子2&#xff…

洛谷_P4995 跳跳!_python写法

P4995 跳跳&#xff01; - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) n int(input()) data list(map(int,input().split())) data.append(0) data.sort()sum 0 l 0 r len(data)-1 flag 1 while l<r:sum (data[l]-data[r])**2if flag:l 1flag 0else:r - 1flag 1…

Wind X98 DM R2蓝牙5.2双模热插拔PCB

键盘使用说明索引&#xff08;均为出厂默认值&#xff09; 一些常见问题解答&#xff08;FAQ&#xff09;注意首次使用步骤蓝牙配对&#xff08;重要&#xff09;蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快捷键 蓝牙参数蓝牙MAC地址管理…

发现了一本超厉害的英语秘籍,绝对YYDS

昨天冷月小姐姐分享了一本书&#xff0c;她说是一位英语大神发她的。 我也打开了&#xff0c;很酷炫。 群友们也在与时俱进&#xff0c;随手截图&#xff0c;分享了大模型对文档的理解。 你可能会想&#xff0c;关注宏观经济有啥用&#xff0c;自己只是大海中的浪花一朵。 还有…

相交链表:寻找链表的公共节点

目录 一、公共节点 二、题目 三、思路 四、代码 五、代码解析 1.计算长度 2.等长处理 3.判断 六、注意点 1.leetcode的尿性 2.仔细观察样例 3.经验总结 一、公共节点 链表不会像两直线相交一样&#xff0c;相交之后再分开。 由于单链表只有一个next指针&#xff0…

github配置ssh

生成公钥 在电脑用户的目录下打开终端执行 ssh-keygen -t rsa: 执行完不要关 配置文件 看看用户的目录里 .ssh 目录&#xff1a; Host github.comHostname ssh.github.comPort 443配置公钥 复制 id_rsa.pub 文件里的内容 粘贴到 github上 连接密钥 回到刚才的终端…

Windows系统部署Net2FTP网站结合内网穿透轻松打造可公网访问个人云盘

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

【主成分分析(PCA)】

文章目录 一、什么是主成分分析&#xff08;PCA&#xff09;&#xff1f;主成分的选取方差的重要性数据降维 PCA的应用场景 二、主成分分析的工作原理1.方差和数据的重要性2.计算协方差矩阵3.特征值和特征向量4.选择主成分 三、PCA的实现步骤1.标准化数据集2.计算协方差矩阵3.计…

Windows应用商店打不开怎么办?

大家习惯在windows应用商店下载应用和软件,操作也很方便。最近,有用户却称,win10系统上网情况一切正常,但是就是无法打开应用商店,同时还伴随闪退。这该怎么办呢?针对此故障,小编整理好了解决方法,接下来,将和大家分享Windows应用商店打不开怎么办。 操作方法如下: 1…