✅ 最佳实践
遵循以下建议,获取 ShredStream.com 最可靠、最低延迟的 shred 传送体验。
使用我们的 SDK? SDK 会自动配置 socket 接收 buffer(默认 25 MB)并处理数据包验证。您仍需配置以下操作系统级 sysctl 设置,监控和冗余建议同样适用。
📐 UDP Buffer 调整
最能提升性能的配置调整就是增大 UDP 接收 buffer。ShredStream.com 每秒可传送数千个 shreds,操作系统默认 buffer 远远不够。
设置最低 25 MB:
bash
# 立即生效(Linux)sudo sysctl -w net.core.rmem_max=26214400sudo sysctl -w net.core.rmem_default=26214400# 跨重启持久化——添加到 /etc/sysctl.confnet.core.rmem_max=26214400net.core.rmem_default=26214400
然后在应用代码中请求 buffer 大小:
import socketsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 25 * 1024 * 1024)sock.bind(("0.0.0.0", 8001))
**关于 Linux buffer 翻倍机制:**Linux 内部会将传入
setsockopt()的 buffer 值翻倍。当您请求 25 MB 时,内核实际分配 50 MB(一半用于数据,一半用于内核簿记)。rmem_maxsysctl 值必须至少为 25 MB,请求才能成功。
🔄 冗余与故障转移
对于正常运行时间至关重要的生产系统,务必规划冗余方案。
- 多区域数据流——在两个或更多区域创建数据流。如果一个区域出现问题,另一个继续传送。使用 (slot, index) 对去重,避免重复处理同一数据。
- 热备服务器——在不同机器上运行第二个接收器。两者可同时监听;您的处理管道在下游进行去重。
- IP 故障转移——使用浮动 IP 或 Elastic IP,可快速重新分配。将流量切换到备用服务器时,在仪表盘中更新数据流目的地。
✅ 总结清单
- UDP 接收 buffer 设为 25 MB 或更高
- Socket 绑定到
0.0.0.0,而非127.0.0.1 - 接收线程与处理逻辑隔离
- 在多个区域配置冗余数据流(生产环境)