Темы



Представляем Workers KV Instant — на базе Quicksilver

Коротко сгенерировано ИИ по тексту статьи
  • KV Instant использует Quicksilver v2 и API Workers KV; сервис сегодня запущен в закрытой бета-версии.
  • Задержка чтения p99 — менее 2 мс, а 99% записей распространяются примерно за 250 мс.
  • Чтение на 60% дешевле классического Workers KV, но хранение и операции класса A обходятся дороже.

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

01M3VEK5CZPP518SSR4GMX7CJ0.01M3VEK5ZY7PD7P6Q6ZA4MGAGS.png

Сегодня мы представляем Workers KV Instant — новый режим Workers KV, который мгновенно распространяет изменения по всему миру, не допуская задержек при чтении из-за холодного старта.

Workers KV — одна из самых популярных служб нашей платформы для разработчиков с момента запуска на Неделе дня рождения в 2018 году. Она отлично подходит для быстрого доступа к таким данным, как статические ресурсы и пользовательские настройки, которые записываются редко, но часто читаются. Мы сами используем её во многих продуктах Cloudflare.

У нас есть и другое хранилище «ключ — значение» — Quicksilver. С момента его представления в 2020 году мы не раз писали о нём в блоге. Мы разработали Quicksilver для невероятно быстрой глобальной репликации и доступа с низкой задержкой. Практически каждый запрос к Cloudflare обращается как минимум к одному ключу в Quicksilver. Клиенты годами просили нас открыть им доступ к Quicksilver, но мы этого так и не сделали.

Сегодня мы меняем это с запуском Workers KV Instant. В режиме KV Instant доступен тот же API, что и в Workers KV, но в основе сервиса лежит Quicksilver. KV Instant обеспечивает чтение с p99 в 100 раз быстрее и мгновенное применение обновлений — ждать истечения TTL не нужно. Режим подходит не для любых данных, но особенно хорош для редко обновляемых данных конфигурации приложений — именно для этого мы сами используем Quicksilver.

Чтение в 100 раз быстрее, чем в Workers KV

Задержка чтения в KV Instant более чем в 100 раз меньше, чем в классическом режиме: даже для 99-го перцентиля времени ответа (p99) она составляет менее двух миллисекунд, а показатели 95-го перцентиля (p95) измеряются микросекундами. Записи распространяются по периферийным узлам более чем в 20 раз быстрее: 99% всех записей реплицируются примерно за 250 мс.

Благодаря высокой производительности KV Instant идеально подходит для чтения данных в критическом пути приложений, особенно флагов и настроек, которые должны становиться доступны по всему миру практически сразу после записи.

Режим

Чтение p99 (с кэшированием)

Чтение p99 (все запросы)

Медианное время репликации записей

Репликация записей p95

Репликация записей p99

Instant

Н/Д

1,62 мс

107 мс (1)

181 мс (1)

256 мс (1)

Classic

160 мс

287 мс

< 1 с (2, 3)

< 1 с (2, 3)

4,38 с (2)

Примечания к таблице:

  1. Время репликации на все периферийные узлы (на момент публикации их более 300)
  2. Время репликации во всех необходимых серверных хранилищах
  3. В классическом режиме мы не можем измерять задержку репликации с точностью до долей секунды

В основе KV Instant лежит Quicksilver v2 — разработанное внутри Cloudflare хранилище «ключ — значение», созданное для быстрой глобальной репликации и доступа с низкой задержкой в масштабах всей планеты.

Такой же простой API, как в Workers KV: get (), put (), list (), delete ()

В KV Instant используется привычный API Workers KV, с которым вы работаете уже сегодня.

Представим, что вы готовите крупный запуск продукта и вам нужно в 10:13 утра, когда о продукте объявят на сцене во время презентации, переключить содержимое главной страницы. Вам нужен ключ, который можно читать при каждом запросе независимо от нагрузки, с практически нулевой задержкой, и который мгновенно обновляется при изменении.

async fetch(request, env, ctx) {
  // Read the launch flag from KV Instant on every request
  const launched = (await env.APP_CONFIG.get("new-product-launched")) === "true";

  if (launched) {
    // Serve the launch homepage
    return new Response({...});
  }

  return new Response({...});
},

