Массовый параллелизм

#asp.net-core #masstransit

#asp.net-ядро #массовый переход

Вопрос:

Мы уже некоторое время используем массовый транзит, и у нас есть несколько вопросов о том, как работает параллелизм. Мы используем шаблон конкурирующего потребителя, чтобы извлекать сообщения из очереди и выполнять некоторую обработку. Мы заметили, что увеличение количества процессов повышает производительность в отличие от увеличения потоков. Так, например, 4 процесса с 2 параллельными потоками, каждый из которых дает лучшую производительность, чем 2 процесса с 4 параллельными потоками.

Я думаю, что мы, возможно, немного путаемся с асинхронностью. Работа, которую мы выполняем в потребителе, — это синхронный вызов COM, который мы вызываем в потоке. Возможно, нам потребуется исследовать это дальше.

Итак, вопрос в том, ожидается ли, что мы получим лучшую производительность с несколькими потребителями, в отличие от потоков. Мы только недавно добавили метрики, но не уверены, на что нам следует обратить внимание, чтобы найти возможный ответ.

Комментарии:

1. Что вы называете процессом? потребитель?

2. В зависимости от транспорта вы можете настроить количество предварительных выборок и / или максимальное количество одновременных вызовов на конечную точку приема, чтобы увеличить количество обрабатываемых активных сообщений. Значения по умолчанию являются консервативными, основанными на количестве ядер процессора.

3. Итак, мы немного поиграли с количеством предварительных выборок и максимальным количеством одновременных вызовов. Мы не уверены, что поняли, как это влияет на производительность. Мы понимаем, что слишком большое количество предварительной выборки может привести к тому, что у конкурирующих потребителей не будет никакой работы, в то время как несколько потребителей, возможно, получили все оставшиеся сообщения. Мы экспериментировали с увеличением максимального количества одновременных вызовов, но не совсем понимаем, почему 1 потребитель, допустим, с 16 максимальными одновременными вызовами, не так эффективен, как, скажем, 8 конкурирующих потребителей, допустим, максимум с 2 одновременными вызовами.

4. Что делает потребитель? Потребители с большим количеством процессоров будут масштабироваться лучше, чем когда вы достигнете количества ядер.

5. На самом деле потребитель вызывает COM-объект (устаревший код). Работа представляет собой смесь доступа к процессору и базе данных.