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

Сегодня мы представляем 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) |
Примечания к таблице:
- Время репликации на все периферийные узлы (на момент публикации их более 300)
- Время репликации во всех необходимых серверных хранилищах
- В классическом режиме мы не можем измерять задержку репликации с точностью до долей секунды
В основе 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 запускается в закрытой бета-версии. Мы рады начать сотрудничество с клиентами, которые хотят опробовать сервис, а затем открыть к нему доступ более широкой аудитории. Будем рады услышать ваши отзывы. Подать заявку на участие в закрытом бета-тестировании можно здесь. Расскажите, что вы создаёте!
