Sentinel与Nacos强强联合,构建微服务稳定性基石的重要实践

本文主要是介绍Sentinel与Nacos强强联合,构建微服务稳定性基石的重要实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 一、简介

        Sentinel 作为一款强大的流量控制组件,能够对系统入口流量进行精准控制,有效防止服务因突发流量冲击引起服务雪崩,进而导致服务瘫痪,确保服务的稳定性和可靠性。

        Nacos 作为配置管理和服务发现平台,实现了配置的集中化存储和管理,使得微服务的配置变更更为灵活、高效,减少了了因配置错误导致的故障。

        Sentinel 与 Nacos的整合后可以从 Nacos 获取限流规则等配置信息,实现配置动态更新,无需重启服务即可调整流量控制策略,提高了运维效率和和灵活性, 

        总而言之,Sentinel 与 Nacos的整合不仅强化了微服务的流量控制能力,还实现了配置的集中化、动态化管理,是提升系统稳定性和运维效率的关键措施,对于构建高可用、易维护的微服务架构具有深远的意义。

        关于 Sentinel 与 Nacos 的详细介绍已经在在往期的文章中介绍过,这篇文章介绍如何将二者整合,构建稳定的微服务,增强服务稳定性。

        sentinel 主要特性

二、集成 Sentinel 与 Nacos

        项目结构如下

       2.1 依赖添加

        添加相关依赖,这里只添加需要的依赖,关于 SpringBoot 与 SpringCloud 的依赖可自行添加,添加 sentinel 与 Nacos 依赖。

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<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>
<!-- sentinel 为扩展 Nacos 添加的数据源依赖 -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

        2.2 服务配置添加

        首先在 bootstrap.yml 中添加依赖,在 Spring Boot 规范中,bootstrap 文件通常被用于应用上下文引导,bootstrap.yml 文件加载的优先级要高于 application.yml。而在 Nacos 配置中通常会添加数据库等配置,这些数据库配置用于初始化其他组件,所以必须保证在其他组件启动之前就获取到这些基础配置,随后才能初始。

        具体的配置如下:

spring:application:name: sentinel-demo  # 服务名cloud:nacos:discovery:server-addr: localhost:8848config:namespace: public # 这里简化一下,直接在public中添加配置,没有区分环境file-extension: yamlgroup: DEFAULT_GROUPserver-addr: localhost:8848
server:port: 8081

        2.3 Nacos 配置文件添加

        在 Nacos 中添加相应的配置文件,Nacos 的配置文件默认命名规则为:{spring.application.name}-{profile}.yaml,其中 {profile} 是 Spring 的环境配置,这里没有区分环境变量,默认在 public 命名空间下。

        除了系统的配置文件外,还需要配置一个 sentinel 的配置文件,用来设置限流规则,具体内容如下

        sentinel-demo 配置文件内容为:

  spring:cloud:sentinel:eager: truetransport:dashboard: localhost:8080  # 指定 sentinel dashboard 地址datasource:flow: nacos:server-addr: localhost:8848data-id: ${spring.application.name}-flow-rules # 指定限流配置文件group-id: DEFAULT_GROUP data-type: json  # 规则数据格式rule-type: flow  # 规则类型

           sentinel-demo-flow-rules 配置文件内容为:

[{"resource": "/sentinel/test","count": 1,"grade": 1,"limitApp": "default","strategy": 0,"controlBehavior": 0,"clusterMode": false}
]
  •  resource:资源名称,这是限流规则所针对的资源标识符,可以是任何字符串,但通常建议使用与业务相关的、具有明确语义的名称,如服务名、接口路径等。
  • count:限流阈值,即在单位时间内允许通过的请求数量。例如,如果设置为10,那么在指定的统计时间窗口内最多允许10个请求通过。
  • grade:流量控制的等级,决定限流规则的触发条件。
    • 0 代表 QPS 的流控
    • 1 代表基于线程数的流控,即同时允许执行的线程数不超过设定值
  • limitApp:流控针对的应用,用于指定规则针对于哪个应用,如果是 default 则表示所有的应用都生效。
  • strategry:流控模式,决定如何进行流控控制
    • 0 代表直接模式,达到限流条件后,新的请求直接被拒绝
    • 1 代表关联模式,当关联资源达到限流条件后出发本资源的流控
    • 2 代表链路模式,仅对指定的调用链路生效
  • controlBehavior:流控效果,定义了达到限流条件时的具体处理方式。
    • 0 表示快速失败,直接拒绝请求
    • 1 表示 warm up,即预热模式,逐步增加允许的请求量知道达到设定的阈值
    • 2 表示匀速排队,请求被放入队列中以匀速处理,超出队列容量的请求被拒绝
  • clusterMode:是否开启集群流控,当设置为 true 时,表示这时一个集群限流规则,需要与其他 Sentinel 客户端协作进行流量控制。

        2.4 接口编写

        这仅是一个测试接口,比较简单

@RestController
public class TestController {@RequestMapping(value = "/sentinel/test")public String testController() {return "ok";}
}

   三、流控验证

        启动服务,登录 Sentinel 控制台,可以看到如下界面

        在浏览器快速访问测试接口,可以看到实时监控如下

        3.1 sentinel 控制面板

         实现监控:展示服务实时流量指标,如每秒请求数(QPS)、通过请求数、被拒绝的请求数。

        簇点链路:显示服务中各个 API 或资源的调用链路,可以查看每个链路的流量、响应时间和异常比例,有助于快速定位问题所在。

        流控规则:创建、编辑、删除流量控制规则,包括设置资源的限流规则、限流模式(直接拒绝、预热模型、排队模型)、时间窗口等。

        熔断规则:配置熔断策略,包括调用比例、异常比例、RT 阈值等出发条件,以及熔断后的恢复策略。

        热点规则:针对特定参数值进行流量控制,可以设置参数的阈值和限流策略。

        系统规则:设置系统级别的保护规则,如CPU使用率、线程数等阈值,以保护系统免受过载影响。 

        授权规则:管理访问权限,定义那些客户端或 IP 可以访问特定规则 。

四、总结

        Sentinel 与 Nacos的整合不仅强化了微服务的流量控制能力,还实现了配置的集中化、动态化管理,是提升系统稳定性和运维效率的关键措施,对于构建高可用、易维护的微服务架构具有深远的意义。

往期经典推荐

云原生:Kubernetes下的Java应用部署实战详解_kubernetes 创建java微服务-CSDN博客

微服务拆分:打造高性能、高扩展的未来架构-CSDN博客

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级_sentinel限流容错-CSDN博客

一文看懂Nacos如何实现高效、动态的配置中心管理_nacos 动态配置-CSDN博客

Spring Cloud + Nacos 引领服务治理新航向_nacous服务治理-CSDN博客

这篇关于Sentinel与Nacos强强联合,构建微服务稳定性基石的重要实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024355

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务