Большинство операций привязки совместимы с аналогичными операциями в классическом Workers KV. При работе с KV Instant есть три ключевых отличия:

  • При создании пространства имён KV необходимо указать режим KV Instant (передать атрибут ”mode”: "instant”).
  • Метаданные не поддерживаются, поэтому вызовы getWithMetadata всегда возвращают null, а передавать метаданные в put нельзя.
  • Операции list в KV Instant возвращают все подходящие ключи в пространстве имён; разбиения на страницы нет.

Дополнительные примеры работы с API см. в документации Workers KV.

Цены — чтение на 60% дешевле, чем в классическом Workers KV

Цены на KV Instant рассчитаны на задачи с небольшим объёмом данных, где преобладает чтение, — именно с ними сервис справляется особенно хорошо. Поскольку мы распространяем данные во все локации Cloudflare, используя то же хранилище «ключ — значение» Quicksilver, работу с которым мы годами оттачивали до масштабов критического пути каждого запроса, мы можем предложить чтение на 60% дешевле, чем в Workers KV, и значительно дешевле, чем в других глобальных сервисах конфигурации.

Зато хранение данных и операции класса A обходятся значительно дороже, чем в Workers KV. Если вам нужно хранить большие объёмы данных или часто их обновлять, Workers KV по-прежнему отлично подойдёт. Каждый режим рассчитан на совершенно разные типы данных и сценарии доступа.

Стоимость пространств имён KV Instant рассчитывается по трём параметрам: хранение данных, операции класса A и операции класса B.

Операции класса B (чтение)

Операции класса A (put, delete, list)

Хранение

Workers KV Instant

0,20 доллара за миллион

0,10 доллара за операцию

100 долларов за МБ в месяц

Workers KV

0,50 доллара за миллион

5,00 доллара за миллион

0,50 доллара за ГБ в месяц

Хранение

Стоимость хранения составляет 100 долларов за МБ в месяц. Размер каждого ключа может достигать 300 байт, а значения могут быть любого размера, если общий объём пространства имён не превышает одного мегабайта. В пространствах имён KV Instant может содержаться до 10 000 пар «ключ — значение» любого типа.

Операции класса A

Операции класса A (put, delete и list) стоят 0,10 доллара за операцию. Запись или удаление каждого ключа считается одной операцией класса A. Каждый запрос списка считается одной операцией класса A независимо от того, сколько ключей возвращено в ответе. Одна операция list может вернуть все пары «ключ — значение» в пространстве имён на одной странице.

Поскольку записи должны проходить через единую систему учёта, KV Instant также ограничивает частоту записи: не более одной записи в пространство имён в секунду. Это похоже на ограничение классического Workers KV — одна запись на ключ в секунду — и упрощает определение порядка обновлений в приложении.

Операции класса B

Операции класса B (get) стоят 0,20 доллара за миллион запрошенных ключей — на 60% дешевле, чем в режиме Workers KV по умолчанию. Если в одной операции get запрашивается несколько ключей, каждый из них тарифицируется как одна операция класса B. Например, в обоих приведённых ниже случаях выполняются три операции класса B, поэтому с точки зрения тарификации варианты равнозначны.

// Requesting keys via three individual get operations 
// incurs three Class B operations.
let routeAPAC = await APP_CONFIG.get("route_APAC");
let routeEUR = await APP_CONFIG.get("route_EUR");
let routeNAMER = await APP_CONFIG.get("route_NAMER");

// Requesting three keys in a single get operation 
// also incurs three Class B operations.
let routes = await APP_CONFIG.get(["route_APAC", "route_EUR", "route_NAMER"]);

Workers KV Instant доступен в закрытой бета-версии

Сегодня KV Instant запускается в закрытой бета-версии. Мы рады начать сотрудничество с клиентами, которые хотят опробовать сервис, а затем открыть к нему доступ более широкой аудитории. Будем рады услышать ваши отзывы. Подать заявку на участие в закрытом бета-тестировании можно здесь. Расскажите, что вы создаёте!

© Cloudflare Blog