Skip to content

Latest commit

 

History

History
25 lines (20 loc) · 2.61 KB

CONCEPT.md

File metadata and controls

25 lines (20 loc) · 2.61 KB

Концепция: небольшая надёжная очередь

Версия 0.1.0. Работа начата 23 октября, завершение — 24 октября 2026 года. Задача: принять события, обработать их несмотря на повторную доставку и падение процесса, показать проблемные сообщения отдельно. Это учебная реализация на Python 3.12/SQLite, не промышленный брокер и не заявление о коммерческом опыте.

Я выбрал локальную очередь, чтобы изучить восстановление после сбоев. Использую Linux/Windows, локальная БД, конечные команды, синтетические JSONL и нулевые внешние зависимости. Предыдущий новый проект использовал dbt; здесь главный навык — обработка событий.

Критерии: дубль не меняет сумму; конфликт откатывает всю партию; один event не выдаётся двум клиентам одновременно; просроченный worker не подтверждает новую выдачу; после аварии между INSERT и COMMIT частичного эффекта нет, событие возвращается в работу; после бюджета из трёх выдач сообщение dead; redrive сохраняет номер выдачи монотонным и не меняет payload. Демонстрация: 3 done, 1 dead, 17000 копеек.

Архитектура: messages + effects в одном файле SQLite; BEGIN IMMEDIATE для изменений, короткая транзакция INSERT эффекта + ACK. Плохой бизнес-payload идёт в логическую DLQ (state=dead), не блокирует остальные независимые события.

Не входят: HTTP, daemon, распределённая доставка, брокер Kafka/RabbitMQ, общая гарантия exactly-once для внешних систем, сетевой файловый ресурс и автоматическое удаление выполненных событий. Следующие шаги — наблюдаемость, backoff с jitter, схемные миграции; внешний брокер выбирать при реальной потребности в распределении.