Трассировка запросов в Node.js

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Существует расхожее мнение, что мы, как разработчики программного обеспечения, тратим 90% нашего времени на отладку и только 10% непосредственно на написание кода. Конечно, это соотношение слишком преувеличено! Но это правда, что отладка занимает значительную часть нашего рабочего времени, особенно в эпоху расцвета микросервисных архитектур. На сегодняшний день уже никого не удивишь тем, что на наших производственных серверах одновременно работают сотни или даже тысячи микросервисов.

Когда дело доходит до отладки программного обеспечения, мы традиционно полагаемся на логи. Однако не все логи одинаково полезны. Они могут быть несодержательными, например, указывать только код ошибки или отражать только общую информацию, как, например, «Что-то пошло не так». Даже если в логе отражена более конкретная ошибка, например «Идентификатор запроса пользователя недействителен» с кодом ошибки неправильного запроса «400», нам все равно могут потребоваться часы или даже дни, чтобы выяснить первопричину проблемы из-за большого количества вовлеченных в работу сервисов. И вот здесь в игру вступает трассировка запросов (request tracing).

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

Что такое трассировка запросов?

Трассировка запросов — это метод отслеживания и визуализации всех подзапросов из множества сервисов, которые запускаются в результате выполнения одного конкретного родительского запроса. В микросервисной архитектуре, особенно в распределенном приложении, сервисам необходимо взаимодействовать с другими сервисами, базами данных или сторонними зависимостями. В результате в рамках обработки запроса к системе запускается множество внутренних, невидимых пользователю запросов.

Зачем нам может понадобиться трассировка запросов?

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

Трассировки (или трейсы – traces) же помогают нам обнаружить все запросы, выполняемые в рамках одного родительского запроса. Мы также можем увидеть запрос, который был сделан непосредственно перед родительским запросом. Короче говоря, трассировка запросов дает нам целостное представление о контексте и процессе выполнения запроса. Комбинируя трассировки с логами, мы можем определить основную причину проблемы. Кроме того, трассировка сокращает время отладки, поскольку помогает выявить первопричину проблемы простым и быстрым способом, визуализирую логи каскадов ошибок.

Небольшая просьба от Amplication

Доброго времени суток, коллега-разработчик! Раз уж вас заинтересовала наша статья трассировке запросов, у нас есть к вам одна небольшая просьба... Мы бы были очень признательны, если бы вы поставили звезду нашему репозиторию Amplication на GitHub. Вы можете думать об этом как о виртуальном “дай пять”, благодаря которому день нашего разработчика станет чуточку лучше. К тому же я пообещал команде устроить вечеринку с пиццей, когда мы наберем 10 000 звезд. Так что, если вы хотите увидеть радостных разработчиков с томатным соусом на лицах, ставьте нам

Источник: https://habr.com/ru/companies/otus/articles/735188/


Интересные статьи

Интересные статьи

В этой части статьи про торгового бота мы сначала посмотрим на алгоритм сравнения двух комбинаций, а потом на разные методы сбора комбинаций в кластеры. Разберем как работает сам метод сбора кластеров...
Большинство разработчиков, когда-либо сталкивавшихся с NLP задачами, рано или поздно задумывались над проблемой, обозначенной в заголовке статьи. Решений подобного рода создавалось достат...
Веб-приложения создают с использованием клиент-серверной архитектуры, применяя в качестве коммуникационного протокола HTTP. HTTP — это протокол без сохранения состояния. Каждый раз, к...
Есть такая штука, называется SSRF. Про нее написано немало, но все же, я расскажу тебе вкратце. Допустим, ты заходишь на сайт, заполняешь профиль и доходишь до пункта “загрузить аватарку”. А у т...
Привет, Хабр! Представляю вашему вниманию адаптированный перевод первой главы "Node.js Best Practices" автора Yoni Goldberg. Подборка рекомендаций по Node.js размещена на github, имее...