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

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

 Примеры
 
Риски
ТипПричинаПример
Потеря данных в хранилище.Падение ненадежного (например InMemory) хранилища.Потеря счетчика сигналов.
Потеря сигнала.Отправка TriggerEvent без sql TransactionalOutbox.TriggerEvent не был отправлен / Счетчик не был изменен
-> Зависание обработки.
Ложный или дублирующий сигнал.Обработка TriggerEvent без sql TransactionalInbox.TriggerEvent был обработан более одного раза / Счетчик был уменьшен на более чем 1
-> Ложное, преждевременное срабатывание триггера.
  
Инструменты
TriggerEvent sql TransactionalInbox + TriggerEvent sql TransactionalOutbox + sql store.Полня ACID целостность (отсутствие рисков), но меньшая пропускная способность из-за sql БД. 
 

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

  • Дополнительные проверки условия для обнаружения ложного сигнала.
  • Страхующая проверка завязанная на таймер для обнаружения зависания обработки.
  
Выводы
  • Более производительные решения возможны только с использованием InMemory (NoSQL) хранилища. Что ведет к понижению надежности и отсутствию полного ACID.
  • Решение на основа только реляционной БД (SQL) не может гарантировать такой же высокий уровень производительности. Возможно смещение в сторону периодической перепроверки по таймеру (увеличение задержки между завершением работы и реакций на это).