Скажем, есть узкое место, когда у вас недостаточно рабочих и ваших блоков кода, это в основном ошибки тайм-аута?
Нельзя защищаться от проблемы «недостаточно рабочих», покареальные условия четко указаны.Наличие 1М работников на 1 сообщение в час крайне неэффективно;1 рабочий на 1М сообщений в секунду блокирует.Там нет серебряной пули. Sidenote: для решения этой конкретной проблемы мы используем GenStage
для противодействия давлению.
Наиболее распространенной проблемой AFAICT является неправильная конструкциядерево наблюдения, когда сбой одного из рабочих приводит к несогласованному состоянию (другие работники имеют устаревшие ссылки на это или подобное). В качестве примера можно привести работника, который поддерживает удаленное соединение и говорит RabbitMQ .Когда последний отказывает, нужно перезапустить / перенастроить все иждивенцы.
Такие проблемы легко проверить.Один пишет кучу тестов, которые приводят к аварийному завершению работы всех в дереве наблюдения и гарантирует, что все работает нормально после воскресения аварийного.
Будучи явно оптимизированным для высокой нагрузки, ErlangVM готов к некоторой обработкеобычно из коробки, и когда кто-то встречает очень необычные условия, нет чека, кроме как понять, где находится узкое место (оно всегда находится где-то, о чем вы никогда не могли подумать, кстати :) и исправить эту конкретную проблему .
Я сомневаюсь, что может существовать какое-либо общее решение.