网络延时对 TDengine TSDB 写入性能的影响:实验解析与实践建议

部署 TDengine TSDB 时,CPU、内存等基础性能受关注,而易被忽略的网络延时 对写入性能影响显著。本文通过 7 组实验验证:网络延时与写入速度强负相关,最优时(0.034ms)写入速度达 19.9 万 rows/s,最差仅为其 18.6%。

测试基于虚拟机(服务端 16 核 16GB、压测端 16 核 32GB,均 1000Mb/s 网络),以 tc 命令调延时,16 线程 + stmt2 模式压测;配套 ping 测试验证延时、性能监控保障数据可信。

实践建议:对于大数据量、高并发的生产环境,建议网络延时控制在 0.1ms 以下(ping -f)。

一、先搞懂:什么是网络延时?

网络延时就是一个数据从发出到对方收到并回复的总时间,单位是毫秒(ms),从专业角度看,总网络延时由四部分组成:

总网络延时 = 传输延时 + 传播延时 + 处理延时 + 排队延时

实际用网络时,常关注三种延时,它们对应不同场景:

  1. 单向延时(One-Way Latency)
  • 定义:数据从发出到对方收到的 "单程" 时间。
  • 适用场景:对时间特别敏感的情况,如实时通信、卫星通信。
  • 测量难点:需要让发数据和收数据的设备时间完全一致,不平时很少用这种方式测。
  1. 往返延时(Round-Trip Time, RTT)
  • 定义:数据从发出到对方收到并回复的 "来回" 总时间,。
  • 适用场景:大部分网络使用场景,这是平时测性能最常用的延时指标。
  • 测量方式 :使用ping 192.168.3.67(实验中服务器的地址),结果中 time=0.034ms 就是往返延时。
  1. 应用层延时(Application Latency)
  • 定义:从发起操作到看到结果的总时间,除了网络延时,还包括设备处理数据的时间。
  • 典型示例:打开网页的延时 = DNS 寻址时间 + 建立网络连接的时间 + 数据传输的往返延时 + 服务器处理数据的时间 + 显示网页的时间。

本次实验主要测试 往返延时(RTT),验证其对 TDengine TSDB 数据写入的影响。

二、实验揭秘:如何验证网络延时对写入性能的影响?

文中做了 7 组实验,只改变 "网络延时" 这一个变量,以验证网络延时对写入性能的影响。

2.1 测试环境

实验用的是虚拟机。具体配置如下:

配置项 服务端(TDengine 节点) 压测端(客户端)
CPU 核心数 16 核 16 核
内存(MEM) 16GB 32GB
IP 地址 192.168.3.67 192.168.3.68
网络带宽 1000Mb/s 1000Mb/s
TDengine TSDB 版本 3.3.6.14 --

注意:虚拟机有时候会出现宿主机资源竞争的情况,造成性能不稳定,影响实验结果。

2.2 用 tc 命令调整网络延时

为了模拟不同的网络情况,可以用 Linux 系统里的tc命令在压测端调整网络延时。核心命令是:

复制代码
tc qdisc add dev ens160 root netem delay 10ms

参数解析:

字段 作用说明
tc qdisc add 操作类型:"add" 表示给网络加一条规则
dev ens160 目标网络接口:指定对 "ens160" 这块网卡生效
root 规则挂载点:把这条规则设为最顶层的,所有数据都要按这个规则走
netem 队列规则类型:相当于 "网络模拟器",能模拟网络延迟、丢包等情况
delay 10ms 核心参数:把所有从压测端发出的数据都延迟 10ms 再传,

通过把delay后面的数字改成 0.2ms、0.3ms 等不同数值,就模拟出了 7 组不同的网络延时场景,为后面的对比实验做准备。

2.3 关键操作 2:用 ping -f 验证延时真实性

调完网络延时后,得确认延时与升级相符,可以用 "洪水 ping"(ping -f)模式,命令是:

复制代码
ping -f -c 10000 192.168.3.67

-f参数特别重要,它能更真实地模拟大数据量场景:

  1. 发包间隔差异 :普通 ping 每秒发 1 个数据包,就像货车每隔 1 秒才出发一辆,系统要频繁安排货车,浪费时间;-f参数让数据包连续发,货车一辆接一辆出发,不用频繁安排。
  2. 系统资源分配 :用-f参数时,系统会优先处理这些 ping 请求,就像给货车队开绿灯,让它们更快通过。
  3. 网络传输连续性:连续发数据包能让网络一直处于忙碌状态,避免网络空闲后再启动时浪费时间,就像马路一直有车跑,不会出现车少了再发车时的等待。

ping -f -c 10000(发 10000 个数据包),可测量当前网络的往返延时,确保实验中 "延时" 这个条件准确。

2.4 压测脚本配置

使用用 TDengine 官方的压测工具 taosBenchmark,保证每次数据测试的条件都一样,,脚本如下:

  1. {
  2. "filetype":"insert",
  3. "cfgdir":"/etc/taos",
  4. "host":"c3-67",
  5. "port":6030,
  6. "user":"root",
  7. "password":"taosdata",
  8. "thread_count":16,
  9. "thread_count_create_tbl":100,
  10. "num_of_records_per_req":10,
  11. "result_file":"insert.log",
  12. "confirm_parameter_prompt":"no",
  13. "databases":[{
  14. "dbinfo":{
  15. "name":"test",
  16. "cachemodel":"'none'",
  17. "cachesize":100,
  18. "vgroups":8,
  19. "drop":"yes"
  20. },
  21. "super_tables":[{
  22. "name":"sbnt",
  23. "child_table_exists":"no",
  24. "childtable_count":80000,
  25. "childtable_prefix":"tbtf_",
  26. "auto_create_table":"no",
  27. "batch_create_tbl_num":2000,
  28. "data_source":"rand",
  29. "insert_mode":"stmt2",
  30. "insert_interval":0,
  31. "insert_rows":10000,
  32. "interlace_rows":10,
  33. "max_sql_len":1048576,
  34. "disorder_ratio":0,
  35. "disorder_range":1000,
  36. "timestamp_step":10000,
  37. "start_timestamp":"2020-10-01 00:00:10",
  38. "sample_format":"csv",
  39. "sample_file":"",
  40. "tags_file":"",
  41. "columns": [{"type":"varchar","len":10,"count":1},{"type":"float","count":10}],
  42. "tags":[{"type":"varchar","len":10,"count":1}]
  43. }]
  44. }]
  45. }

