【微服务保护】初识 Sentinel —— 探索微服务雪崩问题的解决方案,Sentinel 的安装部署以及将 Sentinel 集成到微服务项目

文章目录

  • 前言
  • 一、雪崩问题及其解决方案
    • 1.1 什么是雪崩问题
    • 1.2 雪崩问题的原因
    • 1.3 解决雪崩问题的方法
    • 1.4 总结
  • 二、初识 Sentinel 框架
    • 2.1 什么是 Sentinel
    • 2.2 Sentinel 和 Hystrix 的对比
  • 三、Sentinel 的安装部署
  • 四、集成 Sentinel 到微服务


前言

微服务架构在现代软件开发中变得越来越重要。它通过将大型应用程序拆分成小而自治的服务单元,使开发、部署和维护变得更加灵活和高效。然而,微服务架构也引入了一些新的挑战,其中之一就是“雪崩”问题。

在这篇文章中,我们将探讨什么是雪崩问题,以及如何应对它。 雪崩问题是指在微服务架构中,一个微服务的故障可能会引发级联效应,导致整个系统不可用。这个问题可能会对业务造成严重影响,因此了解如何预防和处理雪崩问题至关重要。

此外,还将介绍 Sentinel 框架,这是一款由阿里巴巴开源的微服务流量控制组件。 Sentinel 可以帮助我们实时监控微服务的性能,并提供流量控制和熔断降级功能,以减轻雪崩问题的影响。然后,我还将探讨 Sentinel 的功能和优势,并演示如何将其集成到微服务项目中。

一、雪崩问题及其解决方案

1.1 什么是雪崩问题

在微服务架构中,各个微服务之间的依赖错综复杂,一个微服务通常需要依赖多个其他微服务,形成了复杂的调用关系,如下图所示:

微服务依赖关系

在这种情况下,如果某个微服务(如服务I)发生故障,它所依赖的微服务(如A、P、H等)的业务也会受到阻塞。初始阶段,只有依赖服务I的部分业务受到影响,而不依赖服务I的业务似乎不受影响:

部分业务受影响

然而,由于依赖服务I的业务请求被阻塞,这导致Tomcat服务器上的线程不会释放,从而导致越来越多的用户请求堆积,进一步导致越来越多的线程被阻塞:

线程堆积

服务器的线程和并发处理能力是有限的,如果请求持续阻塞,最终会导致服务器资源耗尽,使得所有其他服务也变得不可用,从而导致整个系统陷入瘫痪,这就是所谓的"雪崩"现象:

雪崩效应

在雪崩现象中,一个微服务的故障会引发级联效应,使得整个系统不可用。为了防止雪崩问题的发生,需要采取一些措施来提高系统的稳定性和可用性。接下来,将讨论雪崩问题的原因以及解决方案。

1.2 雪崩问题的原因

雪崩问题通常由以下几个因素引起:

  1. 微服务依赖关系: 微服务之间的复杂依赖关系使得一个微服务的故障可能影响到许多其他微服务。这种依赖关系网络增加了系统的脆弱性。

  2. 延迟积累 :当一个微服务变得不可用或响应变慢时,请求会在等待响应的过程中逐渐积累。这会导致服务器资源不断耗尽,进而导致系统崩溃。

  3. 高并发请求 :随着时间的推移,越来越多的请求会积累,而且这些请求通常是高并发的。这会导致服务器的线程资源耗尽,无法响应新的请求。

1.3 解决雪崩问题的方法

解决雪崩问题的常见方式有四种:

1. 超时处理

超时处理是通过设置合理的请求超时时间来应对雪崩问题。当一个微服务无法及时响应请求时,系统会设定一个最大允许等待时间。如果请求处理时间超过了这个时间限制,系统会立即返回错误信息,而不会无限制地等待。这可以防止请求积累并占用系统资源。

超时处理

2. 仓壁模式

