本节摘要:应用和数据库间的网络影响延迟。本节讲清楚带宽/延迟、TCP 参数、多队列/中断、网络拓扑,让网络不拖后腿。
数据库网络场景:
网络影响:
带宽:
延迟(RTT):
影响:
优化:
1. TCP 缓冲区
2. 窗口缩放
3. TIME_WAIT
4. keepalive
5. SYN
6. 连接队列
多队列网卡:
RPS/RFS:
中断合并:
1. 同机房/同可用区
2. 专用网络
3. 负载均衡
4. 复制网络
1. 带宽
2. 延迟
3. 丢包/重传
4. 连接状态
5. 数据库复制延迟
⚠️ 常见误读:以为"网络快不用调"。高延迟下 N+1 查询灾难(100 查询 × 10ms = 1 秒)。要批量查询/预加载减少往返,应用和 DB 同机房降延迟。
💡 关键直觉:网络影响——延迟(RTT × 查询数累计,N+1 灾难 100×10ms=1s)、带宽(OLTP 低 OLAP/复制高)、丢包重传拖慢。带宽延迟——同机房 0.1-0.5ms/跨机房 1-10ms/跨地域 10-100ms+,万兆够多数。优化同机房/批量查询减往返/连接复用/预加载减 N+1。TCP——缓冲区 rmem_max/wmem_max 调大提吞吐、窗口缩放 tcp_window_scaling 高 BDP、TIME_WAIT tcp_tw_reuse 复用+max_tw_buckets 防耗尽、keepalive 调短 600s 及时发现死连接、SYN max_syn_backlog 调大+syncookies 防 flood、somaxconn accept 队列 4096+。多队列中断——多队列网卡多 CPU 处理 smp_affinity 绑核、RPS/RFS 软件多队列分发/同流同核缓存命中、中断合并 ethtool -C 吞吐优先大延迟优先小。拓扑——同机房/同 AZ <1ms 跨 AZ 1-2ms 跨地域慎用、专用网络 VPC 隔离安全避免公网、负载均衡多从库读+代理 ProxySQL/PgBouncer、复制专用网络+binlog 压缩减带宽。监控——iftop/nethogs 带宽、ping RTT、netstat -s/ss -ti 重传高则排查链路、ss -s 连接状态 TIME_WAIT 多调 reuse、复制延迟 Seconds_Behind_Master/pg_stat_replication 高则网络问题。
网络调优在单机场景是配角,在分布式数据库里是主角,给三个敏感点。敏感点一,延迟的地板效应:分布式事务与共识协议的每轮消息都在付网络延迟的税,同城两毫秒与跨城三十毫秒的往返差,经过协议的多轮放大后就是提交延迟的数倍差距——副本的地理布局因此是架构决策而非运维决策,"同步副本放多远"直接定义了写入延迟的地板。敏感点二,带宽与突发的错配:批量大查询的数据回流、复制流量、备份流量共享链路时,一次备份就能让节间延迟抖动,进而触发协议层的超时误判——流量隔离(复制走专用通道或限速)是分布式系统的标配动作。敏感点三,内核缓冲的调优:大数据量传输时内核的收发缓冲上限成为隐形瓶颈(吞吐卡在一个不高不低的位置),按带宽延迟积调大缓冲是教科书解法;同时确认拥塞控制算法与数据中心网络的匹配。三个敏感点的共同主题:分布式数据库把网络当成了"总线"——总线的延迟抖动会被协议放大成系统的可用性事件,这也是很多"玄学慢查询"的最终解释:查库的人没错,库没错,错在两台机器之间那根没被看见的线。
网络章收官谈一个分布式数据库的专门话题:复制与共识流量的隔离。问题的形态:主从复制流(持续的写日志流)与共识协议流(投票与心跳的频繁小包)共享业务网络时,大数据查询或备份的瞬时带宽占用会让协议心跳超时——触发本不该发生的主从切换或领导者选举,一次网络抖动升级成一次服务闪断。隔离的三层做法:物理层(独立网卡走复制流量,最彻底)、逻辑层(虚拟网或流量整形给协议流量保底带宽)、协议层(心跳超时调到能容忍已知抖动,配合优先级让数据流量先降级)。验证的手段:故障演练里专门设计"带宽打满"场景,观察协议行为是否符合预期——多数团队的演练只测断网不测拥塞,而生产事故里拥塞比断网常见得多。这个话题的教学价值超出网络本身:它展示了分布式系统里"流量类型的人格差异"——数据流宽容(晚点没关系)、控制流零容忍(心跳断了就是政变)——给不同人格分配不同的通道,是分布式运维的基本礼仪。
网络章收官给三件日常化动作,把网络从"没人管的地带"变成有台账的资产。动作一,延迟地图:定期(每日低峰)测量数据库与各应用可用区间的往返延迟,画成矩阵存档——延迟的缓慢劣化(路由变化、链路老化)只有对比历史才能发现,而它正是分布式协议超时误判的慢性病根源。动作二,重听率台账:核心链路的重传率与乱序率按周记录——千分之几的劣化平时无感,共识协议的抖动却会成倍放大它。动作三,切换演练:冗余链路(或网卡绑定)的主动切换每季一次——切换瞬断对上层的影响(连接重建风暴)要在演练里见过,应用侧的重连参数(退避策略)要据此调过。三件日常每件月均不到一小时,买的是"网络不再是盲区"——全书的调优都假设数据在层间流动,而流动的管道本身也需要体检,这是物理层章给整套教程补上的最后一块拼图。
网络章收官点三个低频陷阱——不常见,但每次出现都像悬案。陷阱一,季节性的链路劣化:跨楼宇或跨区线缆在温差大的季节延迟漂移——延迟地图的月度对比才能发现,日视图里它是隐形人。陷阱二,虚拟化层的网络抖动:宿主机的资源争抢传导为虚拟机的网络延迟毛刺——数据库侧看是"无缘无故的慢",只有下钻到宿主机层才见真凶;云环境里这个问题以"邻居噪音"的形态存在,独占宿主或投诉换宿主是解法。陷阱三,安全设备的性能拐点:防火墙与负载均衡在特定包率下进入降级模式(延迟跳档)——流量缓慢增长跨过拐点的那天,"什么都没变但一切变慢了",排查方向要包含中间设备而不只是两端。三个陷阱的共同教训:网络问题的现场常不在数据库所在的机器上——视野要覆盖整条路径,这是物理层调优对工程师眼界的最后要求。
最后一句:网络层的调优心法是"常测常新"——延迟地图、重传台账、切换演练三件日常的频率不用高,但要在;网络是六层里最容易被忽略的一层,也常是疑难杂症的最终答案,把它的观测做进例行,你就拥有了大多数团队缺失的那块拼图。
补一个分布式场景的收尾建议:跨可用区的数据库部署要在架构文档里写明"网络延迟的预算分配"——同步复制吃掉几毫秒、仲裁心跳留几毫秒、应用往返剩几毫秒——这张小账让"要不要跨区容灾、同步还是异步"的讨论有了数字基础;没有这张账的跨区部署,常见的结局是上线后才发现延迟预算超支,业务在每一个事务里还债。网络延迟是分布式数据库的税收,税单要在设计期就看得到。
最后一句给单机为主的团队:哪怕没有分布式,网络观测也值得做——应用服务器到数据库的往返延迟是每个查询的固定税,局域网内零点几毫秒的差异乘以日请求量,就是可观的隐形成本;跨机房部署的应用与库(历史原因的常见形态)更要把这笔账算清——它常是"为什么测试环境快生产慢"的终极答案。网络的账不分单机分布式,只算清楚没算清楚。