Может ли загрузка длинного файла обрабатываться кластером серверов (Tomcat), где, если один сервер выходит из строя во время загрузки, другой забирает его
-
05-09-2019 - |
Вопрос
Что происходит, когда Tomcat выходит из строя во время процесса загрузки.Будет ли это просто выдавать 50-кратную ошибку.Возможно ли изящно обработать сбой сервера и переслать остальную часть запроса на другой сервер.
Решение
Я не знаю конкретно о tomcat, но это TCP-соединение.Если загрузка завершится неудачей, то TCP-соединение разорвется.Клиент прекратил бы загрузку.
Если у клиента есть возможности повтора, которые позволяют ему перезапустить загрузку в заданной позиции файла, то его можно перезапустить с нового сервера.В общем, это не обычная возможность веб-клиентов, многие сайты с загрузкой больших файлов имеют флэш-клиенты, которые интегрируют возобновление загрузки.
Если вы хотите сделать это с большей прозрачностью, то у вас может быть веб-интерфейс, который отслеживает потоки TCP и поддерживает состояние TCP.Если он наблюдает сбой, он может перенести это состояние на новый сервер и передать ему поток для продолжения загрузки, как если бы поток TCP никогда не прерывался с самого начала.
Однако это не тривиально и действительно приводит к новой точке отказа.Главное преимущество заключается в том, что он будет работать с любым клиентом, пока клиент не разорвет соединение (он может только устранять сбои сервера на вашей стороне, а не возобновлять прерванные загрузки на стороне клиента)
-Адам
Другие советы
Это звучит так, что вам нужен какой-то балансировщик нагрузки/переход на другой ресурс.По сути, машина, которая действует как интерфейс для нескольких компьютеров - она прослушивает трафик извне и пересылает его узлам (вычисляет) внутри кластера.Если один узел выходит из строя, он знает, как перенаправить трафик на другой компьютер.Это, таким образом, потребовало бы, чтобы все узлы были синхронизированы друг с другом, чтобы такие транзакции, как передача TCP, могли быть продолжены без сбоев.
Чаще всего это реализуется в аппаратном, а не программном обеспечении.В любом случае, не очень тривиально реализовать.