接口高可用

news2025/2/25 9:43:59

架构决定系统质量上限,代码决定系统质量下限

接口高可用整体框架

雪崩效应:请求量超过系统处理能力后导致系统性能螺旋快速下降

链式效应:某个故障引起后续一连串的故障

在这里插入图片描述

限流

在这里插入图片描述

用户请求全流程各个环节都可以限流:

  1. 请求端限流:发起请求的时候就可以进行限流,被限流的请求实际上并没有发给后端服务器
  2. 接入端限流:接到业务请求的时候进行限流,避免业务请求进入实际的业务处理流程
  3. 微服务限流:单个服务端的自我保护措施,处理能力不够的时候丢弃新的请求

具体实现方式

请求端限流

常见手段

  1. 限制请求次数,例如按钮变灰
  2. 嵌入简单业务逻辑,例如生成随机数

优缺点

  1. 实现简单
  2. 流量本地就控制住了
  3. 防正常用户,防止不了脚本

接入端限流

常见手段

  1. 限制同一用户请求频率
  2. 随机抛弃无状态请求,例如限流浏览请求,不限流下单请求

优缺点

  1. 实现复杂
  2. 可以防刷
  3. 限流阈值可能需要人工判断

微服务限流

常见手段

根据处理能力,丢去无法处理的请求

优缺点

  1. 实现简单
  2. 处理能力难以精准配置

限流算法

算法1:固定&滑动 时间窗

固定时间窗

在这里插入图片描述

设计原理
  1. 统计固定时间周期内的请求量,超过阈值则限流
  2. 存在临界点问题,如图中的红蓝两点对应的时间范围

滑动时间窗

在这里插入图片描述

设计原理
  1. 统计滑动时间周期内的请求量,超过阈值则限流
  2. 判断比较准确,但实现稍微复杂

算法2:漏桶

在这里插入图片描述

基本原理

请求放入“桶”(消息队列等),业务处理单元(线程/进程/服务)从桶里拿请求处理,桶满则丢弃新的请求

技术本质

总量控制,桶大小是设计关键

优缺点

  1. 桶大小动态调整比较困难,例如java BlockingQueue
  2. 无法精确控制流出速度(处理速度)
  3. 突发流量时丢弃的请求较少

应用场景

瞬间高并发流量,例如0点签到、整点秒杀

漏桶算法变种-写缓冲(Buffer)

在这里插入图片描述

基本原理

如果漏桶的容量无限(例如用kafka消息队列),则漏桶可以用来做写缓冲

技术本质

同步改异步,缓冲所有请求,慢慢处理

应用场景

高并发写入请求,例如热门微博评论

算法3:令牌桶

在这里插入图片描述

基本原理

某个处理单元按照指定速率将令牌放入“桶”(消息队列等),业务处理单元收到请求后需要获取令牌,获取不到就丢弃请求

技术本质

速率控制,令牌产生的速度是设计关键

优缺点

  1. 可以动态调整处理速度
  2. 突发流量的时候可以丢弃很多请求
  3. 实现相对复杂

典型应用场景

  1. 控制访问第三方服务的速度,防止把下游压垮
  2. 控制自己的处理速度,防止过载

排队

在这里插入图片描述

基本原理

收到请求后并不同步处理,而是将请求放入队列,系统根据能力异步处理

技术本质

请求缓存+同步改异步+请求端轮询

应用场景

秒杀、抢购

架构示意图

在这里插入图片描述

设计关键

  1. 如何设计异步处理流程
  2. 如何保证用户体验(前端、客户端交互)

具体实现方案示例

在这里插入图片描述

1号店双十一秒杀排队

在这里插入图片描述

降级

在这里插入图片描述

基本原理

直接停用某个接口或者URL,收到请求后直接返回错误(例如HTTP 503)

应用场景

故障应急,通常将非核心业务降级,保住核心业务,例如降级日志服务、升级服务等

架构实现

在这里插入图片描述

设计要点

  1. 独立系统操作降级,可以是独立的降级系统,也可以是嵌入到其他系统的降级功能
  2. 人工判断,人工执行

熔断

在这里插入图片描述

基本原理

下游接口故障的时候,一定时期内不再调用

应用场景

服务自我保护,防止故障链式效应

架构实现

在这里插入图片描述

实现细节

  1. 可以通过配置中心,也可以通过配置文件来配置熔断策略
  2. 熔断处理一般由框架或者SDK提供,例如Dubbo+Hystrix
  3. 熔断策略一般按照失败次数、失败比例、响应时长等来确定

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

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

相关文章

区块链溯源相比传统追溯有什么优点?

区块链溯源:通过使用区块链和物联网技术的结合,记录产品的物流信息,并基于区块链不可篡改的特性把商品的物流信息、质量信息、质检信息等相关商品信息全部记录在上。从而实现了产品全过程的质检、物流、管理等,解决了信息缺乏透明…

01_网络概述

