4 урока, которые мы извлекли из нашего последнего обновления инфраструктуры

Опубликовано: 2022-05-04

Обновление инфраструктуры. Обычная задача, особенно для такой SaaS-компании, как наша, верно?

Что ж, наше последнее обновление не было типичным обновлением программного обеспечения, поскольку мы добавили в него небольшую изюминку.

Главной целью было обновить наше программное обеспечение до последней версии, но на этот раз мы включили в проект еще два шага — сокращение количества IP-адресов, которые наши клиенты должны внести в белый список, и обеспечение избыточности базы данных.

И хотя большая часть обновления прошла гладко, мы также столкнулись с некоторыми перебоями в обслуживании.

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

Давайте прямо в это!


Почему мы выполнили обновление в первую очередь и что оно включало

Мы понимаем свою ответственность и ту роль, которую NitroPack играет в успехе бизнеса наших клиентов. Вот почему обеспечение оптимальной производительности, высочайших стандартов безопасности и стабильной работы круглосуточно и без выходных имеет решающее значение.

Регулярное обновление нашей инфраструктуры — один из многих способов обеспечить все это. И, как упоминалось ранее, это конкретное обновление состояло из трех частей:


1. Обновите наше программное обеспечение до последней стабильной версии.

Как облачное решение, все оптимизации, которые NitroPack выполняет для наших более чем 100 000 клиентских сайтов, выполняются в нашей инфраструктуре. В настоящее время мы используем более 100 серверов для запуска сервиса. С помощью этого обновления нам пришлось обновить программное обеспечение, управляющее нашим парком серверов, до последней стабильной версии.


2. Сократите количество IP-адресов, которые наши клиенты должны внести в белый список.

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

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

Этот процесс создания новых IP-адресов требовал, чтобы наши клиенты регулярно добавляли в белый список десятки новых адресов, чтобы NitroPack успешно оптимизировал их сайты.

После обновления нашим клиентам необходимо добавить в белый список только три фиксированных, никогда не меняющихся IP-адреса.


3. Обеспечьте избыточность базы данных

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

Помня об этих целях, мы разбили процесс на два этапа, оставив между ними день, чтобы у нас была хорошая передышка:

Шаг 1: (4 ноября): уменьшение количества IP-адресов
Шаг 2: (6 ноября): резервирование базы данных и обновление программного обеспечения сервера.

Но не все пошло в соответствии с нашими ожиданиями.


Что пошло не по плану

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

Проблема №1: Проблемы с подключением в процессе обновления IP

На 4 ноября у нас было запланировано предварительное обновление сервиса с целью уменьшения количества IP-адресов для исходящего трафика NitroPack.

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

Хорошая новость заключается в том, что нашей команде разработчиков удалось быстро устранить проблему, обновив программное обеспечение нашего HTTP-клиента.


Проблема № 2: резервное копирование базы данных заняло больше времени, чем предполагалось

Когда мы начали работать над избыточностью базы данных 6 ноября, мы быстро поняли, что это займет гораздо больше времени, чем планировалось. Это вынудило нас перенести обновление программного обеспечения сервера на день позже.

Но это было с добрыми намерениями. Мы хотели быть чрезвычайно осторожными с резервным копированием базы данных, чтобы мы могли выполнить избыточность без каких-либо проблем.


Проблема №3: ​​Ошибка сервера замедлила процесс обновления программного обеспечения

Когда мы начали развертывание обновления серверного программного обеспечения 7 ноября, небольшое количество (менее 1%) серверов начали выдавать непредвиденные ошибки, которые в конечном итоге помешали развертыванию обновления и замедлили весь процесс. Не было возможности исправить проблемы самостоятельно, и мы были вынуждены передать их нашему поставщику серверов.

Несмотря на то, что это кажется незначительным сбоем, учитывая масштабность задачи, эта непредвиденная ошибка привела к тому, что небольшая часть (менее 2%) клиентов NitroPack испытывала периодические кратковременные простои в обслуживании.


Проблема № 4: Неожиданные ошибки 502 CDN вызвали нестабильность службы

Когда мы подумали, что закончили обновление, наша система мониторинга начала регистрировать частые появления ошибок CDN с кодом состояния HTTP 502.

К сожалению, ошибка затронула всех наших клиентов, вызвав нестабильность доставки ресурсов CDN на пару дней. Изучив проблему, мы выпустили обновление программного обеспечения, которое навсегда устранило нестабильность службы.

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

Шаги, которые мы предпринимаем, чтобы гарантировать, что те же проблемы не повторятся в будущем

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

Однако мы знаем, что похлопывание себя по плечу и сосредоточение исключительно на том, что было сделано правильно, не продвинет нас вперед как компании и сервиса.

Вот почему мы хотим сообщать об улучшениях, которые мы реализуем, чтобы выполнять будущие обновления еще более эффективно. Вот основные моменты:

Промежуточная среда с возможностью стресс-тестирования

Это позволит нам обнаруживать ошибки, которые случаются только в ситуациях с большими объемами и десятками тысяч запросов. Например, это помогло бы нам заранее выявить проблемы с HTTP-клиентом и повторно используемыми соединениями, и мы смогли бы выполнять обновление IP без перерывов.


Улучшенные системы мониторинга и оповещения

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


Лучшее сотрудничество между командами и более активная коммуникация с клиентами

Поскольку различные группы, участвовавшие в обновлении, не были идеально синхронизированы друг с другом, мы считаем, что не могли достаточно активно и своевременно сообщать о ходе обновления нашим существующим клиентам. У нас была страница status.nitropack.io, чтобы каждый мог следить за тем, что происходит с обновлением, но этого было недостаточно.

В следующий раз мы будем сообщать о ходе обновления по максимально возможному количеству каналов, включая социальные сети, электронную почту, панель управления и веб-сайт!


Улучшенная координация с нашим поставщиком серверов

Для будущих обновлений мы будем стремиться к лучшей координации с нашим поставщиком услуг, чтобы обеспечить своевременное решение непредвиденных проблем. Это поможет нам более эффективно справляться с непредвиденными ошибками сервера.

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