Ключевые технологии отслеживания цепочки вызовов Java (1) Общее введение

Java

Во-первых, роль отслеживания цепочки вызовов

Отслеживание цепочки вызовов включает
1. Цепочка вызовов от внешнего интерфейса к внутреннему
2. Цепочка вызовов между методами внутри одного сервиса
3. Цепочка вызовов между микросервисами
4. Цепочка вызовов между сервисом приложения и базой данных
5. Цепочка вызовов между сервисами приложений и сторонними сервисами, такими как Redis, MQ

Функции отслеживания цепочки вызовов:
1. Найдите точку сбоя, когда несколько микросервисов вызывают сбои.
2. Анализ производительности 3. SQL-анализ 4. Анализ рациональности вызова метода или службы 5. Логика вызовов и анализ потока данных, что особенно полезно для новичков.Прочитав цепочку вызовов и выполнив SQL, вы поймете, что сделали.

Во-вторых, требования к отслеживанию цепочки вызовов

Итак, каковы требования, связанные с отслеживанием цепочки вызовов, см. рисунок:


1. Информация о вызове должна передаваться от внешнего интерфейса к серверному и между несколькими микросервисами, иначе цепочка вызовов будет разорвана.
2. Каждый микросервис должен иметь возможность получить стек вызовов. Обратите внимание, что стек вызовов и последовательность вызовов отличаются. Недостаточно просто получить последовательность вызовов. Попробуйте сравнить:

Левое изображение отражает только последовательность вызовов, но не информацию о стеке вызовов, а правое изображение показывает как порядок вызовов, так и информацию о стеке вызовов.
3. Информация о звонке внутри микросервиса должна иметь возможность передаваться и быть неинвазивной 4. Микросервисы, взаимодействующие с базой данных, должны иметь возможность получать вызываемый SQL

3. Ключевые технологии, задействованные в отслеживании цепочки вызовов Java

  1. Передача информации о вызове, эта информация может быть передана через заголовок http-сообщения
  1. Внешний интерфейс просто нужно настроить при отправке запроса. Однако время звонка фронтенда вообще не отслеживается, потому что будет еще одно сетевое взаимодействие.
  2. Для микросервисов вам нужно перехватить запрос запроса и установить информацию о цепочке вызовов в заголовок сообщения, что может быть достигнуто весной, написав перехватчик RestTemplate и перехватчик Fegin.
  1. Для приобретения стека вызовов в микросервисах разработчики, использующие Spring, естественно подумают использовать АОП для их перехвата, но Spring AOP неудобен и навязчив для перехвата вызовов между несколькими методами одного класса, поэтому он не подходит. Лучший способ — использовать javaagent для перехвата путем внедрения кода.
  2. Передача информации о внутренних вызовах микросервисов должна проходить через переменные области потока. ThreadLocal в Java уже предоставляет эту возможность.
  3. Трассировка стека вызовов Java также предоставляет эту возможность для получения информации о стеке вызовов текущего метода.
  4. SQL Monitor, используя MyBatis MyBatis, произойдет с перехватчиками, таким образом, некоторые случаи не будут работать (неизвестной причины), а полагаются на MyBatis, поэтому приложение метода для перехвата большего количества базового SQL, является одним из способов достижения себя - Класс прокси JDBC, другой способ - использовать сторонний инструмент мониторинга SQL с открытым исходным кодом.
    end.

Публичный аккаунт WeChat:


Присоединяйтесь к планете знаний «Практического лагеря Java Stack», участвуйте в обсуждениях и делитесь полезными кодами!
t.zsxq.com/RNzfi2j