Как избежать потери пакетов при перезапуске приложения сервера? - PullRequest
2 голосов
/ 21 июля 2011

Типичная ситуация с сервером / веб-приложением заключается в том, что приложение должно быть закрыто и перезапущено для реализации обновления.

Каковы возможные / общие схемы (и доступное программное обеспечение) дляизбежать потери данных, которые клиенты отправляли на сервер в течение короткого времени, когда приложение исчезло?

Пример схемы, которая может работать: Для простого веб-сервера, где клиент подключается к порту 80, а неклиент, подключающийся напрямую к приложению веб-сервера, может быть между ними простым приложением, которое прослушивает порт 80 и беспрепятственно пересылает / возвращает данные в / из «фактического» приложения веб-сервера (на каком-то другом порту).Когда веб-сервер необходимо отключить и перезапустить, приложение-ретранслятор может обнаружить это и буферизировать все входящие данные до тех пор, пока веб-сервер не восстановится.Таким образом, всегда приложение прослушивает порт 80, и данные никогда не теряются (конечно, в пределах размера буфера и времени).Существует ли такой простой промежуточный программный буфер, недоступный получателю, уже?

Меня больше всего интересуют решения для одного экземпляра приложения, а не одного, где есть несколько экземпляров (в этом случае умныйМожно использовать скользящую схему обновления), но в интересах полного набора ответов любой ответ был бы великолепен!

1 Ответ

3 голосов
/ 21 июля 2011

Чтобы избежать этого, используйте несколько серверов приложений за балансировщиком нагрузки. Прежде чем отключить один, убедитесь, что балансировщик нагрузки не отправляет ему новых клиентов. Снизьте его, трафик пойдет на другие серверы приложений, и когда он вернется, трафик снова будет отправляться на него.

Если у вас только один сервер приложений, просто «буферизация» сетевого трафика является плохим решением. Когда сервер возвращается, у него больше нет информации о состоянии TCP, и старым входящим соединениям вообще некуда идти.

...