Комментарии 15
Ничего не понятно, но очень интересно.
🤝 Тоже мало что понял, особенно про PostgreSQL и как он относится к теме. «Яд» это, наверное, что-то похожее на poisoning в очередях сообщений (сообщение, которое не потребляется, а только тратит ресурсы обработчиков на попытки его потребить). Обычно, настраивают очередь так, чтобы по истечение срока нахождения в очереди (TTL), такое сообщение переносилось в error queue, где разбиралось вручную. Или настраивают селекторы, чтобы обработчик не пытался потребить сообщение, которое не может обработать.
Может автор немного упростит статью, опишет что значат термины и статья станет понятнее непосвященным 🙂
create index on outbox (status, next_retry_at);
Такой индекс работает?
Да, создастся, но толку мало. Лучше отдельные частичные индексы под new и failed - так быстрее работает
И на какую нагрузку рассчитано всё это? Очередь в postgres довольно узкое место будет
Да, это скорее буфер, а не очередь навсегда. Для десятков тысяч событий в минуту норм, выше - уже надо думать про шардирование или отдельный брокер
Просто если речь про rps < 1000, то о какой деградации идёт речь? На таких объёмах проще все синхронно делать не те объёмы. Если же rps > 1000 то с постгресом тут будет очень сложно. Проще outbox сделать в rabbit, а уже оттуда при чтении делать несколько транзакций в разных системах хоть синхронно хоть асинхронно. Outbox на базе очень узкоспециализированный кейс.
Ах да и самое главное не нужно менять синхронный контракт на асинхронный только для того чтобы сделать систему устойчивой. Начать хотя бы с того что теряется обратная связь, кривая обработка ошибок, попытки сделать обработку ответов в обратном топике. Для этого есть готовые подходы например cb, грамотные ретраи и другое. На хабре про это тонны материала.
"Деградация с честью" - похоже, ещё никто до этого так не обзывал graceful degradation... Можно было бы написать плавная, изящная.
а можно ли обойтись kafka вместо rabbitmq? managed rabbitmq особо не наблюдается в облаках в отличие от kafka
зачем экспоненциальный ретрай в бд слать? этож не стейт, а так, бихевиор, и если паблишер снова с нуля начнет ничего не рухнет...Ну на край уж редис можно...но не субд же...
RabbitMQ как инструмент «деградации с честью»