仓壁模式是一种线程隔离的策略,它通过限制每个业务能够使用的线程数来避免耗尽整个Tomcat服务器的资源。在这种模式下,每个微服务的线程资源被隔离开,因此如果一个微服务出现异常,只会影响到其自身的线程,而不会影响其他微服务的线程。

仓壁模式

例如,如上图所示,服务A依赖于服务B和服务C,在服务A中为服务B和服务C分别分配了各自的线程池,即使其中一个微服务发生异常,也只会浪费该微服务的线程,不会影响其他微服务。

3. 熔断降级

熔断降级是通过断路器来统计业务执行的异常比例,当异常比例超出阈值时,会触发熔断机制,拦截访问该业务的所有请求。这样可以避免异常的微服务继续接受请求,减轻其负载,同时也阻止了可能导致雪崩的请求传递。

断路器会统计访问某个服务的请求数量以及异常比例,如下图所示:

断路器统计

当异常比例过高时,认为服务存在导致雪崩的风险,断路器将拦截访问该服务的所有请求,形成熔断,如下图所示:

断路器熔断

此时,访问服务D的请求会被拦截,从而避免雪崩效应的扩散。

4. 流量控制

流量控制是通过限制业务访问的每秒查询率(QPS)来防止雪崩问题。这可以确保系统不会因流量的突然增加而崩溃。通过设定每个微服务的最大QPS值,可以限制请求的数量,防止过多的请求积累并占用系统资源。

流量控制

例如,如上图所示,现在有大量的请求,但只有在限定的QPS下的请求数量才能访问该服务,从而防止过多的请求对系统造成负担。

1.4 总结

雪崩问题是指在微服务架构中,微服务之间相互依赖,当其中一个微服务发生故障或不可用时,其它微服务的请求也会受到影响,最终导致整个系统不可用的现象。可以总结为:

  • 微服务之间的复杂依赖关系导致某个微服务的故障可能会引发级联故障,使整个系统受到影响。

针对雪崩问题,可以采取以下措施:

  • 限流:限制每个微服务的请求并发数,防止过多请求积累,从而减轻服务器压力。是一种预防措施。

  • 超时处理线程隔离降级熔断:这些方法是在某个微服务出现故障时,将故障控制在一定范围,避免它蔓延至整个系统,从而避免雪崩。是一种补救措施。

这些措施有助于提高系统的稳定性和可用性,防止雪崩问题的发生。限流是一种预防措施,而超时处理、线程隔离、降级熔断等是应对已发生问题时的补救措施。综合使用这些方法可以有效应对雪崩问题。

二、初识 Sentinel 框架

2.1 什么是 Sentinel

Sentinel 是一款由阿里巴巴开源的微服务流量控制组件。它被设计用来解决微服务架构中的流量控制和熔断降级等问题。

官网地址:https://sentinelguard.io/zh-cn/index.html。

Sentinel 具有以下特点和功能:

  • 丰富的应用场景: Sentinel可以应用于多种场景,包括处理突发流量、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。它在阿里巴巴双十一大促销活动等高流量场景中得到了验证。

  • 完备的实时监控: Sentinel提供实时的监控功能,允许您查看接入应用的单台机器的秒级数据,甚至是小型集群的汇总运行情况。这有助于及时发现问题并进行调整。

  • 广泛的开源生态: Sentinel提供了与其他开源框架和库的整合模块,如与Spring Cloud、Dubbo、gRPC等的整合。这使得在不同技术栈中快速接入Sentinel变得更加容易。

  • 完善的SPI扩展点: Sentinel具有丰富的扩展接口,允许开发人员通过实现这些接口来定制逻辑,如规则管理和动态数据源适配等。这提供了高度的可扩展性。

Sentinel 的核心功能包括流量控制、熔断降级、系统负载保护、实时监控和控制台等,它在微服务架构中起到了重要的作用,帮助开发者确保系统的稳定性和可用性。

2.2 Sentinel 和 Hystrix 的对比

