У меня на работе была задача пооптимизировать очередь отправки уведомлений. В одну общую очередь клались уведомления для разных провайдеров и один общий сервис-шлюз (размноженный на несколько инстансов) ее разгребал. Провайдеры — вида пуш, емейл и др. Проблема была в том, что если один провайдер начинал медленно работать, то вставала вся очередь.
Понятное решение было под каждый провайдер сделать отдельные очередь и сервис-шлюз. Непонятно было только то, а в скольких инстансах сервис-шлюз каждого провайдера нужно запустить.
Можно выбрать случайное кол-во и по графикам разбираться нужно поменьше или побольше, но хотелось не заниматься тестированием на проде. С универа я помню нам рассказывали про теорию очередей, но рассказывали непонятно и я уже ничего не помню. Гугля, я в итоге нашел такую классную серию статей про теорию очередей:
Содержание:
В туториале сначала идет небольшая вода, а потом идут две крутые статьи, где рассказывают про распределение Пуассона и как его применить при расчете распределения прибытия новых заявок и распределения выполнения заявок.
Queuing Theory Tutorial - Arrival Distribution
Queuing Theory Tutorial - Service Time Distribution
Еще мне понравилось почитать про распределение Пуассона тут:
Распределение Пуассона и формула Пуассона
Затем рассказывают про нотацию Кендалла:
Queuing Theory Tutorial - Classification of Queuing Model using Kendal Notation
В итоге, наконец рассказывают про систему очередей с 1 сервером и с N серверами. Рассказывают, как вычислять: