INTEGRITY Документация

Что такое Durable Objects?

Durable Object представляет собой особый вид Cloudflare Worker который уникальным образом объединяет вычисления и хранение данных. Как и Worker, Durable Object автоматически создается географически близко к месту первого запроса, быстро запускается при необходимости и завершает работу при простое. По всему миру их может быть миллионы. Однако, в отличие от обычных Workers:

Поэтому Durable Objects позволяют с состоянием бессерверных приложений.

Ключевые особенности Durable Objects

Durable Objects обладают свойствами, которые делают их отличным решением для распределённых масштабируемых stateful приложений.

Бессерверные вычисления без управления инфраструктурой

Хранилище, совмещённое с вычислениями

Однопоточный параллелизм

Эластичное горизонтальное масштабирование в глобальной сети Cloudflare

Возможности Durable Objects

Состояние в памяти

Каждый Durable Object имеет своё состояние в памяти. Приложения могут использовать это состояние в памяти для повышения производительности, храня важные данные прямо в памяти и полностью избегая обращений к постоянному хранилищу.

Состояние в памяти удобно использовать, например, для группировки и агрегирования данных перед их сохранением в хранилище, а также для немедленного отклонения или обработки входящих запросов, соответствующих определенным критериям, и в других подобных случаях.

Состояние в памяти сбрасывается, когда Durable Object переходит в спящий режим после периода бездействия. Поэтому важно сохранять данные из памяти в постоянное хранилище, если они могут понадобиться позже, когда Durable Object получит следующий запрос.

Storage API

Durable Object Storage API предоставляет Durable Objects доступ к быстрому, транзакционному и строго консистентному хранилищу. Хранилище, привязанное к Durable Object, доступно только его собственному экземпляру и недоступно другим объектам.

Существует два варианта storage API: API ключ-значение (KV) и SQL API.

При использовании новый бэкенд хранилища SQLite в Durable Objects, у вас есть доступ к обоим API. Однако при использовании прежнего бэкенда хранилища вам доступен только key-value API.

Alarms API

Durable Objects предоставляют Alarms API что позволяет запланировать пробуждение Durable Object в определённый момент в будущем. Это удобно, если вы хотите выполнять определённую работу периодически или в конкретный момент времени, не управляя вручную такой инфраструктурой, как собственные раннеры планирования заданий.

Вы можете сочетать Alarms с состоянием в памяти и API долговременного хранилища для создания пакетных и агрегирующих приложений, таких как очереди, workflows или сложные конвейеры обработки данных.

WebSockets

WebSocket представляют собой долгоживущие TCP-соединения, которые обеспечивают двустороннюю связь в реальном времени между клиентом и сервером. Поскольку сессии WebSocket долгоживущие, приложения часто используют Durable Objects для приема клиентского или серверного подключения.

Durable Objects служат единой точкой координации между Cloudflare Workers, поэтому один экземпляр Durable Object можно использовать вместе с WebSocket для координации нескольких клиентов, например участников чата или многопользовательской игры.

Durable Objects поддерживают Стандартный API WebSocket, а также WebSockets Hibernation API который расширяет стандартный веб-API WebSocket, снижая расходы за счет отсутствия платы за периоды неактивности.

RPC

Durable Objects поддерживают Workers Удалённый вызов процедур (RPC) что позволяет приложениям использовать нативные методы и объекты JavaScript для обмена данными между Workers и Durable Objects.

Использование RPC для взаимодействия упрощает разработку приложений, делает её более понятной и эффективной.

Акторная модель программирования

Ещё один способ описать Durable Objects и понять принцип их работы заключается в том, чтобы взглянуть на них через призму Акторная модель программирования ↗. Есть несколько известных примеров модели Actor, поддерживаемой на уровне языка программирования через runtime или библиотечные фреймворки, например Erlang ↗, Elixir ↗, Akka ↗, или Microsoft Orleans для .NET ↗.

Модель акторов существенно упрощает многие проблемы распределённых систем, абстрагируя взаимодействие между акторами через вызовы RPC (или обмен сообщениями), которые можно реализовать поверх любого транспортного протокола. Благодаря этому она позволяет избежать большинства проблем параллелизма, возникающих при работе с общей памятью, таких как гонки данных, когда несколько процессов или потоков одновременно обращаются к одним и тем же данным в памяти.

Каждый экземпляр Durable Object можно рассматривать как экземпляр модели Actor: он получает сообщения (входящие HTTP или RPC запросы), выполняет некоторую логику в своём однопоточном контексте, используя подключённое устойчивое хранилище или состояние в памяти, а затем отправляет сообщения во внешний мир (исходящие HTTP или RPC запросы либо ответы), в том числе другому экземпляру Durable Object.

Каждый Durable Object обладает определёнными возможностями с точки зрения того, сколько работы он может выполнить, что должно влиять на архитектуру для полноценного использования платформы.

Durable Objects нативно интегрированы в инфраструктуру Cloudflare и дают вам serverless платформу для создания распределённых stateful приложений с использованием всей сети Cloudflare.

Durable Objects в Cloudflare

Многие продукты Cloudflare используют Durable Objects. В некоторых технических статьях нашего блога показаны реальные примеры и сценарии использования, в которых Durable Objects упрощают разработку приложений.

Эти статьи в блоге также могут подсказать, как проектировать масштабируемые приложения на основе Durable Objects и как интегрировать их с остальной частью Cloudflare Developer Platform.

Наконец, следующие статьи в блоге помогут вам разобраться в некоторых технических аспектах реализации Durable Objects и в том, как они работают.

Начало работы

Начните прямо сейчас, воспользовавшись руководство «Get started» чтобы создать первое приложение с использованием Durable Objects.

Сноски

  1. В настоящее время хранилище на один Durable Object с SQLite составляет 1 GB. После перехода в общий доступ это значение будет увеличено до 10 GB. ↩