Я занимаюсь проектированием / разработкой новой службы обмена сообщениями (например, Yahoo, Gtalk messengers). Итак, мои клиенты будут постоянно подключены к серверам. Мне интересно, как можно поддерживать такие серверы (применять исправления, обновления и т. Д.), Пока клиенты все еще подключены?
Один из традиционных способов - отключить клиентов и остановить серверы, что приведет к простою. Однако это не идеальное решение, потому что исправления и улучшения могут быть частыми. Я почти не видел Yahoo, службы обмена сообщениями Gtalk закрыты на техническое обслуживание. Поэтому мне было интересно, как они могли это сделать? (Полагаю, это дизайнерское решение)
Любые мысли / ссылки были бы замечательными.
Ты прав. Это архитектурное решение. Обычно это делается с помощью некоторой формы балансировки нагрузки приложений ...
Ваши клиенты не должны подключаться напрямую к серверам, а должны балансировщик нагрузки который принимает решения о маршрутизации, которые направляют клиентский трафик на бассейн внутренних серверов по соответствующим критериям; круговой, кто наименее занят, кто в сети / офлайн и т. д.
Это то, что позволяет приложениям масштабироваться с преимуществом обеспечения избыточности и возможности отключать узлы для обслуживания.
Причина, по которой вы не видите этого для Yahoo, Gtalk или буквально любого другого масштабного сервиса, заключается в том, что у этих сервисов есть два фактора. 1) Балансировка нагрузки или форма циклического перебора пула серверов. 2) Кластер (ы), также известный как пул серверов. Это в основном сводится к следующему процессу: удалить сервер как активный узел, выполнить обслуживание, добавить обратно как активный, перейти к следующему серверу, повторить. Хотя этот подход требует больше времени и средств, это наиболее (только для чтения) правильный способ делать то, о чем вы просите, без простоев. В зависимости от службы у вас может быть просто простое зеркало между двумя серверами, но оно быстро сломается в любом реальном масштабе. Хотя балансировка нагрузки напрямую не влияет на то, что вы просите, это главный фактор в том, как это выполняется, и означает, что вы можете более эффективно распределять работу по всем узлам в кластере, вместо того, чтобы один сервер брал на себя всю нагрузку, например, в зеркало.
Вы можете их не заметить, но в большинстве случаев они используют так называемое «теплое переключение при отказе», когда у них есть кластер машин, обрабатывающих запросы в циклической манере. Когда машину нужно остановить для обслуживания, они вынимают ее из пула серверов и выключают. Затронутые клиенты обычно немедленно подключались к следующему доступному серверу. Потенциально клиентов можно запрограммировать на автоматическую смену серверов по запросу самого сервера.
Во многом это просто теория дизайна, и ничего, кроме тестирования и исследования, не подойдет.