Как сделать отказоустойчивую систему, которая мгновенно справится с ситуацией, когда сервер выйдет из строя

До того, как XYZ.com был отключен, я заметил, что мой запрос направлялся на IP-адрес 192.33.31.xxx, а когда он появился, я заметил, что мой запрос был направлен на IP-адрес 50.17.196.xxx. Это какое-то переключение сервера? Разве динамическое переключение серверов в случае сбоя не способ сделать систему отказоустойчивой?


person nirprat    schedule 03.03.2014    source источник


Ответы (1)


Большинство активно используемых веб-сайтов работают с балансировщиками нагрузки, направляющими запрос на несколько серверов. Существует очень простая или очень сложная логика, на основе которой определяется маршрутизация. Например, логика может быть

  1. Как только запрос обрабатывается одним конкретным сервером, запрос с того же IP-адреса обрабатывается тем же сервером ИЛИ
  2. Используйте циклический способ обработки запроса (в этом случае IP играет роль)
  3. маршрутизировать запрос к наименее используемому серверу и т. д.

Веб-сайт также может использовать гибридный подход всего вышеперечисленного.

Теперь, если бы веб-сайт, к которому вы обращались, использовал маршрутизацию на основе IP, тогда дело было бы в другом.

  1. Это ваш первый запрос. Затем вам будет назначен сервер, который будет обрабатывать ваш запрос. (Это может быть циклический перебор или другая логика (например, для сервера с меньшей нагрузкой)
  2. Теперь у балансировщика нагрузки может быть логика, согласно которой следующие X (скажем, 100) запросов или в течение Y (скажем, 1 часа) периода времени все запросы с одного и того же IP-адреса будут направляться на один и тот же сервер или на оба.
  3. Итак, в вашем случае, если вы делаете запрос к XYZ, он перенаправляется на какой-то сервер abcd, а затем, если вы делаете еще один звонок через 1 час или делаете 101-й вызов, вы можете получить другой сервер, который обрабатывает ваш запрос.

Теперь, если ваш сервер вышел из строя, у вас могут быть резервные механизмы, например,

  1. Если сервер не отвечает в течение некоторого предварительно настроенного периода времени, удалите этот сервер из списка действующих серверов в конфигурации балансировщика нагрузки и перенаправьте запрос.
  2. Или мы можем иметь простаивающие предварительно работающие серверы (это дорого, но нужно соблюдать, когда каждый запрос должен обслуживаться без сбоев). Как только сервер выйдет из строя, вызовите этот новый сервер и назначьте ему IP-адрес, который был назначен старому серверу, который вышел из строя.

Однако для этой проблемы может быть лучшее и гораздо более сложное решение.

person Global Warrior    schedule 03.03.2014