utilizecpu

Signed-off-by: Alexander Ivanov <oshli.a.er@gmail.com>
This commit is contained in:
Alexander Ivanov
2019-07-22 18:42:16 +03:00
parent 52ffd5f73e
commit 2b41172b99
2 changed files with 27 additions and 1 deletions

View File

@ -604,7 +604,7 @@ null == undefined // true
**Иначе:** Ваше приложение, скорее всего, будет использовать только 25% доступных ресурсов (!) Или даже меньше. Обратите внимание, что типичный сервер имеет 4 или более ядер ЦП, для простого развертывания Node.js используется только 1 (даже при использовании сервисов PaaS, таких как AWS beanstalk!)
🔗 [**Подробнее: Utilize all CPU cores**](/sections/production/utilizecpu.md)
🔗 [**Подробнее: Используйте все ядра процессора**](/sections/production/utilizecpu.russian.md)
<br/><br/>

View File

@ -0,0 +1,26 @@
# Используйте все ядра процессора
<br/><br/>
### Объяснение в один абзац
Неудивительно, что в своей базовой форме Node работает над одним потоком = один процесс = один процессор. Плата за мощное оборудование с 4 или 8 процессорами и использование только одного звучит безумно, верно? Самое быстрое решение, которое подходит для приложений среднего размера, - это использование кластерного модуля Node, который из 10 строк кода порождает процесс для каждого логического ядра и направляет запросы между процессами в стиле циклического перебора. Более того, используйте PM2, который приукрашивает модуль кластеризации простым интерфейсом и отличным интерфейсом мониторинга. Хотя это решение хорошо работает для традиционных приложений, оно может не подходить для приложений, требующих первоклассной производительности и надежного потока DevOps. Для этих расширенных вариантов использования рассмотрите возможность репликации процесса NODE с использованием пользовательского сценария развертывания и балансировки с помощью специализированного инструмента, такого как nginx, или используйте механизм контейнеров, такой как AWS ECS или Kubernetees, которые имеют расширенные функции для развертывания и репликации процессов.
<br/><br/>
### Сравнение: балансировка с использованием кластера Node против nginx
![Balancing using Nodes cluster vs nginx](/assets/images/utilizecpucores1.png "Balancing using Nodes cluster vs nginx")
<br/><br/>
### Что говорят другие блоггеры
* Из документации [Node.js documentation](https://nodejs.org/api/cluster.html#cluster_how_it_works):
> ... Второй подход, кластеры Node, должен, теоретически, дать лучшую производительность. На практике, однако, распределение имеет тенденцию быть очень несбалансированным из-за капризов планировщика операционной системы. Нагрузки наблюдались, когда более 70% всех соединений заканчивались всего двумя процессами из восьми ...
* Из блога [StrongLoop](https://strongloop.com/strongblog/best-practices-for-express-in-production-part-two-performance-and-reliability/):
> ... Кластеризация возможна с помощью кластерного модуля Node. Это позволяет главному процессу порождать рабочие процессы и распределять входящие соединения среди рабочих. Однако вместо того, чтобы использовать этот модуль напрямую, гораздо лучше использовать один из множества инструментов, которые делают это автоматически; например node-pm или cluster-service ...
* Из поста на Medium [Node.js process load balance performance: comparing cluster module, iptables, and Nginx](https://medium.com/@fermads/node-js-process-load-balancing-comparing-cluster-iptables-and-nginx-6746aaf38272)
> ... Кластер Node прост в реализации и настройке, все хранится в сфере Node, не завися от другого программного обеспечения. Просто помните, что ваш основной процесс будет работать почти так же, как ваши рабочие процессы, и с меньшей частотой запросов, чем другие решения ...