Подтвердить что ты не робот

Каковы наиболее важные статистические данные при развертывании веб-приложения Node.js?

Сначала - немного о моем фоне: Я программировал какое-то время (10 лет на данный момент) и довольно компетентен, когда дело доходит до кодирования идей. Я начал работать над программированием веб-приложений чуть более года назад, и, к счастью, обнаружил nodeJS, благодаря чему создание веб-приложений стало намного больше напоминать традиционное программирование. Теперь у меня есть приложение node.js, которое я разрабатываю в течение некоторого времени, которое теперь выполняется в Интернете. Моя основная путаница проистекает из того, что я очень новичок в мире веб-разработки и не знаю, что важно, а что нет, когда речь заходит о мониторинге моего приложения.

Я использую Joyent SmartMachine, и поиск вариантов аналитики, которые они предоставляют, немного подавляющим. Существует так много разных опций и конфигураций, и я не знаю, для чего действительно важна каждая аналитика. По вопросам, приведенным ниже, я был бы признателен за любой ответ, будь то конкретный для Joyent Cloud Analytics или полностью общий.


ВОПРОС ОДИН

В настоящее время моя главная задача - выяснить, как мое приложение использует сервер, на котором я работаю. Я хочу знать, есть ли у моего приложения необходимое количество ресурсов. Получает ли количество запросов, которые он получает, на сервере, который он перегружает, или это требует дополнительных ресурсов? Какие аналитики важны для поиска приложения NodeJS для этой цели? (используя MongoDB и Redis на отдельных серверах, если это имеет значение)


ВОПРОС ДВА

Какие другие статистические данные, как правило, действительно важны для управления сервером на производстве? Я привык к программам, которые запускаются один раз, чтобы сделать что-то конкретное (например, raytracer, который заканчивается, когда он рассчитал изображение), в отличие от веб-приложений, которые постоянно работают и взаимодействуют со многими клиентами. Я уверен, что есть много вещей, которые очевидны для давних администраторов серверов, которые не новички, как я.


ВОПРОС ТРЕХ

Какое внимание следует обратить внимание при работе с NodeJS? Что такое статистика/аналитика, которые становятся особенно важными при работе с однопоточным циклом событий NodeJS и более стандартными серверными системами?

У меня есть другие вопросы о том, как базы данных играют в уравнение, но я думаю, что этого достаточно на данный момент...

4b9b3361

Ответ 1

Мы запускаем node.js в производстве почти год, начиная с 0.4 и текущей серии 0.8. Веб-приложение является выражением 2 и 3 на основе mongo, redis и memcached.

Немного фактов.

  • node не может обрабатывать большие кучи v8, когда он вырастет более чем на 200 мб, вы начнете видеть увеличение использования процессора.
  • node всегда, кажется, течет память или, по крайней мере, увеличивает размер большой кучи, фактически не используя ее. Я подозреваю, что фрагментация памяти, поскольку профилирование v8 или valgrind не показывают утечек в пространстве js или кучи резидентности. Раннее 0,8 было ужасно в этом отношении, rss может быть 1 ГБ с кучей 50 МБ.
  • запросы на поиск трудно отслеживать. Мы написали наше промежуточное программное обеспечение, чтобы отслеживать их, особенно если наше приложение основано на длительных опросах.

Мои предложения.

  • используйте несколько экземпляров на машину, по крайней мере, на 1 процессор. Баланс с haproxy, nginx или такой с аффинностью сессии
  • напишите midleware, чтобы сообщать о подключенных соединениях, то есть те, которые никогда не реагировали на код или латентность была превышена.
  • часто перезапускайте экземпляры, по крайней мере еженедельно
  • write poller, который печатает статистику памяти с модулем процесса в минуту в минуту
  • Используйте супервизор и ткань для упрощения управления процессами.

Контролируйте процессор, сообщите о статистике памяти и перезапустите порог

Ответ 2

Какой бы тип веб-приложения, NodeJS или иначе, нагрузочное тестирование не ответило, имеет ли ваше приложение необходимое количество ресурсов сервера. Хороший сайт, который я недавно нашел для этого, - Load Impact.

Реальный вопрос для ответа: КОГДА ли время загрузки начинает увеличиваться по мере увеличения количества одновременных пользователей? Точка перелома достигается, когда вы получаете определенное количество одновременных пользователей, после чего производительность сервера начнет ухудшаться. Таким образом, загрузите тест в соответствии с тем, сколько пользователей вы планируете достигнуть своего сайта в ближайшем будущем.

Как вы можете оценить количество пользователей, которых вы ожидаете?

Установка Google Analytics или другого пакета аналитики на ваших страницах - должна! Таким образом, вы сможете увидеть, сколько ежедневных пользователей посещает ваш сайт, и каков рост ваших посещений с одного месяца на месяц, что может помочь в прогнозировании будущих ожидаемых посещений и, следовательно, ожидаемой загрузки на ваш сервер.

Даже если я знаю количество пользователей, как я могу оценить фактическую нагрузку?

Ответ в Инструментах разработки F12 доступен во всех браузерах. Откройте свой веб-сайт в любом браузере и нажмите F12 (или для Opera Ctrl + Shift + I), который должен открыть инструменты для разработки браузера. В Firefox убедитесь, что у вас установлен Firebug, в Chrome и Internet Explorer он должен работать из коробки. Перейдите на вкладку Сеть или Сеть, а затем обновите страницу. Это покажет вам количество HTTP-запросов, использование полосы пропускания на каждую страницу!

Итак, формула для ежедневной загрузки сервера проста:

Количество HTTP-запросов на загрузку страницы X среднее число загружаемых страниц на пользователя в день X Ожидаемое количество одновременных пользователей = Всего запросов HTTP на сервер в день

А...

Количество переданных МБ на каждую страницу X среднее число загружаемых страниц на пользователя в день X Ожидаемое количество одновременных пользователей = Общая ширина полосы пропускания в день

Мне всегда было проще рассчитать эти цифры ежедневно, а затем экстраполировать его на недели и месяцы.

Ответ 3

Node.js является однопоточным, поэтому вам обязательно нужно начать процесс для каждого процессора, который у вас есть. Cluster - это, безусловно, лучший способ сделать это, и имеет дополнительное преимущество, заключающееся в том, чтобы перезапустить умерших работников и обнаружить невосприимчивых работников.

Вы также хотите выполнить нагрузочное тестирование до тех пор, пока ваши запросы не начнут синхронизировать или не превысят то, что вы считаете разумным временем отклика. Это даст вам представление о верхнем пределе, который может обрабатывать ваш сервер. Blitz является одним из многих вариантов, на которые вы можете взглянуть.

Я никогда не использовал статистику Joyent, но NodeFly и их node-nodefly-gcinfo - отличный инструмент для мониторинга процессов node.