Пять лет покупка сервера здесь занимала в медиане три минуты двадцать секунд — от webhook-уведомления об оплате до учётных данных в вашем почтовом ящике. Никто не жаловался. Это было быстрее, чем у большинства в отрасли, и значительно быстрее, чем то, что требует одобрения человека.
Но это также были четыре последовательных шага, которым нечего было делать последовательными, и как только вы это замечаете, вы не можете перестать это замечать. Переписанная версия вышла в марте, и медиана теперь составляет сорок семь секунд, а 95-й процентиль — чуть меньше четырёх минут.
Как работала старая схема
| Шаг | Медиана | Что происходило |
|---|---|---|
| Копирование образа | 84 с | Загрузка образа диска из локального хранилища сайта на целевой узел |
| Создание тома | 31 с | Выделение и форматирование NVMe-тома |
| Выделение адреса | 46 с | Взятие блокировки на пул адресов сайта, выбор IPv4, запись reverse DNS |
| Первая загрузка и cloud-init | 39 с | Генерация ключей, расширение файловой системы, отправка почты |
Четыре шага, один глобальный пул воркеров и блокировка на пул адресов, за которой должны были стоять в очереди все заказы в пределах одного сайта. В тихий вторник это работало нормально. Во время акции или в час после того, как крупный клиент скриптом создал сорок серверов, медиана удваивалась, а хвост затягивался до двенадцати минут.
Что мы изменили
Образы предварительно разворачиваются, а не копируются. Каждый узел содержит базу тонких клонов для каждого образа из каталога, обновляемую еженощно. Создание тома теперь — это клон с копированием при записи с локального зеркала NVMe Gen4, а не сетевая загрузка. Этот шаг сократился с восьмидесяти четырёх секунд до менее чем двух.
Адреса резервируются заранее. Каждый сайт поддерживает тёплый пул выделенных адресов с уже записанным reverse DNS, рассчитанный примерно на шесть часов спроса этого сайта. Выделение теперь — это извлечение из готового пула, а не блокировка, сканирование и запись DNS. Сорок шесть секунд стали примерно четырьмястами миллисекундами.
Очереди теперь на уровне сайта. Наплыв во Франкфурте больше не замедляет создание в Сан-Паулу. Это звучит очевидно, но так не было задумано изначально, потому что исходная архитектура была рассчитана на четыре сайта и одного инженера.
Воркеры идемпотентны и возобновляемы. Каждый шаг имеет ключ, поэтому падение воркера на середине оставляет возобновляемую задачу, а не полуготовый экземпляр и тикет в поддержку. Ручное вмешательство в неудачное создание упало с примерно одного заказа из четырёхсот до одного из девяти тысяч.
Результат
| Метрика | До | После |
|---|---|---|
| Медиана | 3 мин 20 с | 47 с |
| 95-й процентиль | 12 мин 10 с | 3 мин 56 с |
| 99-й процентиль | 41 мин | 8 мин 20 с |
| Неудачные создания, требующие ручного вмешательства | 1 из 400 | 1 из 9 000 |
| Конкурентность на сайт до сдвига медианы | 6 | 90 |
Что пошло не так по пути
В марте в течение одиннадцати часов ночное обновление баз тонких клонов молча отказывало на четырёх сайтах, и предварительно развёрнутый образ Debian содержал точечный релиз, устаревший на девять дней. Из него было создано около девяноста экземпляров. Ни один из них не был сломан каким-то интересным образом, поскольку устаревший точечный релиз — это всегда одно обновление пакетов до актуального, но покупатель сервера не должен ничего проверять.
Мы пересобрали затронутые экземпляры по запросу, написали всем девяноста — независимо от того, просили ли они — и добавили проверку, сравнивающую хэш базового образа с каталогом, прежде чем узлу будет разрешено обслуживать создание. Тихий сбой в ночной задаче — это самая скучная из возможных причин, и о ней стоит написать именно потому, что она скучна.
Что всё ещё медленное
- Установки из кастомных ISO. По-прежнему вручную, по-прежнему занимают десятки минут, обычно завершаются в течение часа. Узкое место — человек, подтверждающий, что образ делает то, что заявлено его загрузчиком.
- Windows. Активация лицензии добавляет две-три минуты и не находится под нашим контролем.
- Выделенные серверы. Тот же день, а не та же минута. Физическая машина требует физической пересборки, и мы предпочитаем честно назвать срок, чем запускать таймер, который не можем побить.
- Делегирование IPv6 /48. Вручную на трёх сайтах, где конфигурация сети старая. Исправляется медленно.
Почему мы остановились здесь
Мы могли бы снизить медиану до примерно двадцати секунд, если бы держали экземпляры предварительно загруженными и просто передавали вам один по факту оплаты. Это означает удержание простаивающих мощностей, то есть оплату ядер, которые никто не использует, то есть повышение цен для всех, чтобы новые заказы стали быстрее на одиннадцать секунд.
Сорок семь секунд — это достаточно мало, чтобы ограничением стала цепочка подтверждения вашего платежа, а не что-то с нашей стороны. Оптимизация сверх того, что замечает клиент, — это хобби, а не инженерия.