弹力设计
2023-05-05 10:12:42 0 举报
AI智能生成
学习笔记
作者其他创作
大纲/内容
设计要点
服务冗余
服务拆分
容错设计
运维开发
可用性
熔断设计
熔断设计
状态机
闭合(Closed)
断开(Open)
半开(Half-Open)
应用实例
设计重点
根据错误类型制定策略
自动重置和手动重置
解决并发问题
资源分区,只对故障分区熔断而非整体
日志监控与错误记录
限流设计
流量统计指标
每秒事务数(TPS)
每秒请求数(HPS)
每秒查询数(QPS)
其他:请求/响应报文大小、单位时间通过的流量、登录用户数等
限流策略
拒绝超出阈值的请求
延时处理
实现方式
基于参数静态限流
否决式
计数器
滑动窗口
队列算法
阻塞式
漏斗算法
令牌桶算法
基于响应时间动态限流
分布式限流
集中式缓存
货币化改造
设计重点
在架构早期考虑,后期不易引入
性能要求高,对流量变化感知灵敏
设置手动开关应对紧急情况
建立监控事件通知,便于运维跟进
标识限流请求区分错误,便于选择重试或降级
自动化运维与弹性伸缩
降级设计
降低一致性
流程一致性
数据一致性
关闭或简化功能
停用/限制次要功能
返回部分数据或缓存
优先服务特权请求
设计重点
降级思路
关键条件
应急流程
配置开关
降级触发
功能维护
缓存读 + 异步写
可伸缩性
服务状态
无状态服务
优点
易于扩展和运维
降低故障概率
存在问题
数据同步
责任转移
依赖有状态存储,增加开销
依赖服务有高可用可扩展的要求
有状态服务
优点
数据本地化提高效率
高可用和强一致性
会话绑定节点易于实现
Sticky Session
负载与数据均衡
反向压力
元数据索引
直接路由
容错设计
一致性
可用性
分布式文件系统
数据持久化
容错性
容错策略
故障转移(Failover)
应用场景
快速失败(Failfast)
应用场景
安全失败(Failsafe)
应用场景
沉默失败(Failsilent)
故障恢复(Failback)
并行调用(Forking)
广播调用(Broadcast)
隔离设计
根据服务类型
存在问题
降低性能
数据聚合更复杂
跨板块业务难隔离故障
跨板块交互复杂
分布式事务
根据服务对象
设计重点
隔离方式
线程隔离:线程池
进程隔离
集群隔离
读写隔离
服务容错
故障转移(Failover)
应用场景
快速失败(Failfast)
应用场景
安全失败(Failsafe)
应用场景
沉默失败(Failsilent)
故障恢复(Failback)
并行调用(Forking)
广播调用(Broadcast)
异步通信设计
同步调用
吞吐量受限:被调用方吞吐量太低会拖慢调用方
系统资源占用:需要等待完成才能继续,要保存现场信息,浪费资源
只能一对一:难以实现一对多
被调用方故障蔓延
异步通信
设计模式
请求 - 响应模式
回调机制
轮询机制
发布 - 订阅模式
中间人模式
优点
解除服务间依赖:服务间平等,高度可用且可被替换的
服务的开发测试运维高度隔离
服务通过事件关联,不会互相阻塞
服务间增加适配器(日志认证版本限流熔断)较容易
服务间的吞吐解耦:可按自己的速度处理
缺点
事务处理复杂(两阶段提交做强一致性,或改为最终一致性)
事件可能乱序,需要管理状态机
业务流程管理复杂:需要可视化工具呈现业务流程
幂等性设计
处理方法
非幂等:下游系统提供状态查询接口
幂等:下游系统提供幂等支持
全局 id
数据库自增 id
UUID
Snowflakes 算法
唯一约束
HTTP 的幂等性
前端生成并提交 token
请求成功后 302 跳转
表单过期
一致性
重试设计
重试策略
退避策略
无退避(NoBackOffPolicy)
固定时间退避(FixedBackOffPolicy)
随机时间退避(UniformRandomBackOffPolicy)
指数时间退避(ExponentialBackOffPolicy)
随机指数时间退避(ExponentialRandomBackOffPolicy)
代码实现
设计重点
根据错误类型决定是否重试
限制重试时间/次数
避免流量放大
无必要重试则超时熔断
保证幂等性
尽可能无侵入
应用实例
状态保存
补偿事务
ACID 与 BASE
CAP
ACID:强调一致性
BASE:强调可用性
应用场景
业务补偿
实现方式
工作流引擎
幂等性服务
补偿机制
状态描述
状态拟合
修改事务
设计重点
幂等与非幂等
状态监控维护
反向补偿
通用性
资源预留
0 条评论
下一页