Комментарии 7
Теоретическую часть изложили доходчиво, а вот практическая какая-то скомканная получилась.
Посылка подтверждений о получении/отправке сообщений, как правило реализуется на уровне брокера (Matt, RabbitMq), у вас ещё они тип подтверждений. На уровне логики приложений реализован?
Очередность сообщений как правило тоже реализуется на уровне приложений, за счёт добавления номера сообщения, которые клиент может проверить, так как гарантии на уровне брокера не всегда соблюдаются. И не смотря на гарантию очередности сообщений, например в AMQP протоколе, были случаи когда они в неправильной очередности приходили.
Спасибо за комментарий. Да, все верно, чаще всего порядок событий реализуется на стороне клиентов, но есть варианты когда брокер предоставляет механики для соблюдения порядка, такие как шардирование по ключу для помещения событий одной сущности в одну партицию, эксклюзивный консьюминг, когда только один консьюмер читает соответствующий топик и т.п.
Статья дает общий обзор существующих гарантий и какие причины могут приводить к их нарушениям или сложности в поддержании.
Я говорил о протоколе AMQP, который используется в RabbitMq (хотя там могут и другие использоваться) он гарантирует очередность доставки сообщений. Это его фишка. Но на практике «не все так однозначно», как я писал сам был свидетелем бага когда очередность сообщений менялась. Причём это было на стороне биржи, так что все клиенты были счастливы когда торговая информация стала не в том порядке приходить :)
Ключевая причина всех этих бед заключается в том, что события не являются состоянием. И всякие кафки исправляют это недоразумение путём превращения событий в состояние, которое уже можно без проблем реплицировать. Если сразу забыть про события и думать в терминах реплицируемого состояния, то архитектура становится гораздо проще, а все эти проблемы просто исчезают.
Спасибо за статью.
А на базе какого продукта у вас построена внутренняя шина данных? Или своя разработка (если да,то на каком языке)?
Семантики доставки событий в распределенных системах