Производительность и надежность

Версия 1.11 от Alexandr Fokin на 2026/07/27 02:54

 Примеры
 
Технологические решения

Полная целостность.

TriggerEvent sql TransactionalInbox
+ TriggerEvent sql TransactionalOutbox
+ sql store.

Полная ACID целостность (отсутствие проблем), но меньшая пропускная способность из-за ограничений производительности sql БД. 
Меньшие гарантии

Использование меньших гарантий требует дополнительных проверок:

  • Дополнительные проверки условия -> обнаружения инцидента ложного сигнала.
    В случае обнаружения инцидента:
    • Попытка пересчитать временный счетчик (количество необработанных значений не менее N).
    • Реагирование на каждый поступающий сигнал (возможно с задержкой после срабатывания).
  • Страхующая проверка завязанная на таймер (периодическая) -> обнаружения инцидента потери сигнала.

Основывается на том, что вероятность исключительных ситуаций не велика.

  
Проблемы и риски при использовании меньших гарантий.
ТипПричинаПример
Потеря данных в хранилище.Падение ненадежного (например InMemory) хранилища.Потеря счетчика сигналов.
Потеря сигнала.Отправка TriggerEvent без sql TransactionalOutbox.TriggerEvent не был отправлен (no gracefull shutdown) / Счетчик не был изменен
-> Зависание обработки.
Ложный или дублирующий сигнал.Обработка TriggerEvent без sql TransactionalInbox.TriggerEvent был обработан более одного раза (event consumer reconnect, db transaction commited, broker message not commited) (network error, duplicate send) / Счетчик был уменьшен более чем на 1.
-> Ложное, преждевременное срабатывание триггера.
  
Выводы
  • Более производительные решения возможны только с использованием InMemory (NoSQL) хранилища. Что ведет к понижению надежности и отсутствию полного ACID.
  • Решение на основа только реляционной БД (SQL) не может гарантировать такой же высокий уровень производительности. Возможно смещение в сторону периодической перепроверки по таймеру (увеличение задержки между завершением работы и реакций на это).