Hystrix 是 Netflix 开源的一款用于处理分布式系统中的延迟和容错问题的库。它和 Sentinel 的作用差不多,主要用于防止分布式系统中的雪崩效应,提供了线程隔离、熔断降级、超时控制等功能。Hystrix已经被广泛用于构建弹性和可靠的微服务架构。

Sentinel 和 Hystrix 的对比:

SentinelHystrix
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于慢调用比例或异常比例基于失败比率
实时指标实现滑动窗口滑动窗口(基于 RxJava)
规则配置支持多种数据源支持多种数据源
扩展性多个扩展点插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于调用关系的限流有限的支持
流量整形支持慢启动、匀速排队模式不支持
系统自适应保护支持不支持
控制台开箱即用,可配置规则、查看秒级监控、机器发现等不完善
常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix

上述表格总结了这两个流量控制和容错处理框架的主要特点。这些特点包括隔离策略、熔断降级策略、实时指标实现、规则配置、扩展性、基于注解的支持、限流、流量整形、系统自适应保护、控制台功能以及常见框架的适配。

使用 Sentinel 的情况:

  1. 需要细粒度的流量控制: 如果需要对不同的微服务或接口进行精细的流量控制,Sentinel 提供了信号量隔离和基于 QPS 的限流策略,可以更灵活地管理流量。

  2. 实时监控和控制台功能: Sentinel 提供了实时监控和丰富的控制台功能,允许查看秒级监控数据、配置规则以及进行机器发现。这对于监控和管理微服务非常有用。

  3. 支持多种数据源: Sentinel 支持多种数据源,包括内存、Nacos、Zookeeper等,这使得配置规则更加灵活。

  4. 需要灵活的扩展性: Sentinel 提供多个扩展点,允许通过自定义实现来满足特定需求,如规则管理、动态数据源等。

  5. 需要支持流量整形: Sentinel 支持慢启动和匀速排队模式,可帮助应对流量突发情况。

  6. 需要系统自适应保护: Sentinel 支持系统自适应保护,可以根据系统状态动态调整保护策略。

使用 Hystrix 的情况:

  1. Spring Cloud项目: 如果项目是基于Spring Cloud构建的,Hystrix 是 Spring Cloud Netflix 的一部分,因此更容易集成。

  2. 需要线程池隔离: 如果需要使用线程池隔离来隔离不同微服务的调用,Hystrix 提供了线程池隔离的支持。

  3. 需要更广泛的社区支持: Hystrix 有一个广泛的社区支持,因为它是 Netflix 开源的项目之一,有更多的文档和教程可供参考。

总之,应该根据项目需求、技术栈和团队的熟悉程度来选择使用 Sentinel 还是 Hystrix 。在某些情况下,两者也可以同时使用以获得更全面的容错和熔断降级能力。

三、Sentinel 的安装部署

1. 下载 Sentinel:

Sentinel 官方提供了一个UI控制台,方便我们对系统进行保护的操作,下载 Sentinel 的地址:https://github.com/alibaba/Sentinel/releases。

选择下载 JAR 包即可:

2. 运行:
将 JAR 包放到任意非中文目录,执行下面的命令运行 Sentinel:

java -jar sentinel-dashboard-1.8.1.jar

可以发现,Sentinel 是一个 Spring Boot 项目,默认的端口号是 8080:

如果要修改 Sentinel 的默认端口、账户、密码,可以通过下列配置:

配置项默认值说明
server.port8080服务端口
sentinel.dashboard.auth.usernamesentinel默认用户名
sentinel.dashboard.auth.passwordsentinel默认密码

例如,修改端口:

java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar

3. 服务 Sentinel 控制台

访问http://localhost:8080页面,就可以看到 Sentinel 的控制台,默认的用户和密码都是 sentinel

登录成功后,就可以看到Sentinel的控制台了:

四、集成 Sentinel 到微服务

下面,我们的目标是将Sentinel集成到 cloud-demo 项目中,cloud-demo 是一个简单的微服务项目demo,其结构如下图所示:


