Введение

Runnev — это потоковая передача событий по обычному HTTP. Поток — это упорядоченный надёжный журнал, адресуемый по base62-идентификатору. Вы публикуете в него пакеты через POST и вычитываете их обратно долгоживущим GET, который потоково отдаёт server-sent events.

Ментальная модель

Один издатель дописывает пакеты в поток. Каждый пакет попадает под монотонно возрастающий номер (sequence). Любое число подписчиков читают поток независимо, каждый держит свой курсор — это просто номер последнего увиденного им пакета. Отключившийся подписчик переподключается со своим курсором и продолжает ровно с того места, где остановился.

поток данных
publisher --POST /v1/streams/{id}/{seq}-->  +------------- stream {id} -------------+
                                            |  ... 41821  41822  41823  41824(head)|
                                            +---+-------------+--------------+-----+
                    GET (Accept: text/event-stream), each at its own cursor   |
                          |             |              |                      |
                       sub A          sub B          sub C                 sub D
                      cursor 41824   cursor 41822   cursor 40010          cursor head

Это вся модель. Нет обменника, нет ключа маршрутизации, нет группы потребителей, которую нужно настраивать. Поток — это журнал; издатели пишут в его голову; читатели двигают курсор вперёд.

Когда использовать Runnev

Runnev подходит, когда нужно передать упорядоченный поток событий через сеть, которую вы не полностью контролируете:

  • Разослать доменные события (заказы, задачи, телеметрию) нескольким независимым читателям.
  • Доставлять живые обновления в браузеры, мобильные приложения или serverless-функции, которые не могут держать сырой сокет.
  • Связать бэкенд с воркерами, которые приходят и уходят и должны возобновляться, не теряя своё место.
  • Гнать firehose в аналитический приёмник, который иногда отстаёт и догоняет с курсора.

Когда не стоит его использовать

Это неподходящий инструмент, когда вам нужна семантика очереди:

  • Подтверждение каждого сообщения и повторная доставка конкретному воркеру. У Runnev нет подтверждений на потребителя. Используйте очередь задач.
  • Конкурирующие потребители, каждый из которых забирает свой кусок работы из одной общей очереди. Runnev доставляет весь поток каждому подписчику.
  • Строгая обработка exactly-once без дедупликации на вашей стороне. Runnev — не менее одного раза с идемпотентными записями; дедупликация — это проверка в одну строку, но это ваша проверка.

Четыре операции

Вы хотитеВы вызываетеДокументация
Создать потокPOST /v1/streamsПотоки
Дописать пакетPOST /v1/streams/{id}/{seq}Публикация
Читать потокGET /v1/streams/{id}Подписка
Повторить один пакетGET /v1/streams/{id}/batches/{seq}Справочник API

Впервые здесь? Быстрый старт проведёт вас от нуля до работающего подписчика за несколько минут.