执行脚本:

复制代码
taosBenchmark -f i.json

三、实验结论:延时与写入速度呈 "强负相关"

通过 7 组实验对比,可以清楚地看到 "网络延时" 和 "TDengine TSDB数据写入速度" 的关系 ------网络延时越高,数据写入速度越慢;延时越低,数据写入速度越快

下面是实验的核心数据和结论:

3.1 核心实验数据对比

测试组 往返延时(RTT) 写入速度(rows/s,stmt2 模式) 相对最优速度占比
Test1 0.034ms 199141.88(每秒存近 20 万条数据) 100%(最快)
Test2 1.088ms 67626.02(每秒存约 6.8 万条数据) 33.96%
Test3 2.101ms 37096.76(每秒存约 3.7 万条数据) 18.6%(最慢)
Test4 0.254ms 155809.98(每秒存约 15.6 万条数据) 78.24%
Test5 0.466ms 122463.81(每秒存约 12.2 万条数据) 61.5%
Test6 0.878ms 81191.54(每秒存约 8.1 万条数据) 40.77%
Test7 1.286ms 58693.38(每秒存约 5.9 万条数据) 29.48%

3.2 关键结论解读

从数据里能看出三个重要规律:

  1. 最优性能边界:当网络延时最低时(Test1,0.034ms),数据写入速度最快,每秒能存近 20 万条数据,这是当前硬件条件下的最好成绩。
  2. 性能衰减极限:当网络延时最高时(Test3,2.101ms),数据写入速度最慢,每秒只存约 3.7 万条数据,只有最快速度的 18.6%。这意味着延时变成原来的 62 倍,数据写入速度就只剩原来的不到五分之一。
  3. 线性衰减规律:其他测试组,比如从 Test4 到 Test7,延时从 0.254ms 慢慢增加到 1.286ms,数据写入速度也从每秒约 15.6 万条慢慢降到约 5.9 万条,完全符合 "延时降、速度升" 的规律,进一步证明了两者的关系。

四、生产环境建议:网络延时控制在 0.1ms 以下

根据实验结论,在大数据、高并发的场景,给出以下优化建议:

核心建议:网络延时(RTT)控制在 0.1ms 以下

ping -f命令测客户端和 TDengine TSDB服务器之间的网络延时,要保证平均延时不超过 0.1ms。

为什么选这个数值呢?有两个原因:

  1. 性能保障:看 Test1(0.034ms)和 Test4(0.254ms)的数据,延时在 0.1ms 以下时,数据写入速度能保持在每秒 15 万条以上,接近最快速度的 80%,能满足大量数据写入的需求。
  2. 实际可行性:0.1ms 的延时是普通局域网的正常水平,通过网络优化就能达到这个目标。

ping -f "洪水 ping" 模式,通过减少系统开销和发包间隔,降低了单次 ping 的延时,能够更好的模拟高并发场景。

  1. 发包间隔差异:普通 ping 默认每秒发送 1 个数据包,系统需频繁切换进程状态,增加额外耗时;-f 参数无发包间隔,连续快速发送,减少进程切换开销。
  2. 系统资源分配:洪水 ping 优先级更高,系统会更集中地分配资源处理 ping 请求,减少等待耗时。
  3. 网络传输连续性:连续发包使网络传输更连贯,避免了普通 ping 中间隔导致的链路空闲后的重新初始化耗时。

辅助优化措施

  1. 硬件层面:让服务器和客户端尽量在同一个地方,比如都放在一个机房里,尽量避免跨交换机。
  2. 网络层面 :定期用tc命令测网络延时,发现延时高、数据丢包等问题及时解决;给服务器的 IP 设固定路由。

总结

实验显示,网络延时从 0.034ms 增加到 2.1ms,数据写入速度衰减 80% 以上。因此,在大数据量、高并发的场景中,低网络延时是 TDengine TSDB 高效写入的前提。

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
古城小栈1 小时前
吃透Cron表达式
linux·服务器·数据库
mpHH1 小时前
ivorysql 源码分析-双port兼容
数据库·学习·postgresql
真上帝的左手1 小时前
4. 关系型数据库-MySQL-架构
数据库·mysql·架构
haiyu柠檬1 小时前
迁移redis 集群从Ubuntu到Red Hat
数据库·redis·缓存
7哥♡ۣۖᝰꫛꫀꪝۣℋ2 小时前
Spring WebMVC及常用注释
java·数据库·spring
脸大是真的好~2 小时前
尚硅谷-mysql专项训练-索引
数据库·mysql
香煎三文鱼2 小时前
数据库查询超时,并发问题处理
服务器·数据库
ZKNOW甄知科技2 小时前
AI-ITSM的时代正在到来:深度解读Gartner最新报告
大数据·运维·人工智能·低代码·网络安全·微服务·重构