Автор оригинала: Dhananjay Singh.
Обзор
В этой статье мы познакомим вас с Турбиной Spring Cloud Netflix . Он объединяет несколько потоков метрик Hystrix в один, чтобы его можно было отобразить в одном представлении панели мониторинга.
Чтобы дать небольшое введение в Истрикс . В архитектуре микросервиса у нас есть много небольших приложений, которые взаимодействуют друг с другом для выполнения запроса.
Всегда существует вероятность того, что одна из этих нижестоящих служб не ответит правильно или просто полностью выйдет из строя. Чтобы предотвратить любые каскадные сбои, мы создали резервный механизм Hystrix для наших микросервисов.
Каждая микросервисная служба, реализующая Hystrix, может предоставлять потоки метрик Hystrix (через конечную точку привода /hystrix.stream
), которые можно просматривать с помощью панели мониторинга Hystrix.
Мы подробно рассмотрели это в Spring Cloud: Hystrix, если вы хотите узнать больше.
Turbine -это инструмент с открытым исходным кодом от Netflix для объединения нескольких потоков в один поток. Весна обеспечила хорошую обертку вокруг него, чтобы его можно было легко использовать в экосистеме Spring.
Установка
Настройка аналогична настройке Spring Cloud: Hystrix. Вот как выглядит наш серверный сервис:
- Сервер Эврика : Действует как реестр служб и работает на порту
8761
. - Служба рекомендаций : Простая служба REST, имеющая единственную конечную точку
/рекомендаций
и работающая на порту8070
. - Служба пользователей : Простая служба REST, имеющая единственную конечную точку
/персонализированную/{id}
и работающую на порту8060
. - Турбина Hystrix : Служба панели мониторинга Hystrix для отображения потоков Hystrix, запущенных на порту
9090
.
Вот как выглядят наши сервисы на сервере Eureka:
Как пользовательская служба
, так и служба рекомендаций
реализовали резервный механизм Hystrix и предоставили доступ к конечной точке hystrix.stream
через Привод :
- Конечная точка Hystrix для пользовательского сервиса:
http://localhost:8060/actuator/hystrix.stream
- Конечная точка Hystrix для рекомендуемой службы:
http://localhost:8070/actuator/hystrix.stream
Мы можем проверить это по отдельности на нашей панели мониторинга Hystrix, введя URL-адрес в поле и нажав “Отслеживать поток”:
Мы увидим такой показатель, как этот:
Примечание : Если вы не видите никакого потока, то вам, вероятно, придется перейти к конечным точкам службы, поток которой вы хотите увидеть. Пример: для пользовательского сервиса
мы должны нажать http://localhost:8060/personalized/1
для создания потока.
Установка Турбины
Возможно, вы поняли, что просмотр отдельного потока не очень продуктивен, особенно когда у нас много микросервисов.
Turbine может объединить все эти отдельные hystrix.stream
в один turbine.stream
, который можно просмотреть на панели мониторинга Hystrix.
Он использует интерфейс Discovery Client
для поиска соответствующих служб, которые создают /hystrix.stream
s.
Чтобы добавить Turbine на панель мониторинга Hystrix, добавьте следующую зависимость:
org.springframework.cloud spring-cloud-starter-netflix-turbine
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Примечание : Это стартовая зависимость turbine, которая по умолчанию использует Spring Cloud Eureka в качестве сервера обнаружения. Если вы используете Spring Cloud Consul, используйте следующие зависимости:
org.springframework.cloud spring-cloud-netflix-turbine org.springframework.cloud spring-cloud-starter-consul-discovery
В этой статье мы будем использовать зависимость starter, т. е. spring-cloud-starter-netflix-turbine
.
Чтобы включить Turbine, мы просто аннотируем наш основной класс с помощью @EnableTurbine
:
@SpringBootApplication @EnableTurbine @EnableDiscoveryClient @EnableHystrixDashboard public class HystrixTurbineApplication { public static void main(String[] args) { SpringApplication.run(HystrixTurbineApplication.class, args); } }
Чтобы турбина работала должным образом, мы должны добавить несколько деталей в наше приложение.свойства
:
server.port= 9090 spring.application.name= hystirx-turbine eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/ turbine.appConfig= user-service,recommendation-service turbine.clusterNameExpression= new String("default")
Здесь мы сообщаем Turbine местоположение сервера Eureka, приложения, для которых /hystrix.stream
необходимо извлечь и turbine.clusterNameExpression
как новая строка("по умолчанию")
, которая дает имя кластера “по умолчанию”.
Мы можем открыться http://localhost:9090/turbine.stream?cluster=default
чтобы просмотреть совокупный поток как пользовательского сервиса
, так и рекомендательного сервиса
:
Опять же, если вы ничего не просматриваете, просто нажмите user-service
и recommendation-service
конечные точки для создания потоков.
Мы также можем использовать этот URL-адрес на нашей панели мониторинга Hystrix для создания хорошего агрегированного представления:
Иногда вам может потребоваться использовать идентификатор службы
службы Eureka в качестве имен кластеров для вашей панели мониторинга. Это можно сделать с помощью Конфигурации turbine.aggregator.cluster
:
server.port= 9090 spring.application.name= hystirx-turbine eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/ turbine.aggregator.clusterConfig= USER-SERVICE,RECOMMENDATION-SERVICE turbine.appConfig= user-service,recommendation-service
Вы также можете проверить, какие кластеры в настоящее время настроены в вашем приложении Turbine, нажав на конечную точку /кластеры
.
Эту конечную точку можно отключить, установив turbine.endpoints.clusters.enabled
в false
.
Итак, теперь мы можем просматривать turbine.stream
как идентификаторы Eureka, такие как: http://localhost:9090/turbine.stream?cluster=USER-SERVICE
Если запущено несколько экземпляров определенной службы, Turbine подберет ее в соответствии с кластером и отобразит в результате.
Вывод
В этой статье мы рассмотрели, как настроить турбину поверх нашего потока Hystrix для агрегированного представления. Сначала мы увидели классический турбинный подход к извлечению потока Hystrix из всех сервисов, а затем увидели, как это сделать, используя любую из реализаций Spring Cloud Stream, такую как RabbitMQ или Kafka .
Как всегда, код для примеров, используемых в этой статье, можно найти на GitHub .