知识点1【分组交换】 知识点2【交换方式】存储-转发 知识点3【网络分层结构】(重要) 知识点4【协议的介绍】 1、IP协议 网际协议(网络层) 2、TCP协议 传输控制协议 (传输层)(重要&#xff…

工程建设行业智能供应链系统:优化产业链运作效率,实现全链路数字化建设

工程建设行业是对建筑工程、线路管道和设备安装工程、建筑装饰装修工程等工程项目进行新建、扩建和改建的行业,对促进国民经济发展和改善人民生活提供了重要的物质技术基础。近年来,我国城镇化的迅速推进为工程建设行业带来了广阔的市场发展空间&#xf…

低压MOS管AONS36344、AONS36348 MOSFET N-CH DFN

特点 沟槽功率MOSFET技术30V 低RDS(ON) 门票费低 高电流能力 符合RoHS和无卤标准 应用 DC/DC转换器在计算、服务器和POL中的应用 电信和工业中的隔离DC/DC转换器 产品参数 1、型号:AONS36344 低压MOS管 类型:单 - N型MOS管 VDS (V)漏极电压:…

阿里P8架构师强推java程序员人手一套116页JVM吊打面试官专属秘籍

说在前面的话 只要是java程序员,肯定对于JVM来说并不陌生,甚至是从熟悉到陌生,为什么这样说呢? 因为你看似熟悉的东西,其实对于源码层级了解得少之又少,到头来只有一种陌生的感觉,使用了吗&…

基于matlab的强化学习QLearning路径规划性能仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 假设我们的行为准则已经学习好了, 现在我们处于状态s1, 我在写作业, 我有两个行为 a1, a2, 分别是看电视和写作业, 根据我的经验, 在这种 s1 状态下, a2 写作业 带来的潜在奖励要比 a1 看…

LeetCode | 一探环形链表的奥秘【快慢双指针妙解BAT等大厂经典算法题】

前言 本文总结了力扣141.环形链表|以及142.环形链表||这两道有关环形链表的求解方案,去求证链表是否带环已经如何找出入环口的结点。 有关环形链表,在BAT等大厂面试中均有出现,一般是属于中等难度的题,需掌握 环形链表| &&…

教你vue-router命令视图应该怎么玩

引言 在VUE实战项目开发中,为了减少代码冗余,便于后期维护,我们经常会把相同布局的代码封装为公共组件,例如移动开发中NavBar导航栏、Tabbar标签栏等公共组件,需要使用时导入、注册、调用即可,但是相对NavB…

JSRPC的三种实现方式

RPC 为远程过程调用,本文通过在浏览器端(服务端)开启一个WebSocket服务,接收命令,执行浏览器网页的加密代码,得到密文。 CMD端(客户端)也开启一个WebSocket服务与浏览器端交互&#…

【Spring Boot】Day03

文章目录一、Value和ConfigurationProperties的区别二、PropertySource一、Value和ConfigurationProperties的区别 区别: 数据校验:判断数据是否合法 Value: 不支持数据校验ConfigurationProperties:支持数据校验 开启数据校验功能&#xf…

软考证书可积分落户、评职称、抵扣个税等,快来考一个吧!

很多人想要在工作的城市落户、买房、生活、小孩上学,但由于对于城市落户政策不了解,担心自己条件不够!今天给大家介绍一本软考证书帮你解决落户等问题。 软考,是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试;既…

[附源码]java毕业设计价格公示系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C. Bouncing Ball(从后往前的前缀和)

Problem - 1415C - Codeforces 你正在为某个手机游戏创建一个游戏关卡。这个关卡应该包含一些从左到右排列的单元格,并以从1开始的连续整数编号,在每个单元格中,你可以放一个平台,也可以让它空着。 为了通过一个关卡,…

牛客网-《刷C语言百题》第四期

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:《C语言入门必刷百题》 &#x…

QStyleFactor和QPalette

Qt中的分格都继承自QStyle,QStyle类是一个抽象基类,封装了一个GUI的外观。 QStyle常见的子类有: QStyleFactory类QPalette类QStyleFactor类 函数为: create()创建并返回与给定键匹配的QStyle对象keys()返回有效键的列表 获取有…

面试灵活拷问:对于数据库的索引,你是怎么理解的?

文章目录一、索引的概念及作用概念作用二、索引的应用场景三、索引的相关语法1.查询索引2.创建索引3.删除索引注意四、索引背后的数据结构什么是B树B树有什么特点采用B树结构能为索引带来什么好处五、索引的分类1.唯一索引(unique键对应的字段)2.主键索引…

Selenium基础 — 拓展:使用浏览器加载项配置实现用户免登陆

1、什么是加载项配置 在很多情况下,我们在登录网站的时候,浏览器都会弹出一个是否保存登录账号的信息。如果我们选择保存,那么我们在下次登录时就不用再次输入账号,直接免登录了。 在我们实际的测试过程中,测试注册登…

系统运维利器,百万服务器运维实战总结!一文了解最新版SysAK|龙蜥技术

在刚刚结束的龙蜥峰会 eBPF & Linux 稳定性专场上,龙蜥系统运维 SIG Maintainer 张毅做了《SysAK 系统运维工具集》的主题演讲,以下为演讲实录。 大家好,在去年的云栖大会,我们在龙蜥社区开源了系统运维工具集 SysAK&#xff…

new Vue的时候到底做了什么

Vue加载流程 1.初始化的第一阶段是Vue实例也就是vm对象创建前后:首先Vue进行生命周期,事件初始化发生在beforeCreate生命周期函数前,然后进行数据监测和数据代理的初始化,也就是创建vm对象的过程,当vm对象创建完成就可…

【Linux】gcc的使用

文章目录一、前言二、gcc的基本使用1. 预处理2. 编译3. 汇编4. 链接三、函数库四、gcc常用选项总结一、前言 在学习本文前,我们先简单回顾一下源代码被转换为可执行的机器指令的每个过程: 预处理(进行宏替换)编译(生成汇编)汇编…