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