IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 熔断机制:预防一个服务故障导致整个系统崩掉 -> 正文阅读

[大数据]熔断机制:预防一个服务故障导致整个系统崩掉

一、引言

一个系统通常包含多个服务,服务之间的数据顺利交互,是整个系统能够正常工作的基本要求。

但实际应用中,不少人会经常遇到某个服务异常工作后,整个系统随之崩掉的情况,这种情况我们应该如何预防和处理呢?本章节的内容希望能够给你带来些启发。


二、场景介绍

2.1 接口简述

一个新零售架构系统中 ,有一个通用用户服务,很多页面都会使用,它包含两个接口。

第一个接口:用户态接口
接口功能:返回用户车辆所在位置。
使用业务:在用户信息展示页面会使用到,比如客服系统中的用户信息页面。
数据来源:对接第三方系统,由第三方返回,然后接口再返回给接口调用者。


第二个接口:用户可操作权限列表
接口功能:返回用户一个可操作的权限列表,包含一个通用权限,也包含用户定制权限。
使用业务:每次用户打开APP时都会使用。
数据来源:从缓存中或者数据库读取。


2.2 接口遇到的问题

第一个接口遇到的问题:请求慢
在这里插入图片描述
服务间的关系调用具体流程分为3个步骤:
1)APP访问User API;
2)UserAPI 访问基础数据服务的接口 /currentCarLocation;
3)基础服务与第三方系统交互,获取数据。

问题:第三方响应速度很慢且有时还会抽风,导致响应时间更长,接口经常出现超时报错。



第二个接口遇到的问题:流量洪峰缓存超时
在这里插入图片描述
服务间的关系调用具体流程分为以下3个步骤:
1)APP方位UserAPI;
2)UserAPI访问基础数据服务的接口 /commonAccess;
3)基础数据服务提供一个通用权限列表。因为权限列表对所有用户都一样,所以我们把数据存放在Redis中,如果通用权限在Redis中找不到 ,我们再去数据库中查找。

问题:

  • 在流量高峰期时Redis的通用权限列表超时了,那一瞬间所有的线程都需要去数据库中读取数据,导致DB中的CPU立马飙到100%。
  • DB 挂后,紧接着 Basic Data Service 也挂了,因所有的线程堵塞了,我们获取不到数据库连接,导致 Basic Data Service 无法接受新的请求。
  • 而 User API 因调用了 Basic Data Service 的线程出现了堵塞,以至于 User API 服务的所有线程也出现堵塞,即 User API 也挂了,导致 App 上的所有操作都不能使用。


三、解决思路

为了解决上述两个问题,需要满足下面两个条件:

(1)线程隔离

针对第一个问题,希望的处理方式是:User API中每个服务配置的最大连接数是1000,每次API调用BasicDataService的/currentCarLocation的速度就会很慢。

因此,希望可以控制/currentCarLocation的调用请求数,保证不超过50条,以此保证至少还有 950 条的连接可用来处理常规请求。如果 /currentCarLocation 的调用请求数超过 50 条,我们就设计一些备用逻辑进行处理,比如在界面上给用户进行提示。



(2)熔断

针对第二个问题,因那时 DB 没有死锁,流量洪峰缓存超时单纯是因为压力太大,此时我们可以使用 Basic Data Service 暂缓一点儿时间,让它不接受新的请求,这样 Redis 的数据会被补上,数据库的连接也会降下来,我们的服务也就没事了。

简单概括该解决技术需要实现以下2点需求:
1)发现近期某个接口的请求老出异常,先别访问接口的服务;
2)发现某个接口的请求老超时,先判断接口的服务是否不堪重负,如果不堪重负,先别访问它。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:18:09  更:2022-04-04 12:20:05 
 
开发: 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:04:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码