Во-первых, роль отслеживания цепочки вызовов
Отслеживание цепочки вызовов включает
1. Цепочка вызовов от внешнего интерфейса к внутреннему
2. Цепочка вызовов между методами внутри одного сервиса
3. Цепочка вызовов между микросервисами
4. Цепочка вызовов между сервисом приложения и базой данных
5. Цепочка вызовов между сервисами приложений и сторонними сервисами, такими как Redis, MQ
Функции отслеживания цепочки вызовов:
1. Найдите точку сбоя, когда несколько микросервисов вызывают сбои.
2. Анализ производительности
3. SQL-анализ
4. Анализ рациональности вызова метода или службы
5. Логика вызовов и анализ потока данных, что особенно полезно для новичков.Прочитав цепочку вызовов и выполнив SQL, вы поймете, что сделали.
Во-вторых, требования к отслеживанию цепочки вызовов
Итак, каковы требования, связанные с отслеживанием цепочки вызовов, см. рисунок:
1. Информация о вызове должна передаваться от внешнего интерфейса к серверному и между несколькими микросервисами, иначе цепочка вызовов будет разорвана.
2. Каждый микросервис должен иметь возможность получить стек вызовов. Обратите внимание, что стек вызовов и последовательность вызовов отличаются. Недостаточно просто получить последовательность вызовов. Попробуйте сравнить: Левое изображение отражает только последовательность вызовов, но не информацию о стеке вызовов, а правое изображение показывает как порядок вызовов, так и информацию о стеке вызовов.
3. Информация о звонке внутри микросервиса должна иметь возможность передаваться и быть неинвазивной 4. Микросервисы, взаимодействующие с базой данных, должны иметь возможность получать вызываемый SQL
3. Ключевые технологии, задействованные в отслеживании цепочки вызовов Java
- Передача информации о вызове, эта информация может быть передана через заголовок http-сообщения
- Внешний интерфейс просто нужно настроить при отправке запроса. Однако время звонка фронтенда вообще не отслеживается, потому что будет еще одно сетевое взаимодействие.
- Для микросервисов вам нужно перехватить запрос запроса и установить информацию о цепочке вызовов в заголовок сообщения, что может быть достигнуто весной, написав перехватчик RestTemplate и перехватчик Fegin.
- Для приобретения стека вызовов в микросервисах разработчики, использующие Spring, естественно подумают использовать АОП для их перехвата, но Spring AOP неудобен и навязчив для перехвата вызовов между несколькими методами одного класса, поэтому он не подходит. Лучший способ — использовать javaagent для перехвата путем внедрения кода.
- Передача информации о внутренних вызовах микросервисов должна проходить через переменные области потока. ThreadLocal в Java уже предоставляет эту возможность.
- Трассировка стека вызовов Java также предоставляет эту возможность для получения информации о стеке вызовов текущего метода.
- SQL Monitor, используя MyBatis MyBatis, произойдет с перехватчиками, таким образом, некоторые случаи не будут работать (неизвестной причины), а полагаются на MyBatis, поэтому приложение метода для перехвата большего количества базового SQL, является одним из способов достижения себя - Класс прокси JDBC, другой способ - использовать сторонний инструмент мониторинга SQL с открытым исходным кодом.
end.
Публичный аккаунт WeChat:
Присоединяйтесь к планете знаний «Практического лагеря Java Stack», участвуйте в обсуждениях и делитесь полезными кодами!
t.zsxq.com/RNzfi2j