系统稳定性设计
限流涉及的组件间关系
应用服务(基于JVM)稳定性
方案
- 降低系统水位
Redis稳定性
MetaQ稳定性
DB稳定性
- 稳定性
- 基本原则
- 分布式:压力分散,区别于单体式
- 异步化:非核心功能异步化,提升吞吐率(单位时间可以处理的请求数)
- 简单安全:避免使用未经严格验证的公共代码、库、二方包(同组织)和三方包(组织外部)
- 数据一致:最终一致性保障,幂等、可重入
- 稳定性措施
- MQ稳定性
- 消费监控,流量突增容易
- 缓存稳定性
- 流控
- 流量预估、流量流向分析
- 扩散比:每一笔请求对下游形成多少次调用
- 峰值、热点分析
- 限流
- 多维度多举措做好限流,把流量控制在系统可承载范围内,系统就不会进入完全不可用的状态;限流可以减少诸如热点、超时、慢SQL、外部依赖、系统容量不足等问题。
- 前端限流:单用户单端登录限流
- 网关限流:Nginx
- 服务限流:Sentinel,支持集群限流,但是集群限流因为需要一个中心DB存取流量值,所以性能会差很多,不适合特别高并发的场景
- 单机限流:线程池 + Guava RateLimiter(令牌桶)
- 预留Buffer
- 依赖管理
- 强弱依赖识别
- 强弱依赖模拟演练
- 预案
- 预案类型
- 业务降级
- 限流
- 系统故障(容灾)
- 存储故障
- 中间件故障
- 预案执行时机
- 自动切换
- follow技术方案设计,比如成功率低于60%切换到备库
- 提前预案
- 业务降级,比如大促前为了应对将来的暴涨流量,将非核心业务降级
- 紧急预案
- 业务有损降级,保命用
- 故障演练
- 监控
- 日志规范
- 请求上游、RPC/MQ/DB请求源头、请求用户标识等
- 系统监控
- 机器健康状态、应用健康状态
- 流量监控
- 入口流量、服务调用流量、错误流量等,注意监控流量突增
- 业务监控、数据大盘
- 业务数据总量、分类统计等
- 一致性问题监控
- 备份
- 测试体系
- 功能回归
- 全链路压测
- 日常压测和极限压测
- 数据一致性
- 最终一致性
- 方法
- 业务实时对账
- 离线对账
- 手工或自动化数据校正