У меня есть два микросервиса Spring (A и B).
Сервис A: подготавливает ~10 миллионов токенов устройств (FCM) и разбивает их на фрагменты по 500 токенов.
Каждый фрагмент публикуется в RabbitMQ.
Сервис B: потребляет фрагменты и вызывает SDK администратора Firebase sendEachForMulticast для каждого фрагмента из 500 токенов.
Настройка среды выполнения для службы B:
2 сервера
Сервер №1: 200 одновременных потребителей
Сервер №2: 100 одновременных потребителей
Наблюдаемое среднее время обработки одного фрагмента (500 токенов):
Сервер №1 (200 потребителей): ~27 с на фрагмент
Сервер №2 (100 потребителей): ~12 с на фрагмент
Когда я увеличиваю количество одновременных потребителей, среднее время обработки каждого фрагмента становится хуже, а не лучше.
/>Вопросы:
- Это ожидаемое/нормальное поведение с FCM + sendEachForMulticast?
- Что я могу настроить (RabbitMQ, пулы потоков, размер фрагмента, сеть/прокси, настройки FCM и т. д.), чтобы улучшить пропускную способность и/или уменьшить количество фрагментов задержка?
Каждый фрагмент содержит ровно 500 токенов (максимум SDK).
Один же путь кода, одинаковый размер полезной нагрузки.
Нет исключений для приложений; просто более медленное среднее время при более высоком параллелизме.
Мы подтверждаем сообщение RabbitMQ после завершения вызова FCM.
Подробнее здесь: https://stackoverflow.com/questions/797 ... -per-batch
Мобильная версия