← Cloudflare Waiting Room / waiting-room
Обзор
Waiting Room ставит посетителей в очередь, когда трафик приближается к заранее заданному порогу, превышение которого могло бы привести к сбою приложения.
Путь пользователя
После того как вы создали и активировали зал ожидания для конкретной страницы приложения:
-
Если страница не испытывает высокой нагрузки, посетитель попадает на неё напрямую.
-
Если трафик страницы приближается к порог, заданный пользователем, посетитель попадает в виртуальный зал ожидания и остаётся там, пока не подойдёт его очередь получить доступ к странице:
- Каждый пользователь получает cookie чтобы управлять динамическим выпуском запросов из Waiting Room к сайту-источнику в Первым пришёл, первым обслужен (FIFO) порядке.
- Пока пользователь находится в зале ожидания, его браузер автоматически обновляется каждые 20 секунд, показывая актуальное расчётное время ожидания.
- Когда пользователь покидает зал ожидания и попадает в приложение, он может выйти и снова войти, не дожидаясь времени, заданного параметром длительность сессии.
- Поскольку залы ожидания поддерживают динамический приток трафика и выпуск, новые места освобождаются быстрее, а расчётное время ожидания становится меньше и точнее.
Архитектура
Waiting Room построен на Workers который работает на глобальной сети дата-центров Cloudflare.
Когда запрос поступает на хост или путь, охваченный Waiting Room, он направляется в Waiting Room Worker ближайшего географически дата-центра. Worker должен решить, отправить пользователя в очередь или на сайт.
Это решение, в свою очередь, зависит от двух факторов: пороговые значения, заданные администратором и состояние Waiting Room.
Для пороговых значений, заданных администратором, важны два показателя: total active users и new users per minute:
-
total active usersзадаёт целевой порог одновременных пользователей, которых вы хотите допускать на страницы, охваченные Waiting Room. -
new users per minuteзадаёт целевой порог максимальной скорости притока пользователей на ваш сайт в минуту.
Резкий всплеск любого из этих значений может привести к постановке в очередь. Ещё один параметр, влияющий на то, как мы рассчитываем the total active users это session duration. Пользователь считается активным в течение session duration минут с момента запроса к любой странице, охваченной Waiting Room.
Второй фактор: состояние Waiting Room, которое поддерживается на уровне локального дата-центра и при этом постоянно меняется в зависимости от трафика по всему миру. Каждый дата-центр работает со своим собственным состоянием Waiting Room. Это состояние представляет собой снимок картины трафика сайта по всему миру, актуальный на данный момент времени. Преимущество такого подхода, то есть принятия решений на уровне Worker, в том, что решения принимаются без существенной задержки для запроса. Алгоритм Waiting Room динамически выделяет каждому Worker определённое количество доступных слотов на основе состояния Waiting Room. Постановка в очередь начинается, когда слоты в рамках Worker заканчиваются. Отсутствие дополнительной задержки позволяет клиентам держать зал ожидания включённым постоянно, не беспокоясь о дополнительной задержке для своих пользователей.
Состояние Waiting Room обновляется глобальной информацией каждые несколько секунд. У нас настроен конвейер в Cloudflare Durable Objects который обеспечивает распространение изменений трафика по всему миру. Такая архитектура гарантирует, что мы не добавляем задержек и принимаем решения максимально близко к реальному времени.
Более подробную информацию об архитектуре и причинах принятых решений см. в нашем подробный технический блог ↗.