现在要求在 order-service 微服务中集成 Sentinel,实现的步骤如下:

  1. 引入 Sentinel 依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  1. application.yml 配置文件中添加 Sentinel 控制台地址
spring:cloud:sentinel:transport:dashboard: localhost:8080 # Sentinel 控制台地址
  1. 重启 order-service服务,访问任意接口,触发 Sentinel 监控

例如,在浏览器中服务一个订单信息:

再次查看 Sentinel 控制台:


可以发现,此时控制台中出现了一个 orderservice 服务,然后可以对该服务配置各种限流规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用数字化转型升级,重塑企业核心竞争力?

工程机械行业是一个周期性明显的行业&#xff0c;企业经营受到宏观经济与国家基础设施建设的影响较大&#xff0c;例如企业经济上行时&#xff0c;加大投资扩大生产规模&#xff0c;以满足市场需求的增长&#xff0c;当经济下行时&#xff0c;企业可能面临减产和裁员等问题&…

Ubuntu 安装 npm 和 node

前言 最近学习VUE&#xff0c;在ubuntu 2204 上配置开发环境&#xff0c;涉及到npm node nodejs vue-Cli脚手架等内容&#xff0c;做以记录。 一、node nodejs npm nvm 区别 &#xff1f; node 是框架&#xff0c;类似python的解释器。nodejs 是编程语言&#xff0c;是js语言的…

手机游戏定制研发手机软件开发

手机游戏定制研发是一个多阶段的过程&#xff0c;它使开发者能够根据客户的需求和创意&#xff0c;构建独特的游戏体验。这个领域是一个蓬勃发展的市场&#xff0c;因为手机游戏在全球范围内都备受欢迎。在本文中&#xff0c;我们将深入探讨手机游戏定制研发的主要步骤以及关键…

Day22

1、分别占据栈底&#xff0c;共用栈顶&#xff0c;对着入栈 2、循环队列不预留一个空间 3、直接定址法线性探测&#xff08;可能占别人的位置&#xff09; 4、直接选择无关顺序&#xff0c;选出max/min

UGO+DRS评复之路

前言 针对数据库整体迁移方案&#xff0c;为解决异构平台数据库迁移&#xff0c;为减轻迁移人员的工作强度以及迁移周期。华为云GaussDB迁移UGO&DRS迁移工具应运而生。 UGO介绍 数据库和应用迁移&#xff08;Database and Application Migration UGO&#xff0c;简称为UG…

SparkSQL执行流程与Catalyst优化器

目录 一、SparkSQL运行流程与Catalyst优化器 &#xff08;1&#xff09;RDD运行流程 &#xff08;2&#xff09;SparkSQL自动优化 &#xff08;3&#xff09;Catalyst优化器流程 &#xff08;4&#xff09;Catalyst优化器总结 &#xff08;5&#xff09;Spark SQL执行流程 一、…

HttpClient远程使用大全

一 HttpClient简介 1.1 概述 HttpClient只能以编程的方式通过其API用于传输和接受HTTP消息。主要实现功能&#xff1a; 实现了所有 HTTP 的方法&#xff08;GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等&#xff09; 支持 HTTPS 协议 支持代理服务器&#xff08;Nginx…

【网络安全 --- xss-labs靶场通关(11-20关)】详细的xss-labs靶场通关思路及技巧讲解,让你对xss漏洞的理解更深刻

如果需要安装各种系统&#xff0c;虚拟机&#xff0c;工具等等关注我&#xff0c;已经在出系统的课程了 一&#xff0c;靶场安装 超详细的靶场安装教程如下&#xff0c;提供工具&#xff0c;靶场&#xff0c;镜像等 【网络安全 --- xss-labs靶场】xss-labs靶场安装详细教程&…

前端跨域相关

注&#xff1a;前端配置跨域后服务器端&#xff08;Nginx&#xff09;也需要配置&#xff0c;否则接口无法访问 vue跨域 配置文件 /vue.config.js devServer: { port: 7100, proxy: { /api: { target: http://域名, changeOrigin: true, logLevel: debug, pathRewrite: { ^/…

