Рабочие роли Azure. Наиболее оптимальный способ объединения данных в памяти?

У меня есть X рабочих ролей, которые будут обрабатывать очереди Azure, используя несколько потоков. Данные, которые поступают в эти очереди, довольно просты (для этого Client_ID у нас есть действие A, B или C, одно действие на транзакцию), но их будет много, более 5000 транзакций в секунду. Теперь мне нужно агрегировать их в формате, который показывает Client_ID, 43 транзакции типа A, 20 для B и 11 для C. В основном их суммируем. Но GetMessages в очереди может извлечь только 32 сообщения из очереди.

У меня вопрос: должен ли я продолжать получать 32 в то время, пока я не скажу 1000, а затем пробежаться по ним и подвести итог? Или удерживать итоги в списке, очереди или кэше?

Что бы вы посоветовали для наиболее оптимального механизма агрегатора для моего сценария, зная, что может быть 10 рабочих ролей с 5 потоками, получающими сообщения из этих очередей в любое время?

1 ответ

Для начала я думаю, что было бы неплохо прочитать эту всегда популярную статью и связанный с ней эпизод с облачным покровом о создании масштабируемых счетчиков в Azure.

Короче говоря, это говорит о том, что каждая рабочая роль поддерживает счетчик потока безопасности (в вашем случае для каждого клиента и типа сообщения). Потоки обновляют эти счетчики при обработке каждого сообщения. Затем фоновый поток периодически записывает эти значения в основное хранилище.

Другие вопросы по тегам