В этой статье мы разберемся с распределенной трассировкой микросервисов с использованием среды облачного инсталляции Zipkin и Spring.
Микросервисы — это отличная архитектура, хотя она имеет свои проблемы. Сложная архитектура микросервисов имеет нисходящие и восходящие зависимости от других микросервисов, и все взаимосвязано. Большую часть времени отдельные группы просто сосредотачиваются на своих собственных службах, поэтому в распределенной среде микросервисов очень трудно обнаружить какие-либо задержки или отследить реальные проблемы во время выполнения.
1. Распределенная трассировка
По мере увеличения сложности архитектуры микросервисов критически важна равномерная наблюдаемость между сервисами и экземплярами сервера. Каждый запрос на обслуживание проходит через уровень нескольких сервисов, выявление задержки или любых проблем во время выполнения становится все труднее с использованием традиционных методов отладки. Распределенная трассировка обеспечивает целостное представление запросов, проходящих через несколько сервисов, что позволяет немедленно идентифицировать проблемы.
1.1 Распределенный словарь трассировки
- Интервал — интервал — это отдельная операция.
- Трассировка . Трассировка — это график сквозной задержки, состоящий из промежутков.
- Tracers — Tracers записывает диапазоны и передает контекст, необходимый для их соединения в трассировку.
2. Зипкин
Zipkin — это распределенная система с открытым исходным кодом, которая предоставляет механизмы для отправки, получения, хранения и визуализации деталей трассировки. Это помогает команде соотнести действия между экземплярами сервера и получить более глубокое понимание того, что именно происходит в наших сервисах. Zipkin предоставляет интерфейс пользовательского интерфейса для анализа трассировок и детализации графа вызовов между сервисами.
2.1 Установка Zipkin
Существует три способа установки zipkin-сервера.
- Java — мы можем выполнить приведенную ниже команду
wget
для загрузки последней версии сервера zipkin. Если у нас не установленwget
, просто скопируйте приведенный ниже URL и вставьте его в наш браузер, чтобы загрузить последнюю версию сервера zipkin.
1
|
- Исходный код Zipkin. Мы можем загрузить исходный код zipkin с URL-адреса github ниже и запустить приложение zipkin на локальном компьютере: https://github.com/openzipkin/zipkin.
- Docker — мы можем скачать контейнер Docker -zipkin с https://github.com/openzipkin/docker-zipkin
Для этого примера приложения я установил сервер Zipkin, используя метод Java.
2.2 Зипкин Ю.И.
Пользовательский интерфейс Zipkin предоставляет следующие функции для анализа деталей распределенной трассировки по службам:
- Поиск трасс по названию сервиса, имени пролета и т. Д.
- График зависимостей трассировки, показывающий поток запросов трассировки между службами
- Предоставляет подробную информацию об общем времени трассировки для каждого отдельного промежутка
Анализируя детали, предоставленные пользовательским интерфейсом Zipkin, становится легче находить задержки или какие-либо конкретные проблемы служб в архитектуре взаимосвязанных микросервисов.
3. Весеннее Облако Слин
Spring cloud sleuth
добавляет трассировки и идентификаторы промежутков в Slf4j MDC
(контекст сопоставленной диагностики), чтобы извлечь журналы из заданной трассировки или промежутка. Sleuth
обеспечивает абстракцию по сравнению с распространенными моделями данных распределенной трассировки, такими как трассы, интервалы, аннотации, аннотации ключ-значение. Общие точки входа и выхода Sleuth Instruments из приложений Spring
( servlet filter, rest template, scheduled actions, message channels, zuul filters, feign client
).
3.1 Конфигурация Sleuth и Zipkin в SpringBoot
Добавьте следующие зависимости в Springboot pom.xml, чтобы добавить zipkin и Spring Cloud в приложение SpringBoot.
pom.xml
1
2
3
4
5
6
7
8
9
|
< dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-starter-sleuth</ artifactId > </ dependency > < dependency > < groupId >org.springframework.cloud</ groupId > < artifactId >spring-cloud-starter-zipkin</ artifactId > </ dependency > |
4. Образец заявки
Для этой статьи я создал пример приложения, которое состоит из трех различных микросервисов, которые называются UserGreetingService
, UserNameService
, UserAddressService
.
UserGreetingService
UserAddressService
сервисы UserNameService
и UserAddressService
чтобы UserAddressService
полное приветственное сообщение для пользователя вместе с именем и адресом.
UserGreetingService.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
@SpringBootApplication @RestController @CrossOrigin public class UserGreetingService { @RequestMapping ( "/api/user/greet" ) public String greet() { String greetingMsg = "Hello" ; String userAddress = restTemplate().getForObject( "http://localhost:3002/api/user/address" , String. class ); return greetingMsg + " " + userName + "!\n\n" + userAddress; } @Bean RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(UserGreetingService. class , "--spring.application.name=user-greeting-service" , "--server.port=3000" ); } } |
Чтобы ввести задержку служб, я Thread.sleep(1000)
добавил Thread.sleep(1000)
и Thread.sleep(2000)
в службы UserNameService
и UserAddressService
.
Вы можете скачать пример кода по ссылке на github — https://github.com/VishSinha/springbootzipkindemo
4.1 Запустите Zipkin Server
Чтобы запустить zipkin-сервер в нашей локальной среде, перейдите в каталог, в который мы загрузили zipkin-сервер, откройте командную строку или терминал и выполните следующую команду:
1
|
java -jar zipkin-server-2.5.0- exec .jar |
После запуска zipkin-сервера пользовательский интерфейс Zipkin можно просматривать по URL- адресу: http: // localhost: 9411 / zipkin /
4.2 Запустить образец
Как только вы загрузите пример кода с github, запустите все три микросервиса, используя вашу любимую среду IDE, например eclipse, Intellij или командную строку.
После запуска всех трех микросервисов UserGreetingService
URL-адрес конечной точки UserGreetingService
http: // localhost: 3000 / api / user / greet с помощью браузера или почтальона.
В целом, вы заметите, что отправка приветствия заняла более 3 секунд. Теперь давайте откроем пользовательский интерфейс Zipkin, чтобы проанализировать, что происходит за кулисами и почему общее время отклика составляет более 3 секунд.
Откройте окно браузера и визуализируйте пользовательский интерфейс Zipkin, используя URL-адрес по умолчанию — http: // localhost: 9411 / zipkin . Это сделает страницу поиска по умолчанию zipkin.
Давайте выберем службу приветствия пользователя из названия службы и нажмем кнопку «Найти следы».
Вы увидите, что есть всего 3 диапазона услуг приветствия вместе с общим временем ответа.
Нажмите на ссылку «3 пролета», это предоставит подробную информацию о времени ответа каждой услуги и другие детали, как показано ниже.
Кроме того, нажав на каждый диапазон служб, мы можем получить подробную информацию об идентификаторах трассировки, идентификаторах диапазонов, идентификаторах родительской трассировки, информации об экземплярах сервера и других данных трассировки для каждого запроса на услуги. Это может легко помочь нам устранить любые неисправные микросервисы или проблемы с задержкой.
После того, как вы откроете раздел Зависимости пользовательского интерфейса Zipkin, будет отображен график зависимости сервисов для сервисов, как показано ниже:
5. Заключение
В целом, zipkin очень легко интегрировать в облачные приложения для микросервисов, и это дает много полезной информации и информации по всем сервисам для анализа общего состояния сервисов. Используя Zipkin, мы можем легко идентифицировать любые неисправные сервисы и корректирующие действия могут быть предприняты.