Rivet — открытая альтернатива Durable Objects для stateful-приложений

03 Aug, 2026
5,801
🔱 204
👥 15

Когда вам в последний раз приходилось писать сложную логику для поддержания состояния между запросами в serverless-архитектуре? Рискну предположить, что это было не так давно. Именно эту проблему решает Rivet — open-source проект, который делает работу с долгоживущими процессами такой же простой, как и с обычными функциями.

Что такое Rivet и кому он нужен?

Rivet позиционирует себя как альтернативу Cloudflare Durable Objects, но с открытым исходным кодом и возможностью самоличного хостинга. Основная идея — предоставить разработчикам инструмент для создания stateful-приложений, которые:

  • Сохраняют состояние между вызовами
  • Масштабируются автоматически
  • Поддерживают real-time взаимодействие
  • Работают с минимальной задержкой

Проект особенно полезен для:

  • Разработчиков multiplayer-игр
  • Создателей чат-приложений
  • Инженеров, работающих с collaborative editing (например, Google Docs-подобные редакторы)
  • Разработчиков систем реального времени (IoT, биржевые тикеры и т.д.)

Ключевые возможности Rivet

1. Долгоживущие процессы с сохранением состояния

В отличие от традиционных serverless-функций, которые "забывают" свое состояние между вызовами, Rivet Actors сохраняют его в памяти и на диске. Это как если бы ваш AWS Lambda мог помнить данные между вызовами без необходимости каждый раз обращаться к внешней базе данных.

2. Встроенная поддержка real-time

Rivet из коробки предоставляет WebSockets и Server-Sent Events (SSE), что делает его идеальным выбором для приложений, требующих мгновенного обновления данных. Больше не нужно поднимать отдельные сервисы для real-time функциональности.

3. Автомасштабирование без головной боли

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

4. Отказоустойчивость

Rivet автоматически обрабатывает ошибки и восстанавливает состояние после сбоев. Ваши процессы не пропадут, даже если что-то пойдет не так.

Технические детали

Под капотом Rivet использует:

  • Rust для ядра системы (обеспечивает высокую производительность)
  • FoundationDB для хранения состояния
  • NATS для pub/sub взаимодействия
  • Valkey (форк Redis) для кэширования
  • ClickHouse для мониторинга

Архитектура состоит из нескольких ключевых компонентов:

  1. Pegboard — оркестратор акторов
  2. Guard — прокси для маршрутизации трафика
  3. Chirp — workflow-движок

Практическое применение: где Rivet действительно сияет

В репозитории есть несколько отличных примеров:

  1. Чат-комната — классический пример real-time приложения
  2. Мультиплеерная игра — демонстрирует синхронизацию состояния между игроками
  3. Совместное редактирование документов на базе Yjs (CRDT)
  4. AI-агент с сохранением контекста между запросами

Особенно впечатляет пример с локальной синхронизацией данных — он показывает, как Rivet может использоваться для создания offline-first приложений с последующей синхронизацией при появлении соединения.

Стоит ли попробовать?

Если вы:

  • Устали от сложностей с поддержанием состояния в serverless-архитектуре
  • Разрабатываете real-time приложения
  • Хотите иметь контроль над инфраструктурой (возможность самоличного хостинга)
  • Работаете над проектами, где важна низкая задержка

— то Rivet определенно заслуживает вашего внимания.

Проект активно развивается (на момент написания статьи у него уже 4.2k звезд на GitHub) и имеет активное сообщество в Discord. Для начала работы можно использовать RivetKit — легковесную TypeScript-библиотеку, которая работает как с Redis, так и с полной версией Rivet Engine.

Ссылки для старта:

P.S. Лично мне особенно нравится, как Rivet сочетает мощь enterprise-решений с простотой разработки. Это редкий случай, когда сложные distributed-системы становятся доступными для обычных разработчиков.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.