| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 系统保护:微服务架构雪崩效应与服务限流 -> 正文阅读 |
|
[Java知识库]系统保护:微服务架构雪崩效应与服务限流 |
微服务的雪崩效应一次线上的服务雪崩事故 “雪崩”一词指的是山地积雪由于底部溶解等原因造成的突然大块塌落的现象,具有很强的破坏力。在微服务项目中指由于突发流量导致某个服务不可用,从而导致上游服务不可用,并产生级联效应,最终导致整个系统不可用,使用雪崩这个词来形容这一现象最合适不过。 雪崩之后可以在以下几方面作出应对:
为什么微服务会产生雪崩效应 如下图所示,假如开发了一套分布式应用系统,前端应用分别向 A/H/I/P 四个服务发起调用请求: 但随着时间推移,假如服务 I 因为优化问题,导致需要 20 秒才能返回响应,这就必然会导致 20 秒内该请求线程会一直处于阻塞状态。 但是,如果这种状况放在高并发场景下,就绝对不允许出现,假如在 20 秒内有 10 万个请求通过应用访问到后端微服务。容器会因为大量请求阻塞积压导致连接池爆满,而这种情况后果极其严重!轻则“服务无响应”,重则前端应用直接崩溃。 以上这种因为某一个节点长时间处理导致应用请求积压崩溃的现象被称为微服务的“雪崩效应”。 ? 如何有效避免雪崩效应? 刚才分析了雪崩效应是因为出现瞬间大流量+微服务响应慢造成的。针对这两点在架构设计时要采用不同方案。
以下图为例。在用户支付完成后,通过消息通知服务向用户邮箱发送“订单已确认”的邮件。假设消息通知服务出现异常,需要 10 秒钟才能完成发送请求, 这是不能接受的。为了预防雪崩,我们可以在微服务体系中增加服务降级的功能,预设 2 秒钟有效期,如遇延迟便最多允许 2 秒,2 秒内服务未处理完成则直接降级并返回响应,此时支付服务会收到“邮件发送超时”的错误信息。这也就意味着消息通知服务最多只有两秒钟的处理时间。处理结果,要么发送成功,要么超时降级。 因此阻塞时间缩短,产生雪崩的概率会大大降低。 ?Alibaba Sentinel 在 Spring Cloud Alibaba 生态中有一个重要的流控组件 Sentinel。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征:
Sentinel 配置入门 Sentinel 分为两个部分:Sentinel Dashboard和Sentinel 客户端。 Sentinel Dashboard:Sentinel Dashboard 是 Sentinel 配套的可视化控制台与监控仪表盘套件,它支持节点发现,以及健康情况管理、监控(单机和集群)、规则管理和推送的功能。Sentinel Dashboard 是基于 Spring Boot 开发的 WEB 应用,打包后可以直接运行,目前最新版本为 1.8.0。 Sentinel 客户端:Sentinel 客户端需要集成在 Spring Boot 微服务应用中,用于接收来自 Dashboard 配置的各种规则,并通过 Spring MVC Interceptor 拦截器技术实现应用限流、熔断保护。 部署 Sentinel Dashboard(仪表盘) 1. 访问:https://github.com/alibaba/Sentinel/releases,下载最新版 Sentinel Dashboard。 2. 利用下面的命令启动 Dashboard。
这个命令的含义是启动 Sentinel Dashboard 应用,Sentinel Dashboard 会监听9100端口实现与微服务的通信。同时我们可以访问下面的网址查看 Sentinel Dashboard 的UI界面。 在用户名、密码处输入 sentinel/sentinel,便可进入 Dashboard。 微服务内置 Sentinel 客户端 第一步,利用 Spring Initializr 向导创建 sentinel-sample 工程,pom.xml 增加以下三项依赖。
第二步,配置 Nacos 与 Sentinel 客户端。
第三步,验证配置。 访问下面网址,在 Sentinel Dashboard 左侧看到 sentinel-sample 服务出现,则代表 Sentinel 客户端与 Dashboard 已经完成通信。
? 配置限流规则第一步,在 sentinel-sample 服务中,增加 SentinelSampleController 类,用于演示 Sentinel 限流规则。
启动 sentinel-sample,访问http://localhost/test_flow_rule,无论刷新多少次,都会看到“SUCCESS”。 第二步,访问 Sentinel Dashboard 配置限流规则。 在左侧找到簇点链路,右侧定位到 /test_flow_rule,点击后面的“流控”按钮。 在弹出界面,按下图配置,其含义为 /test_flow_rule 接口每秒钟只允许 1QPS 访问,超出的请求直接服务降级返回异常。最后点击“新增”完成规则设置。 ?此时针对 /test_flow_rule 接口的流控规则已生效,可以在“流控规则”面板看到。 第三步,验证流控效果。 重新访问http://localhost/test_flow_rule,浏览器反复刷新。 第一次刷新时会出现“SUCCESS”文本代表处理成功。 ?同一秒内再次刷新便会出现 “Blocked by Sentinel (flow limiting)”,代表服务已被限流降级。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:20:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |