✅ 最佳实践

遵循以下建议,获取 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=26214400
sudo sysctl -w net.core.rmem_default=26214400
# 跨重启持久化——添加到 /etc/sysctl.conf
net.core.rmem_max=26214400
net.core.rmem_default=26214400

然后在应用代码中请求 buffer 大小:

import socket
sock = 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_max sysctl 值必须至少为 25 MB,请求才能成功。


🔄 冗余与故障转移

对于正常运行时间至关重要的生产系统,务必规划冗余方案。

  • 多区域数据流——在两个或更多区域创建数据流。如果一个区域出现问题,另一个继续传送。使用 (slot, index) 对去重,避免重复处理同一数据。
  • 热备服务器——在不同机器上运行第二个接收器。两者可同时监听;您的处理管道在下游进行去重。
  • IP 故障转移——使用浮动 IP 或 Elastic IP,可快速重新分配。将流量切换到备用服务器时,在仪表盘中更新数据流目的地。

✅ 总结清单

  • UDP 接收 buffer 设为 25 MB 或更高
  • Socket 绑定到 0.0.0.0,而非 127.0.0.1
  • 接收线程与处理逻辑隔离
  • 在多个区域配置冗余数据流(生产环境)
最佳实践 — Documentations | ShredStream.com