Express (NodeJS) больше ядер против большего количества узлов? (С анализом и примерами) - PullRequest
0 голосов
/ 12 июля 2020

Когда дело доходит до запуска Express (NodeJS) в чем-то вроде Kubernetes, будет ли более рентабельным запуск с большим количеством ядер и меньшим количеством узлов? Или больше узлов с меньшим количеством ядер каждый? (Предполагая, что стоимость процессора / узла является линейной, например: 1 узел с 4 ядрами = 2 узла 2 ядра)

С точки зрения избыточности, большее количество узлов кажется очевидным ответом.

Однако с точки зрения Из-за экономической эффективности меньшее количество узлов кажется лучше, потому что с большим количеством узлов вы платите больше за накладные расходы и меньше за запуск своего приложения. Вот пример:

1 узел с 4 ядрами стоит 40 долларов в месяц, он работает:

  • 10% накладных расходов Kubernetes на одно ядро ​​
  • 90% вашего приложение на одном ядре и около 100% на других Таким образом, вы платите 40 долларов за 90% + 3x100% = 390% за ваше приложение

2 узла с 2 ядрами каждый, стоимостью в 40 долларов в месяц на выполнение:

  • 10% накладных расходов Kubernetes на одно ядро ​​(НА УЗЕЛ)
  • 90% вы прикладываете на одном ядре и почти 100% на другом (НА УЗЕЛ) Теперь вы платите 40 долларов за 2 x (90% + 100%) = 2 x 190% = 380% ваше приложение

Я предполагаю, что балансировка 2 вокруг 4-8 ядер является идеальной, поэтому вы не платите так много за каждый узел, реже масштабируя узлы и получая высокий процент вычислений, выполняемых вашим приложением на каждом узле. Правильно ли мой лог c?

Редактировать: Математическая опечатка

1 Ответ

2 голосов
/ 12 июля 2020

, потому что узел не становится пустым, но он должен запускать некоторые основные приложения, например:

  • kubelet
  • kube-proxy
  • container-runtime ( docker, gVisor или другие)
  • другой набор демонов.

Иногда 3 большие виртуальные машины лучше, чем 4 средние виртуальные машины с точки зрения наилучшего использования емкости.

введите описание изображения здесь

Однако главным решающим фактором является тип вашей рабочей нагрузки (ваших приложений):

  • Если ваши приложения потребляют память больше, чем процессоры (например, Java Apps), вам нужно будет выбрать узел [2CPU, 8GB] лучше, чем [4CPUs, 8GB] .

  • Если ваш приложения потребляют ЦП больше, чем память (как и рабочая нагрузка машинного обучения), вам нужно будет выбрать противоположное; инстансы, оптимизированные для вычислений.

  • Золотое правило ? состоит в том, чтобы вычислить полную емкость лучше, чем рассматривать индивидуальную емкость для каждого узла.

В конце необходимо учитывать не только рентабельность, но также:

  • устойчивость
  • HA
  • избыточность
...