Я нашел несколько интересных решений из этой статьи , касающейся нулевого времени простоя. Я хотел бы выделить лишь несколько решений в этой статье.
1. Переключатель A / B: ( Повторное обновление + резервный механизм )
У нас должен быть набор узлов в режиме ожидания. Мы будем развертывать новую версию на этих узлах и мгновенно переключать трафик на них. Если мы сохраним старые узлы в их первоначальном состоянии, мы также можем сделать мгновенный откат. Балансировщик нагрузки находится перед приложением и отвечает за это переключение по запросу.
минусов: если вам нужно X серверов для запуска приложения, вам понадобится 2X серверов с таким подходом.
2. Ноль времени простоя
При таком подходе мы не храним набор машин; скорее мы задерживаем привязку порта. Получение общего ресурса задерживается до запуска приложения. Порты переключаются после запуска приложения, и старая версия также продолжает работать (без точки доступа) для мгновенного отката в случае необходимости.
3. Параллельное развертывание - Apache Tomcat: (только для веб-приложений)
Apache Tomcat добавил функцию параллельного развертывания в свою версию 7. Они позволяют одновременно запускать две версии приложения и использовать последнюю версию по умолчанию.
4. Задержка привязки порта:
Мы предлагаем здесь возможность запуска сервера без привязки порта и, по существу, без запуска соединителя. Позже, отдельная команда запустится и свяжет разъем. Версия 2 программного обеспечения может быть развернута, пока версия 1 работает и уже связана. Когда версия 2 запускается позже, мы можем отсоединить версию 1 и привязать версию 2. При таком подходе узел фактически отключается только на несколько секунд.
5. Расширенная привязка порта:
Разрушив миф: ‘Address already in use
’, * старый процесс и новый процесс будут привязаны к одному и тому же порту. Опция SO_REUSEPORT в режиме ON позволяет двум (или более) процессам связываться с одним и тем же портом. Как только новый процесс свяжется с портом, убейте старый процесс.
Опция SO_REUSEPORT решает две проблемы:
Небольшой сбой между переключением версии приложения: узел может постоянно обслуживать трафик, что фактически дает нам нулевое время простоя.
Улучшено планирование:
В итоге:
Сочетая позднее связывание и повторное использование порта , мы можем эффективно достичь нулевого времени простоя. И если мы продолжим процесс ожидания, мы сможем также выполнить мгновенный откат.