【架构设计】接口高可用架构设计

2022/04/12 架构与设计 共 939 字,约 3 分钟

下面我们分享 接口级别高可用设计的架构模式和技巧。

接口高可用整体框架

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

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

image-20220412234653419

接口高可用架构本质上是“丢车保帅”策略,业务或者用户体验会部分有损!

限流

image-20220412234826551

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

  1. 请求端限流:发起请求的时候就进行限流,被限流的请求实际上并没有发给后端服务器。比如APP端、PC端。

  2. 接入端限流:接到业务请求的时候进行限流,避免业务请求进入实际的业务处理流程。比如Nginx、Api网关。

  3. 微服务限流:单个服务的自我保护措施,处理能力不够的时候丢弃新的请求。比如具体的业务服务。

限流具体实现方式

image-20220412235220677

限流算法

时间窗

image-20220412235447764

漏桶

image-20220412235559077

java限流示例

image-20220412235903529

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

image-20220413000114608

令牌桶

image-20220413000208047

排队

image-20220413000244503

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

技术本质:请求缓存 + 同步改异步 + 请求端轮询。

应用场景:秒杀、抢购。

排队的架构示意图

image-20220413000428853

【设计关键】

  1. 如何设计异步处理流程;

  2. 如何保证用户体验(前端、客户端交互)。

排队具体实现方案示例

image-20220413000600821

1号店双十一秒杀排队

image-20220413001812219

排队模块

负责接收用户的抢购请求,将请求以先入先出的方式保存下来。每一个参加秒杀活动的商品保存一个队列,队列的大小可以根据参与秒杀的商品数量(或加点余量)自行定义。

调度模块

负责排队模块到服务模块的动态调度,不断检查服务模块,一旦处理能力有空闲,就从排队队列头上把用户访问请求调入服务模块。

服务模块

是负责调用真正业务处理服务,并返回处理结果,并调用排队模块的接口回写业务处理结果。

image-20220413001911903

降级

image-20220413002011175

基本原理

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

应用场景

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

降级架构实现

image-20220413002149497

设计要点:

  1. 独立系统操作降级,可以是独立的降级系统,也可以是嵌入到其它系统的降级功能。

  2. 人工判断,人工执行

熔断

image-20220413002312577

基本原理

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

应用场景

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

熔断架构实现

image-20220413002406264

【实现细节】

  1. 可以通过配置中心,也可以通过配置文件来配置熔断策略;

  2. 熔断处理一般由框架或者 SDK 提供,例如 Dubbo + Hystrix;

  3. 熔断策略一般按照失败次数、失败比例、响应时长等来确定。

文档信息

搜索

    Table of Contents