Sentinel 是一个流量控制、熔断降级和系统负载保护的开源库。它主要用于保护分布式系统的稳定性和高可用性。Sentinel 提供了以下几个关键特性:
- 流量控制:Sentinel 通过限流、流量整形和自适应流量控制等策略来实现对系统流量的控制。这有助于防止系统过载并确保系统在高流量下仍能正常运行。
- 熔断降级:Sentinel 可以根据预定义的规则,如响应时间和异常比率等,自动熔断和降级服务。这有助于在系统出现问题时,尽早发现并隔离故障,保证整体系统的稳定性。
- 实时监控:Sentinel 支持实时监控系统的运行状况,提供实时的流量控制、熔断降级等信息,帮助我们更好地了解系统的运行状态并及时排查问题。
- 系统负载保护:Sentinel 还可以通过自适应系统保护策略,如基于负载的自动限流和自适应响应时间等,来保护系统在高负载下的稳定性。
Nacos 是一个分布式服务配置、服务发现和动态服务管理的开源框架。它主要用于简化分布式系统的配置管理和服务治理。将 Sentinel 和 Nacos 结合使用具有以下优点:
- 统一配置管理:通过 Nacos,我们可以将 Sentinel 的配置(如流量控制规则、熔断降级策略等)统一管理和推送,这有助于简化分布式系统中的配置管理和更新。
- 动态规则推送:Nacos 可以实时推送 Sentinel 规则的变更,使得我们能够快速响应系统的变化,实现动态调整系统保护策略。
- 服务发现与治理:Nacos 提供了服务注册和发现功能,可以帮助我们实现服务间的动态调用。同时,通过结合 Sentinel,我们可以对服务间的调用实施流量控制、熔断降级等保护策略,提高整个系统的稳定性和可用性。
- 易于扩展和集成:Sentinel 和 Nacos 均具有良好的扩展性和易于集成的特点,可以方便地与其他微服务框架(如 Spring Cloud、Dubbo 等)结合使用,提供全面的服务治理和保护能力。
综上所述,Sentinel 和 Nacos 的结合可以为我们提供更加强大的微服务系统。
Sentinel官网:https://sentinelguard.io/zh-cn/docs/introduction.html
Nacos安装:K8S上搭建微服务注册中心nacos集群
Sentinel安装
镜像:bladex/sentinel-dashboard:1.7.2
Ingress
管理界面
默认账号密码:sentinel/sentinel
sentinel的这个面板主要是通过可视化的方式展示sentinel的配置规则与监控。我们在开发微服务的时候如果想实现sentinel的功能如容错熔断限流等。需要在代码的pom.xml中引用
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
然后在spring配置文件中增加配置:
spring:
cloud:
sentinel:
eager: true
log:
dir: ${logging.dir}/sentinel/${spring.profiles.active}/platform-cloud-service-data/${logging.instanceName}
datasource:
ds:
nacos:
server-addr: ${NACOS_CONFIG_SERVERS:127.0.0.1:8848}
dataId: ${spring.application.name}-sentinel.json
groupId: com.tinem
namespace: ${NACOS_NAMESPACE:7bc977a7-fbc5-4946-bc78-cceb84b14bc8}
rule-type: flow
transport:
client-ip: ${SENTINEL_CLIENT_IP}
port: ${SENTINEL_TRANSPORT:8719}
dashboard: ${SENTINEL_DASHBOARD:localhost:8858}
其中dataId是在nacos中配置文件的名字。
[
{
"resource": "/add.api", // 要限流的资源(例如,一个 API 路径)
"limitApp": "default", // 限流应用名称,通常设置为 "default"
"grade": 1, // 限流策略:0 代表线程数,1 代表 QPS
"count": 1, // 限流阈值:此处设置为 100 QPS
"strategy": 0, // 调用关系限流策略:0 代表直接限流,1 代表关联限流,2 代表链路入口限流
"controlBehavior": 0, // 限流效果:0 代表直接拒绝,1 代表 Warm Up,2 代表匀速排队
"clusterMode": false // 是否为集群限流:此处设置为单机限流
}
]
此配置表示platform-cloud-service-link服务的add接口qps限流为1。即一秒钟只能接受一次请求。
当我们通过脚本并发请求时可以发现只有一条请求成功。其他请求都将失败。
通过这种策略我们可以灵活配置我们服务的流控策略。通过nacos的动态配置机制可以实施修改我们的流控策略。