Serviço para enfileirar temporariamente pacotes UDP

3

Eu tenho um serviço rodando em uma caixa linux que recebe um fluxo razoavelmente constante de pacotes via UDP. A perda ou corrupção ocasional de pacotes associados ao uso do UDP é adequada.

No entanto, o serviço está em desenvolvimento ativo e é atualizado com bastante frequência. Toda vez que as atualizações são implantadas, elas precisam ser reiniciadas e todos os pacotes que chegam durante a reinicialização são descartados. Além disso, de vez em quando um bug torna-se em produção que leva o serviço a cair por um longo período.

Existe um serviço bastante simples que eu posso manter entre o meu serviço e os pacotes UDP de entrada, que apenas passarão pelos pacotes para o serviço se ele estiver disponível ou, se o serviço estiver inativo por alguma razão, ele será enfileirado os pacotes até o serviço voltar e depois passá-los?

    
por mikeocool 13.12.2011 / 18:24

2 respostas

1

A solução simples e hacky seria gravar o fluxo UDP no formato pcap ( tcpdump / windump ou wireshark poderia fazer isso) e reproduzi-lo depois - por exemplo, usando tcpreplay .

Seria necessário um pouco de lógica para incluir lógica de detecção de falha e replays automáticos na reinicialização do serviço, mas se o serviço puder manipular mensagens duplicadas usando a abordagem prática, isso deve funcionar bem para interrupções planejadas.

    
por 14.12.2011 / 00:06
0

O Systemd possui uma maneira de preservar sockets entre as reinicializações do daemon (sem perder dados). Não tenho certeza se ele também funciona para soquetes UDP, mas eu esperaria que sim. Não tenho mais informações, meu Google fu está me decepcionando.

    
por 14.12.2011 / 15:55