springcloud 中 sentinel 配置参考地址: https://gitee.com/fhh/fans-cloud-alibaba
Первый шаг: скачать код, затем использовать maven для упаковки sentinel-dashboard-nacos проекта.
Второй шаг: после завершения упаковки будет создан jar-пакет sentinel-dashboard-nacos-1.7.2.jar.
Скачать sentinel-dashboard-nacos-1.7.2.jar можно по ссылке: https://gitee.com/fhh/fans-sentinel-master/blob/master/jar/sentinel-dashboard-nacos-1.7.2.jar
Третий шаг: затем используйте следующую команду для запуска в doc или командной строке Linux (или запустите непосредственно в инструменте):
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar -Xms512m -Xmx512m sentinel-dashboard-nacos-1.7.2.jar
Sentinel-dashboard-nacos — это Sentinel Dashboard, который был модифицирован и теперь может синхронизировать правила с Nacos.
Код реализации:
Давайте посмотрим, как реализовать конкретные шаги модификации, здесь мы ссылаемся на тестовые примеры в исходном коде Sentinel Dashboard. Однако, учитывая использование Spring Cloud Alibaba, были внесены некоторые изменения.
Первый шаг: измените зависимость sentinel-datasource-nacos в pom.xml, удалите комментарий test, чтобы его можно было использовать в основной программе.
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<!--<scope>test</scope>-->
</dependency>
Второй шаг: найдите следующий код в resources/app/scripts/directives/sidebar/sidebar.html:
<li ui-sref-active="active">
<a ui-sref="dashboard.flowV1({app: entry.app})">
<i class="glyphicon glyphicon-filter"></i> 流控规则
</a>
</li>
Измените его на:
<li ui-srf-active="active">
<a ui-sref="dashboard.flow({app: entry.app})">
<i class="glyphicon glyphicon-filter"></i> 流控规则
</a>
</li>
Третий шаг: создайте новый пакет nacos под com.alibaba.csp.sentinel.dashboard.rule для написания расширений, специфичных для Nacos.
Четвёртый шаг: создайте класс конфигурации Nacos, код выглядит следующим образом:
@Configuration
public class NacosConfig {
@Bean
public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
return JSON::toJSONString;
}
@Bean
public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
return s -> JSON.parseArray(s, FlowRuleEntity.class);
}
@Bean
public ConfigService nacosConfigService() throws Exception {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "localhost");
//properties.put(PropertyKeyConst.NAMESPACE, "130e71fa-97fe-467d-ad77-967456f2c16d");
return ConfigFactory.createConfigService(properties);
}
}
Если вы используете изолированную среду namespace, вы можете добавить конфигурацию в метод nacosConfigService, например: properties.put(PropertyKeyConst.NAMESPACE, «130e71fa-97fe-467d-ad77-967456f2c16d»);
Пятый шаг: реализуйте извлечение конфигурации из Nacos.
@Component("flowRuleNacosProvider")
public class FlowRuleNacosProvider implements DynamicRuleProvider<List<FlowRuleEntity>> {
@Autowired
private ConfigService configService;
@Autowired
private Converter<String, List<FlowRuleEntity>> converter;
public static final String FLOW_DATA_ID_POSTFIX = "-sentinel";
public static final String GROUP_ID = "DEFAULT_GROUP";
@Override
public List<FlowRuleEntity> getRules(String appName) throws Exception {
String rules = configService.getConfig(appName + FLOW_DATA_ID_POSTFIX, GROUP_ID, 3000);
if (StringUtil.isEmpty(rules)) {
return new ArrayList<>();
}
return converter.convert(rules);
}
}
В методе getRules параметр appName — это имя службы в Sentinel. Метод configService.getConfig используется для получения информации о конфигурации из Nacos. DataId и GroupId соответствуют конфигурации при использовании клиентом. Например, в этом примере они соответствуют конфигурации, описанной в статье «Использование Nacos для хранения правил Sentinel», которая выглядит следующим образом:
spring.cloud.sentinel.datasource.ds.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-sentinel
Обратите внимание, что DataId и GroupId должны соответствовать друг другу.
Шестой шаг: реализуем отправку конфигурации в Nacos.
@Component("flowRuleNacosPublisher")
public class FlowRuleNacosPublisher implements DynamicRulePublisher<List<FlowRuleEntity>> {
@Autowired
private ConfigService configService;
public static final String
``` **Здесь большая часть содержимого совпадает с реализацией предыдущего шага. Главное — не перепутать DataId и GroupId при хранении конфигурации в Nacos.**
**Седьмой шаг**: измените Bean, который внедряется в DynamicRuleProvider и DynamicRulePublisher в com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2, на реализацию для Apollo, которую мы написали:
```java
@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
По мере того как распределённые системы становятся всё более популярными, надёжность взаимодействия между сервисами становится важнее, чем когда-либо прежде. Sentinel использует «поток» в качестве точки прорыва и работает в нескольких областях, включая управление потоком, прерывание цепи и системную адаптивную защиту, чтобы гарантировать надёжность микросервисов.
Sentinel имеет следующие особенности:
— Богатые применимые сценарии: Sentinel широко используется в Alibaba и охватывает почти все основные сценарии во время шопинга Double-11 (11.11) за последние 10 лет, такие как «Second Kill», где необходимо ограничить всплеск трафика потока, чтобы соответствовать пропускной способности системы, отсечение пиковых сообщений и заполнение долин, прерывание цепи для ненадёжных нижестоящих сервисов, управление кластерным потоком и т. д. — Мониторинг в реальном времени: Sentinel также предоставляет возможность мониторинга в реальном времени. Вы можете видеть информацию о времени выполнения отдельной машины в режиме реального времени и агрегированную информацию о выполнении кластера с менее чем 500 узлами. — Широко распространённая экосистема с открытым исходным кодом: Sentinel предоставляет готовые интеграции с часто используемыми фреймворками и библиотеками, такими как Spring Cloud, Dubbo и gRPC. Вы можете легко использовать Sentinel, просто добавив зависимость адаптера к своим сервисам. — Различные расширения SPI: Sentinel предлагает простые в использовании интерфейсы расширений SPI, которые позволяют быстро настраивать логику, например, пользовательское управление правилами, адаптацию источников данных и так далее.
Обзор функций:
Смотрите документацию на китайском языке для получения информации на китайском.
См. Wiki для полной документации, примеров, постов в блоге, операционных деталей и другой информации.
Sentinel предоставляет модули интеграции для различных фреймворков с открытым исходным кодом (например, Spring Cloud, Apache Dubbo, gRPC, Spring WebFlux, Reactor) и сервисной сетки. Вы... Ландшафт экосистемы
Быстрый старт
Ниже представлена простая демонстрация, которая поможет новым пользователям использовать Sentinel всего за 3 шага. Она также показывает, как отслеживать эту демонстрацию с помощью панели мониторинга.
Примечание: Sentinel требует Java 7 или более поздней версии.
Если ваше приложение создано в Maven, просто добавьте следующую зависимость в pom.xml
.
<!-- замените здесь на последнюю версию -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.7.1</version>
</dependency>
Если нет, вы можете загрузить JAR в Maven Center Repository.
Оберните свой фрагмент кода через Sentinel API: SphU.entry(resourceName)
. В приведённом ниже примере это System.out.println("hello world");
:
try (Entry entry = SphU.entry("HelloWorld")) {
// Ваша бизнес-логика здесь.
System.out.println("hello world");
} catch (BlockException e) {
// Обработка отклонённого запроса.
e.printStackTrace();
}
// try-with-resources автоматически завершает работу
На этом этапе модификация кода завершена. Мы также предоставляем модуль поддержки аннотаций для более простого определения ресурса.
Если мы хотим ограничить доступ к ресурсу, мы можем установить правила для этого ресурса. Следующий код определяет правило, которое ограничивает доступ к ресурсу максимум до 20 раз в секунду.
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("HelloWorld");
// устанавливаем лимит qps на 20
rule.setCount(20);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rules.add(rule);
FlowRuleManager.loadRules(rules);
Для получения дополнительной информации обратитесь к разделу «Как использовать».
После запуска демонстрации в течение некоторого времени вы сможете увидеть следующие записи в ~/logs/csp/${appName}-metrics.log.{date}
(при использовании обработчика файлов журнала по умолчанию DateFileLogHandler
).
|--timestamp-|------date time----|-resource-|p |block|s |e|rt |occupied
1529998904000|2018-06-26 15:41:44|HelloWorld|20|0 |20|0|0 |0
1529998905000|2018-06-26 15:41:45|HelloWorld|20|5579 |20|0|728 |0
1529998906000|2018-06-26 15:41:46|HelloWorld|20|15698|20|0|0 |0
1529998907000|2018-06-26 15:41:47|HelloWorld|20|19262|20|0|0 |0
1529998908000|2018-06-26 15:41:48|HelloWorld|20|19502|20|0|0 |0
1529998909000|2018-06-26 15:41:49|HelloWorld|20|18386|20|0|0 |0
p обозначает входящий запрос, block — заблокированный правилами, success — успешно обработанный Sentinel, e — количество исключений, rt — среднее время отклика (мс), occupied — указывает на занятые квоты с версии 1.5.0, которые позволяют нам бронировать больше, чем один выстрел при входе.
Это показывает, что демонстрация может печатать «hello world» 20 раз в секунду. Дополнительные примеры и информацию можно найти в разделе «Как использовать». Принципы работы Sentinel описаны в разделе «Как это работает». Образцы можно найти в модуле sentinel-demo.
Sentinel также предоставляет простое приложение панели мониторинга, на котором вы можете отслеживать клиентов и настраивать правила в режиме реального времени.
Подробнее см. раздел «Панель мониторинга».
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )