1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chejiangyi-free-bsf-all

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 10:17 704b62b

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

Подробное описание правил

FlowRule — правила управления потоком

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),不支持按调用关系限流 直接拒绝

DegradeRule — правило снижения качества обслуживания

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 引入)

SystemRule — системные правила защиты

Field 说明 默认值
highestSystemLoad load1 触发值,用于触发自适应控制阶段 -1 (не действует)
avgRt 所有入口流量的平均响应时间 -1 (не действует)
maxThread 入口流量的最大并发数 -1 (не действует)
qps 所有入口资源的 QPS -1 (не действует)
highestCpuUsage текущий уровень использования CPU системы (0.0–1.0) -1 (не действует)

AuthorityRule — правила контроля доступа

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"); }

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

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/chejiangyi-free-bsf-all.git
git@api.gitlife.ru:oschina-mirror/chejiangyi-free-bsf-all.git
oschina-mirror
chejiangyi-free-bsf-all
chejiangyi-free-bsf-all
3.4-SNAPSHOT