Может ли длительная загрузка файла обрабатываться кластером (Tomcat) серверов, где, если во время загрузки происходит сбой / сбой одного сервера, другой забирает его? - PullRequest
2 голосов
/ 08 апреля 2009

Что происходит при сбое Tomcat в процессе загрузки. Будет ли это просто выбросить 50-кратную ошибку. Можно ли корректно обработать сбой сервера и переслать остальную часть запроса на другой сервер.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2009

Я не знаю конкретно о tomcat, но это TCP-соединение. Если загрузка не удалась, соединение TCP будет разорвано. Клиент прекратит загрузку.

Если у клиента есть возможности повтора, которые позволяют ему перезапустить загрузку с заданной позиции в файле, он может быть перезапущен с новым сервером. В общем, это не распространенная возможность веб-клиентов, многие сайты с большой загрузкой файлов имеют флеш-клиенты, которые поддерживают возобновление загрузки.

Если вы хотите сделать это с большей прозрачностью, у вас может быть веб-интерфейс, который наблюдает за потоками TCP и поддерживает состояние TCP. Если он наблюдает сбой, он может перенести это состояние на новый сервер и передать ему поток для продолжения загрузки, как если бы поток TCP никогда не прерывался.

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

-Adam

0 голосов
/ 08 апреля 2009

Похоже, вам нужен какой-то балансировщик нагрузки / failover . По сути, это машина, которая выступает в качестве внешнего интерфейса для нескольких компьютеров - она ​​прослушивает трафик извне и перенаправляет его на узлы (вычисляет) внутри кластера. В случае сбоя одного узла он знает, как перенаправить трафик на другой компьютер. Тогда для этого потребуется, чтобы все узлы были синхронизированы друг с другом, чтобы такие транзакции, как передачи TCP, могли продолжаться без пропуска импульса.

Это чаще всего реализовано в аппаратном, а не программном обеспечении. В любом случае, это не очень тривиально для реализации.

...