#javascript #node.js #reactjs #kubernetes #next.js
#javascript #node.js #reactjs #kubernetes #next.js
Вопрос:
В настоящее время мы находимся на этапе оценки для S / S ide R, завершающейся с помощью React.
Наш текущий стек рендеринга основан на JVM и обеспечивает нам производительность ~ 2 тыс. запросов в секунду при среднем ~ 150-200 мс / запрос. Это производительность, которую мы хотим достичь, по крайней мере, с новым стеком.
Мы развернули прототипы (React express.js amp; и с next.js ) с разумным количеством компонентов (10 тыс. элементов в DOM) в нашем кластере Kubernetes и измерил их производительность с помощью autocannon.
Для простоты сосредоточьтесь на next.js прототип.
Хотя наши первые тесты с одним одновременным пользователем были довольно хорошими, мы увидели резкое снижение времени отклика при повышении уровня параллелизма. Благодаря нашим знаниям о том, как Node.js работает (однопоточный цикл событий) мы предполагаем, что это происходит из-за запаздывающего цикла событий.
Думая о защите цикла событий службы с помощью библиотек, защищающих от перегрузки, мы спрашиваем себя, действительно ли это правильный путь?
Например, документация next.js говорит, что «бессерверный» является рекомендуемой целью сборки.
Каков ваш опыт в высокопроизводительном рендеринге компонентов React на стороне сервера? Есть какие-либо рекомендации по использованию цели serverless
сборки? Или мы должны придерживаться next.js цель сборки по умолчанию? server
Если да, то какова хорошая стратегия для обработки цикла событий перегрузки в кластере? Как сбалансировать нагрузку?
Мы очень ценим, если вы можете поделиться своими знаниями! Действительно! 🙂
Приветствия, Крис
Комментарии:
1. Вы можете тривиально запускать одно и то же серверное приложение в нескольких процессах (таким образом, несколько циклов событий и фактический параллелизм), например pm2.keymetrics.io/docs/usage/cluster-mode
2. Спасибо @AKX за ваш комментарий. Как описано здесь , нам не нужен диспетчер процессов в наших контейнерах. Мы можем создавать несколько процессов / модулей с помощью kubernetes.
3. Он вам не нужен , но вы определенно можете его запустить, и я думаю, что это может решить вашу проблему с наименьшими усилиями. Почему бы не попробовать?
4. @AKK Kubernetes предоставляет эту возможность, запуская несколько модулей (процессов) для приложения и распределяя трафик между ними
5. @chrgue Я бы не стал беспокоиться о цикле событий, кроме запуска node.js процесс на ядро, которое вы хотите использовать (аналогично количеству потоков Java ранее). При 60 мс вы получаете ~ 16 последовательных запросов в секунду. Это 125 узлов / процессов, которые достигают 2k / s. Как можно больше предварительной визуализации, используйте компоненты без состояния, ограничьте дерево dom и погрузитесь в то, что в react требует времени. Еще одна вещь, которую следует иметь в виду, это то, что ss react имеет больший вес, чем простое создание шаблонов.