6. Редактирование стратегии серого развёртывания
Чтобы перейти к списку стратегий серого развёртывания, нажмите кнопку «Стратегия» в списке экземпляров. В этом списке можно добавлять стратегии и решения серого развёртывания.
Стратегия серого развёртывания для экземпляра может включать несколько решений серого развёртывания. Стратегии выбираются из списка экземпляров серого развёртывания. Один экземпляр может иметь несколько стратегий серого развёртывания, и между стратегиями существует отношение «или». Это означает, что запрос должен соответствовать только одной из стратегий серого развёртывания экземпляра, чтобы быть направленным на этот экземпляр.
Решение серого развёртывания — это наименьший элемент сравнения в процессе серого развёртывания. Оно определяет правило, которое сравнивает запросы и возвращает true/false. При вызове запроса серая система вызова может сравнить его с решениями серого развёртывания экземпляра и определить, может ли этот экземпляр обработать запрос. Между несколькими решениями существует отношение «и».
7. Редактирование отслеживания серого развёртывания
Перейдите в список сервисов, нажав кнопку «Отслеживание».
8. Изменение состояния экземпляра
Можно изменить состояние экземпляра в списке экземпляров, используя кнопку «Состояние экземпляра». Ранее экземпляр зависел от jar-файла клиента серого развёртывания и uri не был установлен (server.servlet.context-path).
9. Операционный аудит
Все операции POST, PUT и DELETE записываются и могут быть запрошены для последующего аудита. Запрос включает следующие параметры:
Модуль | Описание |
---|---|
spring-cloud-gray-utils | Инструменты |
spring-cloud-gray-core | Модель данных серого развёртывания / определение Java Bean, используется клиентом и сервером |
spring-cloud-gray-client | Основной код клиента серого развёртывания |
spring-cloud-gray-client-netflix | Код интеграции клиента серого развёртывания с Spring Cloud Netflix и связанные с ним плагины, зависящие от этого модуля |
spring-cloud-gray-plugin-webmvc | Плагин для поддержки работы клиента серого развёртывания в Spring MVC |
spring-cloud-gray-plugin-webflux | Плагин для поддержки работы клиента серого развёртывания в Spring WebFlux (версия B и выше) |
spring-cloud-gray-plugin-eureka | Плагин интеграции клиента серого развёртывания с Eureka |
spring-cloud-gray-plugin-feign | Плагин интеграции клиента серого развёртывания с OpenFeign |
spring-cloud-gray-plugin-zuul | Плагин интеграции клиента серого развёртывания с Zuul 1.0 |
spring-cloud-gray-plugin-gateway | Плагин интеграции клиента серого развёртывания со Spring Cloud Gateway (версия B и выше) |
spring-cloud-gray-plugin-event-stream | Плагин интеграции клиента серого развёртывания с RabbitMQ |
spring-cloud-gray-plugin-ribbon-nacos-discovery | Плагин интеграции клиента серого развёртывания с Ribbon и Nacos Discovery |
spring-cloud-gray-server | Основной код сервера управления серым развёртыванием |
spring-cloud-gray-server-plugin-eureka | Плагин интеграции сервера управления серым развёртыванием с Eureka |
spring-cloud-gray-server-plugin-event-stream | Плагин интеграции сервера управления серым развёртыванием с RabbitMQ |
spring-cloud-gray-server-plugin-nacos-discovery | Плагин интеграции сервера управления серым развёртыванием с Nacos Discovery |
spring-cloud-starter-gray-client | Стартер клиента серого развёртывания |
spring-cloud-starter-gray-server | Стартер сервера управления серым развёртыванием |
spring-cloud-starter-gray-eureka-server | Плагин серого развёртывания Eureka Server |
spring-cloud-gray-webui | Веб-интерфейс управления серым развёртыванием, написанный на Vue |
Модуль | Описание |
---|---|
spring-cloud-gray-eureka-sample | Сервер Eureka / реестр служб |
spring-cloud-gray-server-sample | Пример сервера управления серым развёртыванием, интерфейс — spring-cloud-gray-webui |
spring-cloud-gray-service-a-sample | Пример службы поставщика |
spring-cloud-gray-service-a1-sample | Пример службы поставщика |
spring-cloud-gray-ervice-b-sample | Пример службы потребителя |
spring-cloud-gray-zuul-sample | Пример шлюза Zuul |
spring-cloud-gray-gateway-sample | Пример шлюза Spring Cloud Gateway (версия B и выше) |
Решения серого развёртывания являются ключом к маршрутизации серого развёртывания. Решения создаются фабрикой, а абстрактный интерфейс фабрики — cn.springcloud.gray.decision.factory.GrayDecisionFactory.
В настоящее время существуют следующие решения серого развёртывания:
Решение | Фабрика | Описание |
---|---|---|
HttpHeader | HttpHeaderGrayDecisionFactory | Решение на основе заголовка HTTP-запроса |
HttpMethod | HttpMethodGrayDecisionFactory | Решение на основе метода HTTP-запроса |
HttpParameter | HttpParameterGrayDecisionFactory | Решение на основе параметра URL HTTP-запроса |
HttpTrackHeader | HttpTrackHeaderGrayDecisionFactory | Решение на основе заголовка отслеживания HTTP-запросов |
HttpTrackParameter | HttpTrackParameterGrayDecisionFactory | Решение на основе параметров отслеживания URL HTTP-запросов |
TraceIpGray | TraceIpGrayDecisionFactory | Решение на основе IP-адреса отслеживания запросов |
TrackAttribute | TrackAttributeGrayDecisionFactory | Решение на основе атрибута отслеживания |
FlowRateGray | FlowRateGrayDecisionFactory | Решение, основанное на процентном соотношении потоков |
Если вышеперечисленные решения не удовлетворяют требованиям, можно расширить cn.springcloud.gray.decision.factory.GrayDecisionFactory
, реализовать собственную логику и опубликовать её в контейнере Spring. Например:
import cn.springcloud.gray.decision.GrayDecision;
import cn.springcloud.gray.decision.factory.AbstractGrayDecisionFactory;
import cn.springcloud.gray.request.GrayHttpTrackInfo;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
@Component
public class VersionGrayDecisionFactory extends AbstractGrayDecisionFactory<VersionGrayDecisionFactory.Config> {
public VersionGrayDecisionFactory() {
super(VersionGrayDecisionFactory.Config.class);
}
@Override
public GrayDecision
``` ## Серая трассировка
Логика серой трассировки реализуется классами, которые наследуются от cn.springcloud.gray.request.GrayInfoTracker.
На данный момент существуют следующие виды серой трассировки:
| Название | Класс реализации | Описание |
| --- | --- | --- |
| HttpReceive | HttpReceiveGrayInfoTracker | Получает информацию о серой трассировке, отправленную с вызывающей стороны. |
| HttpHeader | HttpHeaderGrayInfoTracker | Извлекает заголовок HTTP-запроса и записывает его в серую трассировку. |
| HttpIP | HttpIPGrayInfoTracker | Извлекает IP-адрес HTTP-запроса и записывает его в серую трассировку. |
| HttpMethod | HttpMethodGrayInfoTracker | Извлекает метод HTTP-запроса и записывает его в серую трассировку. |
| HttpParameter | HttpParameterGrayInfoTracker | Извлекает параметры URL из HTTP-запроса и записывает их в серую трассировку. |
| HttpURI | HttpURIGrayInfoTracker | Извлекает URI из HTTP-запроса и записывает его в серую трасировку.
### Реализация пользовательской серой трассировки
Если существующие решения не удовлетворяют требованиям, можно расширить класс cn.springcloud.gray.request.GrayInfoTracker и реализовать собственную логику. После этого необходимо опубликовать изменения в контейнере Spring. Пример кода:
``` java
import cn.springcloud.gray.request.GrayHttpTrackInfo;
import cn.springcloud.gray.request.TrackArgs;
import cn.springcloud.gray.web.tracker.HttpGrayInfoTracker;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Slf4j
@Component
public class UserIdGrayInfoTracker implements HttpGrayInfoTracker {
@Override
public void call(TrackArgs<GrayHttpTrackInfo, HttpServletRequest> args) {
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
String userId = null;
if (authentication.getPrincipal() instanceof UserDetails) {
UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal();
userId = springSecurityUser.getUsername();
} else if (authentication.getPrincipal() instanceof String) {
userId = (String) authentication.getPrincipal();
}
args.getTrackInfo().setAttribute("userId", userId);
}
}
Проект уже имеет ядро для работы с серой трассировкой. Если требуется интеграция с другими системами регистрации или балансировщиками нагрузки, достаточно реализовать соответствующий плагин. Spring Cloud Gray уже предоставляет плагины для Eureka, Ribbon, Feign, Zuul, Spring Cloud Gateway и Spring Cloud Stream. Для интеграции достаточно добавить соответствующие зависимости.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )