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

Понятное решение было под каждый провайдер сделать отдельные очередь и сервис-шлюз. Непонятно было только то, а в скольких инстансах сервис-шлюз каждого провайдера нужно запустить.

Можно выбрать случайное кол-во и по графикам разбираться нужно поменьше или побольше, но хотелось не заниматься тестированием на проде. С универа я помню нам рассказывали про теорию очередей, но рассказывали непонятно и я уже ничего не помню. Гугля, я в итоге нашел такую классную серию статей про теорию очередей:

Queuing Theory Tutorial

Содержание:

Туториал про теорию очередей

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

Queuing Theory Tutorial - Arrival Distribution

Queuing Theory Tutorial - Service Time Distribution

Еще мне понравилось почитать про распределение Пуассона тут:

Распределение Пуассона и формула Пуассона

Затем рассказывают про нотацию Кендалла:

Queuing Theory Tutorial - Classification of Queuing Model using Kendal Notation

В итоге, наконец рассказывают про систему очередей с 1 сервером и с N серверами. Рассказывают, как вычислять: