• Балансер - NodeJS или Nginx?

    3y3
    @3y3 Автор вопроса
    Итак для истории:

    Особой разницы, с точки зрения производительности, при использовании балансера Nginx против NodeJS нет.

    Мы сравнивали нашу старую архитектуру построенную с использованием strong-cluster-control c балансировкой через NodeJS, и новую на основе luster с балансировкой на Nginx.
    В обоих случаях был поднят кластер на cpu-1 процессов (в данном случае 32-1)
    В случае luster каждый процесс слушает свой unix сокет, балансировка внутри ноды отключена. В Nginx создан апстрим на эти самые 31 сокет с балансировкой least_connect.

    luster был использован как готового решение, поддерживающее сохранение индекса воркера при его перезапуске, в основных тестах другие его возможности не использовались.

    В стрельбах с постоянной нагрузкой на реальном проекте были замечены незначительные отклонения потребления system и user CPU как в одну так и в другую сторону.
    В стрельбах на отказ стабильность повысилась на 5-10%.

    Тестируемое приложение является stateless middleware с преимущественно асинхронными операциями, период простоя в одном стеке не больше 5 мс. Приложение на данный момент не занимается рендерингом шаблонов.

    Для приложений с тяжелыми синхронными операциями (с периодом простоя в стеке больше 50мс) был получен совет использовать следующую архитектуру:
    Все так же поднимаем кластер на cpu-1, но настраиваем luster на меньшее количество групп, например по 4 воркера в каждой группе, т.е. 4 воркера будут слушать один сокет.
    Балансировку в ноде все так же отключаем. Получаем предварительную балансировку least_connect средствами Nginx и дополнительную балансировку средствами системы, которая будет делать выбор опираясь на готовность процесса к чтению из сокета.
    Ответ написан
    Комментировать