sentinel
1.Sentinel简介
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
1、sentinel的特征
- 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
- 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
- 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
-完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等
2、sentinel的主要特性
3、sentinel的主要优势和特性
- 轻量级,核心库无多余依赖,性能损耗小
- 方便接入,开源生态广泛
- 丰富的流量控制场景
- 易用的控制台,提供实时监控、机器发现、规则管理等能力
- 完善的扩展性设计,提供多样化的 SPI 接口,方便用户根据需求给 Sentinel 添加自定义的逻辑
4、sentinel与spring cloud Hystrix 对比
Sentinel | Hystrix | |
---|---|---|
隔离策略 | 信号量隔离 | 线程池隔离/信号量隔离 |
熔断降级策略 | 基于响应时间或失败比率 | 基于失败比率 |
实时指标实现 | 滑动窗口 | 滑动窗口(基于 RxJava) |
规则配置 | 支持多种数据源 | 支持多种数据源 |
扩展性 | 多个扩展点 | 插件的形式 |
基于注解的支持 | 支持 | 支持 |
限流 | 基于 QPS,支持基于调用关系的限流 | 有限的支持 |
流量整形 | 支持慢启动、匀速器模式 | 不支持 |
系统负载保护 | 支持 | 不支持 |
控制台 | 开箱即用,可配置规则、查看秒级监控、机器发现等 | 不完善 |
常见框架的适配 | Servlet、Spring Cloud、Dubbo、gRPC 等 | Servlet、Spring Cloud Netflix |
5、sentinel分为两个部分
- 核心库(Java 客户端): 不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持
- 控制台(Dashboard): 基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器
2.Sentinel安装与使用
在docker-compose加入一下配置:
sentinel:
image: gitegg-sentinel-dashboard
container_name: sentinel
environment:
TZ: Asia/Shanghai
build:
context: ./gitegg-sentinel-dashboard
dockerfile: Dockerfile
ports:
- "8718:8718"
volumes:
# 配置文件
- /docker/gitegg-sentinel-dashboard/logs/:/home/sentinel-dashboard/logs
restart: always
networks:
- mydev_default
本地打包后编写DockerFile运行;
3.服务打开sentinel的监控
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
我在项目单独在common模块下加入的sentinel
所以在其他应用模块直接引入gitegg-common-sentinel就可以了。
在公共配置中加入:
spring
cloud:
# sentinel 配置
sentinel:
# sentinel 开关
enabled: true
# 取消控制台懒加载
eager: true
filter:
url-patterns: /systemFeign/*,/system/*,/base/*
transport:
# dashboard控制台服务名 用于服务发现
# 如无此配置将默认使用下方 dashboard 配置直接注册
# server-name: gitegg-sentinel-dashboard
# 客户端指定注册的ip 用于多网卡ip不稳点使用
# 由于windows下docker网络不能用host所以这里指定了ip避免出现sentinel找不到服务检测
client-ip: 10.0.21.176
# 控制台地址 从1.3.0开始使用 server-name 注册
dashboard: localhost:8718
#使用nacos做数据源持久化
datasource:
ds2:
nacos:
namespace: @nacos.namespace@
data-type: json
server-addr: @nacos.server@
data-id: ${spring.application.name}-sentinel
group-id: @nacos.discovery.group@
rule-type: flow
持久化问题:
entinel控制台不具备同步修改Nacos配置的能力,而Nacos由于可以通过在客户端中使用Listener来实现自动更新。所以,在整合了Nacos做规则存储之后,需要知道在下面两个地方修改存在不同的效果:
Sentinel控制台中修改规则:仅存在于服务的内存中,不会修改Nacos中的配置值,重启后恢复原来的值。
Nacos控制台中修改规则:服务的内存中规则会更新,Nacos中持久化规则也会更新,重启后依然保持。
4.Sentinel的控制规则
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)-阿里云开发者社区 (aliyun.com)
标签:Nacos,Sentinel,dashboard,规则,sentinel,控制台 From: https://www.cnblogs.com/hinata/p/18234669