用于临时排队 UDP 数据包的服务

用于临时排队 UDP 数据包的服务

我在 Linux 机器上运行了一项服务,该服务通过 UDP 接收相当稳定的数据包流。使用 UDP 时偶尔丢失或损坏数据包是正常的。

但是,该服务正在积极开发中,更新频率相当高。每次部署更新时,都必须重新启动,重新启动期间到达的所有数据包都可能被丢弃。此外,时不时地会有错误进入生产环境,导致服务持续一段时间无法运行。

是否存在一个相当简单的服务可以让我在我的服务和传入的 UDP 数据包之间坚持使用,如果服务可用,它只会将数据包传递给服务,或者,如果服务由于某种原因关闭,它会将数据包排队直到服务恢复,然后再传递它们?

答案1

简单而又狡猾的解决方案是将 UDP 流记录为 pcap 格式(tcpdump/风转储或者wireshark可以这样做)并在之后重播 - 例如使用tcpreplay

这需要相当多的逻辑来包含故障检测逻辑和服务重启时的自动重播,但如果您的服务可以使用实际方法处理重复的消息,那么应该可以很好地应对计划中断。

答案2

Systemd 有一种在守护进程重启之间保留套接字的方法(不会丢失数据)。不确定它是否也适用于 UDP 套接字,但我希望如此。没有更多信息,我的 Google 能力让我失望了。

相关内容