sentinel 介绍:
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel 分为两个部分:
核心库(Java 客户端:不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
控制(Dashboard:基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
sentinel与 hystrix 的对比
功能 | Sentinel | Hystrix |
---|---|---|
隔离策略 | 基于并发数 | 线程池隔离/信号量隔离 |
熔断降级策略 | 基于响应时间或失败比率 | 基于失败比率 |
实时指标实现 | 滑动窗口 | 滑动窗口(基于 RxJava) |
规则配置 | 支持多种数据源 | 支持多种数据源 |
扩展性 | 多个扩展点 | 插件的形式 |
基于注解的支持 | 即将发布 | 支持 |
调用链路信息 | 支持同步调用 | 不支持 |
限流 | 基于 QPS / 并发数,支持基于调用关系的限流 | 不支持 |
流量整形 | 支持慢启动、匀速器模式 | 不支持 |
系统负载保护 | 支持 | 不支持 |
实时监控 API | 各式各样 | 较为简单 |
控制台 | 开箱即用,可配置规则、查看秒级监控、机器发现等 | 不完善 |
常见框架的适配 | Servlet、Spring Cloud、Dubbo、gRPC 等 | Servlet、Spring Cloud Netflix |
sentinel 控制端安装
下载地址:https://github.com/alibaba/Sentinel/releases
安装环境:java1.8
启动指令
java -Dserver.port=8858-Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
由于GitHub下载速度过慢,改用了docker 容器安装
docker pull bladex/sentinel-dashboard
docker run -d -p 8858:8858 -name sentinel bladex/sentinel-dashboard
使用 docker ps 查看容器是否运行
打开默认地址localhost:8858 进入控制页面
访问8858端口即可访问sentinel后端管理界面。账号和密码都是sentinel。
配合nocs 使用
创建A服务 ,pom文件中引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
yml配置文件
server:
port: 8099
spring:
application:
name: a-server
#ncaos地址
cloud:
nacos:
discovery:
server-addr: 39.105.151.241:8848
#sentinel地址
sentinel:
transport:
dashboard: 39.105.151.241:8858
#微服务所在服务器ip sentinel监控程序 根据client-ip+port端口拉取信息
client-ip:localhsot
#微服务节点,sentinel服务会主动拉取该端口数据
port:8719
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
启动项目 打开localhost:8858 查看
查看监控情况
注意:如果使用云主机服务器,需要把微服务jar部署到云服务器上,然后sentienl会主动拉取微服务的监控数据,如果微服务在本地winds上 云服务器上的sentinel无法访问winds上的微服务,会导致簇点链路下找不到微服务资源路径