У меня очень простая Saga, построенная на NSB7 с использованием SQL Транспорт и постоянство NHibernate.
Saga прослушивает очередь, и каждое полученное сообщение проходит через 4 обработчика. Они вызываются в последовательном порядке: два обработчика работают параллельно, а последний обработчик запускается только после завершения обоих параллельных обработчиков. Последний обработчик записывает запись в БД
Допустим, для одного сообщения каждый обработчик занимает 1 секунду. При получении нового сообщения, которое запускает Saga, ожидаемый результат заключается в том, что спустя 3-4 секунды запись записывается в БД.
Если очередь резервируется, скажем, на 1000 сообщений, как только они начинают обработку опять же, для создания новой записи в последнем обработчике требуется почти 2000 секунд. По сути, вместо прохождения ожидаемого времени обработки в 4 секунды для каждого сообщения, они эффективно объединяются в исходных обработчиках до тех пор, пока очередь не будет очищена, а затем делают это снова для следующего обработчика и далее.
Любой идеи о том, как я мог бы улучшить производительность этой системы, находясь под нагрузкой, чтобы постоянный поток обработанных сообщений заканчивался, а не группировался сообщениями и имелась большая задержка, прежде чем одна новая запись вышла на другую сторону?
Спасибо, Уилл