网络层容错:多网卡绑定、链路聚合、网络冗余设计
网络层,说白了就是期货交易系统的「血管」。
行情数据要进来,交易指令要出去,中间任何一个环节断了,轻则丢单,重则穿仓。我见过太多团队在应用层堆了一堆容错逻辑,结果网络一抖,全白搭。
所以今天咱们聊聊网络层怎么扛得住。核心就三招:多网卡绑定、链路聚合、网络冗余设计。
1. 多网卡绑定:让物理链路互为备份
一台交易服务器,至少插两块物理网卡。这不是浪费,是底线。
多网卡绑定(NIC Teaming),就是把两块或更多网卡虚拟成一块逻辑网卡。操作系统看到的是一张网,实际流量走的是多条物理链路。
我在项目中遇到过一种情况:某家期货公司的报单服务器,只配了一块千兆网卡。结果某天下午,机房运维不小心踢掉了网线,整整3分钟没有报单。3分钟,在期货市场里够爆仓好几轮了。
从那以后,我要求所有核心交易节点,至少双网卡绑定起步。
绑定模式怎么选?
Linux下常用的绑定模式有这么几种,我直接给你列个表:
| 模式 | 名称 | 特点 | 适用场景 |
|---|---|---|---|
| mode 0 | balance-rr | 轮询分发,负载均衡 | 需要高吞吐的场景 |
| mode 1 | active-backup | 主备模式,只有一块工作 | 追求稳定性,不关心带宽 |
| mode 4 | 802.3ad | 动态链路聚合,需交换机支持 | 兼顾带宽和冗余 |
| mode 6 | balance-alb | 自适应负载均衡,无需交换机配合 | 不想动交换机配置的场景 |
我个人习惯,期货交易服务器用 mode 1(active-backup)。为什么?
因为交易流量对延迟极度敏感。mode 0 虽然能聚合带宽,但轮询分发可能导致报文乱序,某些交易网关处理乱序的能力很差。mode 1 虽然浪费了一块网卡的带宽,但切换干净利落,延迟稳定。
2. 链路聚合:不只是带宽叠加
链路聚合(Link Aggregation),很多人以为就是为了把两条千兆线合成两G带宽。其实它的核心价值,是让多条链路看起来像一条。
你想想看,如果不用链路聚合,两块网卡各自独立,应用层得自己决定走哪条路。一旦某条链路断了,应用层还得感知、切换,这中间的时间窗口足够出事了。
链路聚合在交换机层面就把这事解决了。交换机知道这两条线是绑在一起的,一条断了,流量自动走另一条。
配置示例(Linux + mode 4)
# 加载 bonding 模块
modprobe bonding mode=4 miimon=100 lacp_rate=fast
# 创建 bond 接口
ip link add bond0 type bond mode 802.3ad miimon 100 lacp_rate fast
# 添加物理网卡
ip link set eth0 master bond0
ip link set eth1 master bond0
# 配置 IP
ip addr add 192.168.1.100/24 dev bond0
ip link set bond0 up
这里有个细节:miimon=100 表示每100毫秒检测一次链路状态。我建议不要设得太短,否则链路抖动时频繁切换反而坏事。100ms是个比较稳妥的值。
3. 网络冗余设计:从单点到全冗余
多网卡绑定解决的是服务器到交换机的单点故障。但网络拓扑里还有别的单点:交换机本身、上行链路、甚至整个机房。
真正的冗余设计,得从端到端去考虑。
我常用的三层冗余架构
- 接入层冗余: 服务器双网卡分别接到两台不同的接入交换机。一台交换机挂了,流量走另一台。
- 汇聚层冗余: 两台接入交换机各自上行到两台汇聚交换机。任何一条上行链路断了,不影响。
- 核心层冗余: 汇聚交换机再上行到核心交换机。核心层通常已经是全冗余设计。
说白了,就是没有单点。任何一个网络设备、任何一条光纤断了,业务都不应该受影响。
SVG 网络冗余架构图
STP与快速收敛
冗余拓扑里有个老问题:环路。交换机之间多条链路互联,如果不做防环,广播风暴分分钟把网络打瘫。
STP(生成树协议)就是干这个的。它会逻辑上阻塞一条链路,只留一条活路。一旦活路断了,STP重新计算,把阻塞的链路放开。
但传统STP收敛太慢,要30-50秒。期货交易等不了。所以必须用 RSTP(快速生成树协议) 或 MSTP(多生成树协议),收敛时间可以控制在1秒以内。
4. 实战中的几个坑
理论说完了,我分享几个真实踩过的坑。
- 坑一:网卡固件版本不一致。 两块同型号网卡,固件版本不同,绑定后偶尔出现丢包。后来统一刷成同一版本,问题消失。
- 坑二:交换机端口配置不一致。 两台接入交换机,一台开了端口安全,一台没开。结果流量切到另一台时,直接被drop。排查了俩小时。
- 坑三:光模块混用。 多模光纤配了单模模块,或者反之。光衰大,链路不稳定。我后来要求所有光模块统一采购、统一标号。
- 坑四:MTU不一致。 服务器设了9000的巨型帧,交换机没开。结果大包被分片,性能反而下降。交易链路我建议统一用1500,省心。
好了,网络层容错就聊到这儿。记住一句话:网络没有单点,交易才能安心。