Sentinel: описание интеграции
Введение Sentinel — это защитник трафика для распределённых систем.
Зависимости Обычно пакеты уже включены в проект через free-bsf-starter, дополнительная настройка не требуется.
<dependency>
<artifactId>free-bsf-sentinel</artifactId>
<groupId>com.free.bsf</groupId>
<version>1.7.1-SNAPSHOT</version>
</dependency>
Конфигурация
## bsf sentinel 集成
##sentinel服务的启用开关,[必须],默认false
bsf.sentinel.enabled=false
#sentinel dashboard 地址,[必须],默认为空
csp.sentinel.dashboard.server=localhost:8080
#bsf sentinel web 允许限流,默认开启
bsf.sentinel.web.enabled=true
#web 允许限流匹配,*类似like匹配,[必须],默认为空,*表示所有
bsf.sentinel.web.includeResource=*
# bsf sentinel feign 允许限流,默认开启
bsf.sentinel.feign.enabled=true
#feign 允许限流匹配,*类似like匹配,[必须],默认为空,*表示所有
bsf.sentinel.feign.includeResource=*
#flowRule规则配置,1...n,可以配置多个,默认为空,限流规则参考: https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html
bsf.sentinel.flowRule1={"resource":"","limitApp":"default","grade":1,"count":0.0,"strategy":0,"controlBehavior":0,"warmUpPeriodSec":10,"maxQueueingTimeMs":500,"clusterMode":false}
bsf.sentinel.degradeRule1={"resource":"","grade":0,"count":0.0,"timeWindow":0,"minRequestAmount":5,"slowRatioThreshold":1.0,"statIntervalMs":1000}
bsf.sentinel.systemRule1={"highestSystemLoad":-1.0,"highestCpuUsage":-1.0,"qps":-1.0,"avgRt":-1,"maxThread":-1}
bsf.sentinel.authorityRule1={"resource":"","strategy":0}
# bsf sentinel @SentinelResource 注解支持限流,默认开启
bsf.sentinel.resourceAspect.enabled=true
Подробное описание правил
Field | 说明 | 默认值 |
---|---|---|
resource | 资源名,资源名是限流规则的作用对象,如"/attribute/list" | |
count | 限流阈值 | 0.0 |
grade | 限流阈值类型,QPS-0 或线程数模式-1 | QPS |
limitApp | 流控针对的调用来源,default-表示不区分调用来源、{some_origin_name}-表示只对该调用者的请求进行流量控制、other-表示对除了{some_origin_name}的请求进行流量控制 | default |
strategy | 调用关系限流策略:直接-0、链路-2、关联-1 | 根据资源本身(直接) |
controlBehavior | 流控效果(直接拒绝-0 / 排队等待-1 / 慢启动模式-2),不支持按调用关系限流 | 直接拒绝 |
Field | 说明 | 默认值 |
---|---|---|
resource | 资源名,即规则的作用对象 | |
grade | 熔断策略,支持慢调用比例-0/异常比例-1/异常数策略-2 | 慢调用比例 |
count | 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值 | |
timeWindow | 熔断时长,单位为 s | |
minRequestAmount | 熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入) | 5 |
statIntervalMs | 统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入) | 1000 ms |
slowRatioThreshold | 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入) |
Field | 说明 | 默认值 |
---|---|---|
highestSystemLoad |
load1 触发值,用于触发自适应控制阶段 |
-1 (не действует) |
avgRt | 所有入口流量的平均响应时间 | -1 (не действует) |
maxThread | 入口流量的最大并发数 | -1 (не действует) |
qps | 所有入口资源的 QPS | -1 (не действует) |
highestCpuUsage | текущий уровень использования CPU системы (0.0–1.0) | -1 (не действует) |
Field | 说明 | 默认值 |
---|---|---|
resource | 资源名,即规则的作用对象 | |
strategy | 限制模式,белый список-0,чёрный список-1 | белый список |
limitApp | 流控针对的调用来源 |
default , представляет собой не различающий источник вызова |
// 原函数 | ||
@SentinelResource(value = "hello", blockHandler = "exceptionHandler", fallback = "helloFallback") | ||
public String hello(long s) { |
return String.format("Hello at %d", s);
}
// Fallback 函数,函数签名与原函数一致或加一个 Throwable 类型的参数. public String helloFallback(long s) { return String.format("Halooooo %d", s); }
// Block 异常处理函数,参数最后多一个 BlockException,其余与原函数一致. public String exceptionHandler(long s, BlockException ex) { // Do some log here. ex.printStackTrace(); return "Oops, error occurred at " + s; }
// Здесь отдельно демонстрируется конфигурация blockHandlerClass. // Соответствующая функция handleException должна находиться в классе ExceptionUtil и обязательно быть функцией public static. @SentinelResource(value = "test", blockHandler = "handleException", blockHandlerClass = {ExceptionUtil.class}) public void test() { System.out.println("Test"); }
### Выбор

### Продвинутое чтение
#### Объяснение принципа
Демонстрация базового примера Sentinel для ограничения потока с интеграцией Apollo, поддерживающего ограничение потока Feign и веб-запросов. В отличие от обычной интеграции ограничения потока Apollo на рынке, BSF является собственной интеграцией Apollo. Поэтому конфигурация также отличается.
Чтобы максимально уменьшить влияние Sentinel на бизнес-производительность, вводится фильтрация запросов includeResource, чтобы избежать возможности ограничения потока Sentinel. Основная цель панели мониторинга по-прежнему заключается в мониторинге и ограниченном управлении ограничением потока.
* Постоянная конфигурация:
Все постоянные конфигурации ограничения потока связаны с Apollo и могут быть немедленно отправлены на сторону приложения после изменения конфигурации Apollo.
* Временная конфигурация ограничения потока:
Может быть настроена через панель мониторинга и будет действовать до тех пор, пока служба приложения или панель мониторинга не будут перезапущены. После перезапуска она становится недействительной.
#### Прочее
Эта интеграция не была тщательно проверена и протестирована.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )