Мы все сталкивались с медленной загрузкой веб-сайтов или с приложением, которое зависает, когда ему нужно вызвать API для обновления. Когда все происходит не мгновенно, ваши мысли отвлекаются на что-то другое...
Один из способов ускорить работу — максимально приблизить ресурсы к пользователю. Именно это Cloudflare осуществляет с вычислительными ресурсами, работая в миллисекундах от большей части населения мира. Но, как бы парадоксально это ни звучало, иногда приближение вычислений к пользователю может на самом деле замедлять работу приложений. Если вашему приложению необходимо подключиться к API, базам данных или другим ресурсам, которые не расположены рядом с конечным пользователем, может быть более эффективным запускать приложения поблизости от ресурсов, а не от пользователя.
Итак, сегодня мы рады представить Smart Placement (Интеллектуальное размещение) для Workers и Pages Functions, позволяющие максимально ускорить каждое взаимодействие. С помощью Smart Placement Cloudflare переносит бессерверные вычисления в Супероблако, перемещая вычислительные ресурсы в оптимальные местоположения для ускорения работы приложений. Самое лучшее здесь то, что это осуществляется полностью автоматически, без необходимости какого-либо дополнительного ввода (например, ужасного «региона»).
Интеллектуальное размещение уже сейчас доступно в открытой бета-версии для всех клиентов Workers и Pages!
Посмотрите нашу демонстрацию о принципе работы Smart Placement!
Бессерверный переход
Сеть Anycast Cloudflare создана для мгновенной обработки запросов и расположена близко к пользователю. Это то, что делает Cloudflare Workers, наше предложение бессерверных вычислений, для вас таким привлекательным, как для разработчика. Конкуренты ограничены «регионами», в то время как Workers работают повсюду, поэтому у нас есть один регион: Земля. Запросы, полностью обрабатываемые Workers, могут обрабатываться прямо тут же, даже без обращения к серверу-источнику.
Хотя изначально считалось, что такая концепция бессерверных вычислений предназначена для легких задач, в последние годы бессерверные вычисления претерпевают существенные изменения. Такое решение используется для замены традиционной архитектуры, которая опирается на серверы-источники и самоуправляемую инфраструктуру, а не просто для ее дополнения. Мы наблюдаем все больше и больше таких вариантов использования с пользователями Workers и Pages.
Состояние потребностей в отношении бессерверных систем
С переходом на бессерверные технологии и созданием целых приложений на Workers возникает потребность в данных. Хранение информации о предыдущих действиях или событиях позволяет создавать персонализированные интерактивные приложения. Допустим, вам нужно создать профили пользователей, сохранить, на какой странице пользователь остановился, какие SKU у пользователя есть в корзине — все это сопоставляется с точками данных, используемыми для хранения состояния. Сервисы серверной части, такие как реляционные базы данных, хранилища «ключ-значение», хранилище BLOB-объектов и API, позволяют создавать приложения с отслеживанием состояния.
Cloudflare вычисления + хранилище: мощный дуэт
У нас есть собственный растущий набор предложений хранилищ: Workers KV, Durable Objects, D1, R2. Совершенствуя наши продукты обработки данных, мы глубоко продумываем их взаимодействие с Workers, чтобы вам не пришлось этого делать! Например, еще один подход, который в некоторых случаях дает более высокую производительность, заключается в перемещении хранилища, а не вычислений рядом с пользователями. Если вы используете Durable Objects для создания игры в реальном времени, мы можем переместить Durable Objects, чтобы свести к минимуму задержку для всех пользователей.
Наша цель в отношении будущего состояния заключается в том, чтобы вы установили режим = "smart", и мы оценили оптимальное размещение всех ваших ресурсов без необходимости дополнительной настройки.
Cloudflare вычисления + ${backendService}
Сегодня основным вариантом использования Smart Placement (Интеллектуальное размещение) является использование для ваших приложений сервисов, отличных от Cloudflare, таких как внешние базы данных или сторонние API.
Многие серверные сервисы, независимо от того, размещаются они на собственных серверах или управляются, являются централизованными, а это означает, что данные хранятся и управляются в одном месте. Ваши пользователи глобальны, и Workers глобальны, но ваша серверная часть централизована.
Если ваш код отправляет несколько запросов к вашим сервисам сервисной части, они могут несколько раз пересекать земной шар, что серьезно сказывается на производительности. Некоторые сервисы предлагают репликацию и кэширование, которые помогают повысить производительность, но также сопряжены с такими компромиссами, как согласованность данных и более высокие затраты, которые следует взвесить с учетом вашего варианта использования.
Сеть Cloudflare находится на расстоянии ~50 мс от 95 % подключенного населения мира. Кроме того, мы находимся очень близко к вашим сервисам серверной части.
Производительность приложений — это удобство использования
Давайте разберемся, как перемещение вычислений ближе к сервисам серверной части может уменьшить сетевую задержку приложений, на следующем примере:
Допустим, у вас есть пользователь в Сиднее, Австралия, который получает доступ к приложению, работающему на Workers. Это приложение совершает три цикла обращения к базе данных, расположенной во Франкфурте, Германия, чтобы обслужить запрос пользователя.
Интуитивно можно догадаться, что узким местом будет время, которое требуется Worker для выполнения нескольких циклов обращения к вашей базе данных. Что, если бы Worker вызывался не рядом с пользователем, а в центре обработки данных, ближайшем к базе данных?
Давайте протестируем это.
Мы измерили продолжительность запроса для Worker без Smart Placement и сравнили ее с длительностью запроса с включенной функцией Smart Placement. Для обоих тестов мы отправили 3500 запросов из Сиднея на Worker, который совершает три цикла обращения к экземпляру Upstash (уровень бесплатного пользования), расположенному в eu-central-1 (Франкфурт).
Результаты очевидны! В данном примере перемещение Worker ближе к серверной части повысилопроизводительность приложения в 4–8 раз.
Сетевые решения не должны приниматься людьми
Как разработчик, вы должны сосредоточиться на том, что у вас получается лучше всего — создании приложений, не беспокоясь о сетевых решениях, которые ускорят ваше приложение.
Cloudflare обладает уникальным выгодным позиционированием: наша сеть собирает аналитические данные об оптимальных путях между пользователями, центрами обработки данных Cloudflare и внутренними серверами. У нас большой опыт в этой области с Argo Smart Routing (Интеллектуальная маршрутизация по технологии Argo). Интеллектуальное размещение учитывает эти факторы, чтобы автоматически размещать ваш Worker в наилучшем месте, чтобы свести к минимуму общую продолжительность запроса.
Итак, как работает Smart Placement?
Smart Placement можно включить отдельно для каждого Worker на вкладке “Settings” (Настройки) или в файле wrangler.toml:
[placement]
mode = "smart"
После включения Smart Placement в Worker или Pages Function алгоритм Smart Placement анализирует запросы на выборку (также известные как подзапросы), отправляемые вашим Worker, в режиме реального времени. Затем он сравнивает их с данными о задержке, агрегированными нашей сетью. Если мы обнаружим, что в среднем ваш Worker отправляет более одного подзапроса к ресурсу серверной части, тогда ваш Worker будет автоматически вызван из оптимального центра обработки данных!
Есть некоторые сервисы сервисной части, которые по уважительной причине не учитываются алгоритмом Smart Placement:
Глобально распределенные сервисы: если сервисы, с которыми взаимодействует ваш Worker, географически распределены во многих регионах, Smart Placement не подходит. Мы автоматически исключаем их из оптимизации Smart Placement.
Сервисы аналитики или журналирования: запросы к сервисам аналитики или журналирования не обязательно должны находиться на критическом пути вашего приложения.
WaitUntil()
следует использовать, чтобы ответ пользователям не блокировался при инструментировании вашего кода. Посколькуметод waitUntil()
не влияет на продолжительность запроса с точки зрения пользователя, мы автоматически исключаем сервисы аналитики/журналирования из процесса оптимизации Smart Placement.
В нашей документации приведен список сервисов, не учитываемых алгоритмом Smart Placement.
Как только Smart Placement начнет функционировать, вы сможете увидеть новую вкладку “Request Duration” (Продолжительность запроса) в вашем Worker. Мы направляем 1 % запросов без включенного Smart Placement, чтобы вы могли увидеть его влияние на продолжительность запроса.
И да, это действительно так просто!
Попробуйте Smart Placement, ознакомившись с нашей демонстрацией (с ней очень весело играть!). Чтобы узнать больше, посетите раздел с нашей документацией для разработчиков.
Что дальше с Smart Placement?
Мы только начинаем! У нас есть множество идей по улучшению Smart Placement:
Поддержка расчета оптимального местоположения, когда приложение использует несколько серверных частей
Точно настроенное размещение (например, если ваш Worker использует несколько серверных частей в зависимости от пути. Мы рассчитываем оптимальное размещение для каждого пути, а не для каждого Worker)
Поддержка соединений на основе TCP
Мы хотели бы узнать ваше мнение! Если у вас есть отзывы или пожелания, обращайтесь через Cloudflare Developer в Discord.