У меня есть служба, работающая в Linux, которая получает довольно постоянный поток пакетов через UDP. Случайная потеря или повреждение пакетов, связанных с использованием UDP, - это нормально.
Однако сервис находится в стадии активной разработки и довольно часто обновляется. Каждый раз, когда на нем развертываются обновления, он должен быть перезапущен, и все пакеты, поступающие во время перезапуска, предположительно отбрасываются. Кроме того, время от времени в производственную среду попадает ошибка, из-за которой служба отключается на длительный период.
Есть ли довольно простая служба, которую я могу вставить между своей службой и входящими пакетами UDP, которая будет просто передавать пакеты службе, если она доступна, или, если служба не работает по какой-либо причине, она будет ставить пакеты в очередь до тех пор, пока служба возвращается, а затем пропускает их?
Простым и хитрым решением было бы записать поток UDP в формате pcap (tcpdump/ветер или WireShark может это сделать) и потом воспроизвести его - например, используя tcpreplay.
Потребуется довольно много логики, чтобы включить логику обнаружения сбоев и автоматическое воспроизведение при перезапуске службы, но если ваша служба может обрабатывать дублированные сообщения с использованием практического подхода, это должно хорошо работать для запланированных отключений.
В Systemd есть способ сохранения сокетов между перезапусками демона (без потери данных). Не уверен, что это также работает для сокетов UDP, но я ожидал этого. У меня нет дополнительной информации, мой гугл-фу меня подводит.