程序员想要网上接单却不知道如何是好?那这篇文章你可得收藏好了!

作为一名程序员&#xff0c;想要网上接单赚赚零花钱&#xff0c;提高生活水平&#xff0c;这当然是无可厚非的&#xff0c;甚至有许多人已经将网上接单作为主业。 可是面对网上五花八门的接单平台&#xff0c;看着网上真真假假的信息&#xff0c;你真的清楚如何选择吗&#xf…

深度学习_6_实战_点集最优直线解_代码解析

问题描述&#xff1a; 上述题目的意思为&#xff0c;人工造出一些数据点&#xff0c;对我们的模型y Xw b ∈进行训练&#xff0c;其中标准模型如下&#xff1a; 其中W和X都为张量&#xff0c;我们训练的模型越接近题目给出的标准模型越好 训练过程如下&#xff1a; 人造数…

用傲梅分区软件分割分区重启系统蓝屏BAD_SYSTEM_CONFIG_INFO,八个解决参考方案

环境: Win11 专业版 HP 笔记本 傲梅分区软件 闪迪16G U盘 Win10 官方镜像文件 Win11PE 系统安装U盘 USB固态硬盘盒 问题描述: 起因 开始使用windows自动磁盘管理工具压缩不了磁盘,提示无法将卷压缩到超出任何不可移动的文件所在点,关闭系统保护还原,删除系统创建…

VSCode C/C++ 分目录+多文件编译配置2

前言&#xff1a;介绍 task.json 和 launch.json 文件 task.json 和 launch.json 是用于配置 VS Code 编辑器中的任务 和 调试功能的两个重要文件。 task.json 文件用于配置任务&#xff0c;它定义了执行特定操作的任务&#xff0c;并提供了相应的命令和参数。以下是 task.js…

2、Linux权限理解

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 前言 Linux权限的概念 1.文件访问者的分(人) 2.文件类型和访问权限(事物属性) 3.文件权限值的表示方法 4.文件访问权限的相关设置方法 file指令 目录的权限 粘滞位 关于权限的总结 前言 在开始Linux权限理…

excel常用的几个函数

1、MID函数 通常用来返回返回指定字符串中的子串。 函数公式&#xff1a; MID(string, starting_at, extract_length) String&#xff08;必填&#xff09;&#xff1a;包含要提取字符的文本字符串 starting_at&#xff08;必填&#xff09;&#xff1a;文本中要提取的第一个字…

YOLO目标检测——行人数据集【含对应voc、coco和yolo三种格式标签+划分脚本】

实际项目应用&#xff1a;智能监控、人机交互、行为分析、安全防护数据集说明&#xff1a;行人检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(j…

docker-compose安装ES7.14和Kibana7.14(有账号密码)

一、docker-compose安装ES7.14.0和kibana7.14.0 1、下载镜像 1.1、ES镜像 docker pull elasticsearch:7.14.0 1.2、kibana镜像 docker pull kibana:7.14.0 2、docker-compose安装ES和kibana 2.1、创建配置文件目录和文件 #创建目录 mkdir -p /home/es-kibana/config mkdir…

音视频技术开发周刊 | 316

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 日程揭晓&#xff01;速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站&#xff0c;保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…

【解锁未来】探索Web3的无限可能性-01

文章目录 前言什么是Web3&#xff1f; 前言 还记得你第一次听说比特币吗&#xff1f;也许那只是一个关于新技术将改变一切的微弱嗡嗡声。也许你会有一种 "FOMO "的感觉&#xff0c;因为那些早早入场的人突然积累了一大笔财富–尽管你并不清楚这些 "钱 "可…

flutter开发的一个小小小问题,内网依赖下不来

问题 由于众所周知的原因&#xff0c;flutter编译时&#xff0c;经常出现Could not get resource https://storage.googleapis.com/download.flutter.io…的问题&#xff0c;如下&#xff1a; * What went wrong: Could not determine the dependencies of task :app:lintVit…