Представьте, что у нас есть следующая проблема:
- У нас есть клиенты http, которые выполняют запросы к нашему программному обеспечению.Таким образом, у нас есть один процесс, который всегда доступен для них и сохраняет их запросы в очереди.
- Нам нужно отправить эти запросы на компьютер, который находится в нашей внутренней сети (снова через HTTP).
- Такая машина не всегда доступна.Он запускается (и останавливается, когда очередь пуста) по требованию нашего программного обеспечения (снова HTTP-запрос к машине «менеджера»).
- У нас есть несколько (или много) из вышеперечисленного.
Итак, в принципе, у нас есть одна логическая сущность, которую мы будем называть «очередью заданий» ради аргумента.Каждая очередь заданий состоит из нескольких (разнородных) процессов.Тот, который реализует фактическую очередь и всегда доступен (не блокируется).Тот, который управляет рабочей машиной.У нас также есть несколько (порожденных по требованию) рабочих, которые удаляют записи из очереди, пытаются отправить их на рабочий компьютер, обходят ошибки;возможно, возврат (неудачные) попытки в очередь (для повторной попытки) и т. д. И, возможно, у нас также есть процесс «менеджер», который координирует работу выше.И у нас есть много «очередей заданий», которые все состоят из множества процессов.
ПРИМЕЧАНИЕ: это может быть не идеальное решение этой точной проблемы, но давайте предположим, что это так.Мой вопрос не о том, как решить проблему, а о том, как управлять такими «группами» процессов, которые представляют логические объекты.
Итак, как вы представляете это в OTP?Сколько у вас деревьев контроля, вы разделяете супервизоров между объектами "очереди заданий" или у вас есть супервизор на логическую сущность.Кроме того, как вы управляете всем этим.
У меня есть предположение, но это довольно сложная проблема (поскольку я уже пытался реализовать ее несколькими различными способами), поэтому я не буду делиться своими (возможно,не так уж и плохо) идея (пока).