Рубрики
Uncategorized

Охотника за крупномасштабным узлом.

Вот тематическое исследование от команды по надежности сайта RSPECTION. На этот раз мы хотим поделиться историей нашего C … с меткой DevOps, Node.

Вот тематическое исследование от rsperive Команда надежности сайта. На этот раз мы хотим поделиться историей нашего клиента. Чтобы снизить затраты на инфраструктуру (более 60 000 евро в месяц) наш клиент решил отказаться от AWS в пользу решения Baremetal + Kubernetes. Эта передача подняла ожидаемые преимущества (намного меньше баз данных по размещению машин и кэша, более дешевая стоимость CDN), но по неизвестным причинам она также подчеркнула проблему увеличения потребления ресурсов и растущей задержки на машинах, которые применяют приложения Node.js.

Угроза частичного возвращения к дорогому AWS висела над бизнесом. Поэтому мы решили поближе взглянуть на проблему изнутри.

Мы начинаем профилировать. Первый шаг и сразу же первая жесткая ореха, которая на нашем пути трескает. Приложение, которое локально генерирует вызовов и фламейграфов, не работает в производстве. Мы переключаемся на ручное профилирование V8, что означает запуск процесса узла с -Проф флаг.

К сожалению, журналы загрузки и обработки не сбои в узле версии 8.10. Причина? Жук. То же самое в 8.12, к счастью, 10.x позволяет нам двигаться дальше.

Мы анализируем журналы, чтобы проверить пики процессора и, таким образом, выясняем, что занимает большую часть времени процессора. У нас есть подозреваемый — это метод «найти» Лодаш Анкет Мы оптимизируем это, и это помогает. Преобразование формата данных из таблицы в объект является одним из средств правовой защиты, которые получают 20-30 мс при задержке для нескольких конечных точек.

Очевидно, мы еще не удовлетворены. Профилирование приносит больше подозреваемых. Одним из них является часть кода, который влияет на весь запрос, обработанный в бэкэнде.

Оказывается, что другой элемент от ЛодашКлонип , который должен был обеспечить неизменность и была введена более года назад — с текущим объемом данных негативно влияет на задержку и потребление процессора.

Эта проблема была трудно захватить, потому что ее влияние на общую производительность растет постепенно. Как обычно происходит во время оптимизации, давние проблемы исчезают после простого изменения. В этом случае, оказывается, заменяется Клонип с Object.Freeze .

Мы проверяем патчи для 1 капсула Kubernetes. Результат — потребление процессора уменьшается на 30%, средняя задержка для всего снабжения уменьшается с 140 мс до 30 мс. Мы решаем развертывать все производственные машины.

Последний эффект выглядит удовлетворительно. При 700 стручках с приложенными пятнами среднее потребление процессора уменьшилось с 30 до 8%, что означает, что мы можем уменьшить количество стручков.

При постепенном снижении партий из 100 стручков мы достигли 200 POD с потреблением процессора 44% пикового времени. Что является лучшим результатом, чем начальное пиковое время с 700 стручками (~ 55%).

Чего мы достигли? Мы освободили много ресурсов и получили место, чтобы справиться с большим количеством трафика и предстоящих функций. И, конечно же, клиенту не нужно возвращаться к дорогому AWS.

ICYMI — мы нанимаем для rsperive а также Ваучера

Оригинал: «https://dev.to/msedzielewski/hunting-down-large-scale-nodejs-application-performance-bottlenecks-lij»