高弹性|可能是全网最完整的分布式架构设计图谱(含22个知识点)( 四 )


②服务延时处理 , 加入服务缓冲队列延缓服务压力 , 用于削峰
③服务弹性伸缩 , 依赖服务监控 , 弹性伸缩容
4)流控算法
①计数器

  • 单机或者集群保存某用户某时间段请求数 , 达到阈值则触发流控
②队列算法
  • FIFO 队列
  • 请求速度波动 , 消费速度均匀 , 队列满则流控
  • 权重队列
  • 按服务划分优先级队列 , 不同队列权重不同
  • 队列算法设计关键:队列长度的预设非常关键
  • 队列太长 , 流控未生效 , 服务已经被打死
  • 队列太短 , 流控被频繁触发 , 体验差
③漏斗算法
  • 本质上是队列+限流器实现 , 限流器保证消费速度均匀类 TCP sync backlog
  • 转发速度均匀
④令牌桶
  • 中间人已恒定速率向桶里发放令牌 , 服务请求拿到 token 则开始服务 , 否则不处理
  • 转发速度不均匀 , 流量小时积累 , 流量大时消费
⑤动态流控
  • 实时计算服务能力如 QPS , 对比服务 RT 如果 RT 过大 , 则减少 QPS
5)设计要点
①手动开关 , 主动运维和应急使用
②监控通知 , 限流发生时干系人要清楚
③用户感知 , 如返回特定错误信息(错误code/错误提示)
④链路标识 , RPC链路加入限流标识方便上下游业务识别限流场景做不同处理
4、熔断设计
1)场景
①过载保护 , 系统负载过高情况为防止故障产生 , 而采取的一种保护措施
②防止应用程序不断尝试可能会失败的操作
2)三个状态
①Closed , 闭合状态 , 正常状态 , 系统需要一个基于时间线到错误计数器 , 如果错误累计达到阈值则切换至 Open 状态
②Open , 断开状态 , 所有对服务对请求立即返回错误 , 不用调用后端服务进行计算
③Half-Open , 半开状态 , 允许部分请求流量进入并处理 , 如果请求成功则按照某种策略切换到 Closed 状态
3)设计要点
①定义触发熔断的错误类型
②所有触发熔断的错误请求必须要有统一的日志输出
③熔断机制必须有服务诊断及自动恢复能力
④最好为熔断机制设置手动开关用于三种状态的切换
⑤熔断要切分业务 , 做到业务隔离熔断
5、补偿事务
①CAP
  • 一致性 (Consistence)、可用性 (Availability)、分区容忍性 (Partition Tolerance)
②BASE
  • Basic Availabillity , 基本可用
  • Soft State , 软状态
  • Eventual Consistency , 最终一致性
③Design For Failure
④Exponential Blackoff , 指数级退避
四、DevOps
1、部署
1)基础设施
①云