Здравствуйте, это колонка codetrend «Практический бой SpringCloud2023».
В этой статье кратко описывается использование Sentinel для управления текущими ограничениями в Spring Cloud 2023.
По мере того, как микросервисы становятся все более популярными, стабильность между сервисами и сервисами становится все более важной.
Sentinel — это компонент управления трафиком для распределенной, многоязычной гетерогенной сервисной архитектуры. Он в основном использует трафик в качестве точки входа, охватывая маршрутизацию трафика, управление трафиком, формирование трафика, деградацию автоматического выключателя, адаптивную защиту системы от перегрузки, защиту трафика в горячих точках и т. д. . Dimension, чтобы помочь разработчикам обеспечить стабильность микросервисов.
Sentinel также обеспечивает возможности адаптивной защиты на уровне системы.
Предотвращение лавин является важной частью защиты системы. При высокой нагрузке на систему, если запросы продолжают поступать, система может выйти из строя и не сможет отвечать. В кластерной среде балансировка сетевой нагрузки перенаправляет трафик, который должен передаваться с этой машины, на другие машины.
Если другие машины в это время также находятся в пограничном состоянии, возросший трафик приведет к сбою этой машины, и в конечном итоге весь кластер станет недоступным.
Spring Cloud Alibaba по умолчанию интегрирует Servlet, RestTemplate, FeignClient и Spring WebFlux для Sentinel.
В экосистеме Spring Cloud Sentinel не только заполняет пробелы Hystrix в Servlet и RestTemplate, но также полностью совместим с использованием Hystrix текущего ограничения и понижения версии в FeignClient, а также поддерживает гибкую настройку и настройку текущих правил ограничения и понижения версии во время выполнения.
Использование Sentinel можно разделить на две части:
Основной механизм работы Sentinel заключается в следующем:
Сентинел имеет следующие характеристики:
Консоль Sentinel представляет собой облегченную консоль, которая обеспечивает обнаружение компьютеров, мониторинг ресурсов одного компьютера в реальном времени, сводку ресурсов кластера и функции управления правилами. Для использования этих функций вам нужно всего лишь выполнить простую настройку приложения.
java -Dserver.port=10300 -Dcsp.sentinel.dashboard.server=localhost:10300 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
# Если есть конфликт с портом 8080, вы можете использовать -Dserver.port=новый порт Сделайте настройки.
spring:
cloud:
sentinel:
transport:
port: 10201
dashboard: localhost:10300
Конфигурация порта Spring.cloud.sentinel.transport.port здесь запустит Http-сервер на компьютере, соответствующем приложению, и сервер будет взаимодействовать с консолью Sentinel. Например, если текущее ограничивающее правило будет добавлено в консоль Sentinel, данные правила будут отправлены на Http-сервер для приема, а затем Http-сервер зарегистрирует правило в Sentinel.
spring-cloud-starter-alibaba-sentinel
。<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<dependencies>
<!-- Введение в основной пакет Sentinel -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
</dependency>
<!-- введение в Sentinel-Springboot -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
</project>
application.yml
,Конфигурация в основном spring.cloud.sentinel
Конфигурация ниже.spring.application.name: banana-client4-sentinel
spring:
cloud:
sentinel:
transport:
port: 10201
dashboard: localhost:10300
zookeeper:
connect-string: localhost:2181
http://localhost:10200/client4/swagger-ui.html
, введите пароль учетной записи yulin/123yl. Вы можете получить доступ к последней версии документации по интерфейсу и проверить, успешно ли включено ограничение тока.@Service
public class TestService {
@SentinelResource(value = "sayHello")
public String sayHello(String name) {
return "Hello, " + name;
}
}
@RestController
public class TestController {
@Autowired
private TestService service;
@GetMapping(value = "/hello/{name}")
public String apiHello(@PathVariable String name) {
return service.sayHello(name);
}
}
http://localhost:10200/client4/hello
QPS равен 5. Проверьте успешность текущего ограничения с помощью следующего сценария:import requests
token_list =[]
for j in range(10):
token_list.append(str(j)+'hello')
response = requests.get('http://localhost:10200/client4/hello/'+str(j)+'hello','hello')
print(response.text)
Выходной документ выглядит следующим образом:
Hello, 0hello
Hello, 1hello
Hello, 2hello
Hello, 3hello
Hello, 4hello
Blocked by Sentinel (flow limiting)
Blocked by Sentinel (flow limiting)
Blocked by Sentinel (flow limiting)
Blocked by Sentinel (flow limiting)
Blocked by Sentinel (flow limiting)
Адаптация Feign интегрирована в Spring Cloud Alibaba, и вы можете обратиться к документу Spring Cloud Alibaba Sentinel для доступа.
Sentinel Адаптированный Feign компоненты. Если вы хотите использовать его, помимо импорта spring-cloud-starter-alibaba-sentinel
Помимо зависимостей, необходимо также 2 шаги:
feign.sentinel.enabled=true
spring-cloud-starter-openfeign
Зависимость делает Sentinel starter в Класс автоматической конфигурации вступит в силу:<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, configuration = FeignConfiguration.class)
public interface EchoService {
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
String echo(@PathVariable("str") String str);
}
class FeignConfiguration {
@Bean
public EchoServiceFallback echoServiceFallback() {
return new EchoServiceFallback();
}
}
class EchoServiceFallback implements EchoService {
@Override
public String echo(@PathVariable("str") String str) {
return "echo fallback";
}
}
GET:http://service-provider/echo/{str}
。 Просто настройте ограничение тока ресурса через верно.Если вы хотите следовать Sentinel Starter Для совместного использования необходимо добавить spring-cloud-alibaba-sentinel-gateway
Зависимости необходимо добавлять одновременно. spring-cloud-starter-gateway
зависеть от spring-cloud-alibaba-sentinel-gateway
в модуле Spring Cloud Gateway Класс автоматической конфигурации вступит в силу:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
В то же время, пожалуйста spring.cloud.sentinel.filter.enabled
Элемент конфигурации установлен на ложь (если вы видите URL ресурс, то есть этот элемент конфигурации не установлен на false)。Sentinel Детализация управления потоком шлюза по умолчанию равна route Размеры и настройка API Группировка измерений, не поддерживается по умолчанию. URL зернистость.
Документация взята из документации Sentinel. Разработка и объяснение здесь не будут проводиться подробно, а настройка и объяснение будут выполнены позже на бизнес-уровне шлюза.
Полную информацию об исходном коде можно просмотретьсуществоватьgiteeилиgithubИскать наr0ad
。
Исследования и практика от девяти ведущих программистов полного стека продолжаются.
Добро пожаловать, подпишитесь или поставьте лайк~