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