天天看点

K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

作者:简简单单程序员

Sentinel 是一个流量控制、熔断降级和系统负载保护的开源库。它主要用于保护分布式系统的稳定性和高可用性。Sentinel 提供了以下几个关键特性:

  1. 流量控制:Sentinel 通过限流、流量整形和自适应流量控制等策略来实现对系统流量的控制。这有助于防止系统过载并确保系统在高流量下仍能正常运行。
  2. 熔断降级:Sentinel 可以根据预定义的规则,如响应时间和异常比率等,自动熔断和降级服务。这有助于在系统出现问题时,尽早发现并隔离故障,保证整体系统的稳定性。
  3. 实时监控:Sentinel 支持实时监控系统的运行状况,提供实时的流量控制、熔断降级等信息,帮助我们更好地了解系统的运行状态并及时排查问题。
  4. 系统负载保护:Sentinel 还可以通过自适应系统保护策略,如基于负载的自动限流和自适应响应时间等,来保护系统在高负载下的稳定性。

Nacos 是一个分布式服务配置、服务发现和动态服务管理的开源框架。它主要用于简化分布式系统的配置管理和服务治理。将 Sentinel 和 Nacos 结合使用具有以下优点:

  1. 统一配置管理:通过 Nacos,我们可以将 Sentinel 的配置(如流量控制规则、熔断降级策略等)统一管理和推送,这有助于简化分布式系统中的配置管理和更新。
  2. 动态规则推送:Nacos 可以实时推送 Sentinel 规则的变更,使得我们能够快速响应系统的变化,实现动态调整系统保护策略。
  3. 服务发现与治理:Nacos 提供了服务注册和发现功能,可以帮助我们实现服务间的动态调用。同时,通过结合 Sentinel,我们可以对服务间的调用实施流量控制、熔断降级等保护策略,提高整个系统的稳定性和可用性。
  4. 易于扩展和集成: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

K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

Ingress

K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

管理界面

默认账号密码:sentinel/sentinel

K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

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  // 是否为集群限流:此处设置为单机限流
  }
]           
K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

此配置表示platform-cloud-service-link服务的add接口qps限流为1。即一秒钟只能接受一次请求。

当我们通过脚本并发请求时可以发现只有一条请求成功。其他请求都将失败。

K8S搭建微服务灵魂组件sentinel并通过Nacos动态配置

通过这种策略我们可以灵活配置我们服务的流控策略。通过nacos的动态配置机制可以实施修改我们的流控策略。

继续阅读