系统稳定性设计

限流涉及的组件间关系
组件间关联关系

应用服务(基于JVM)稳定性

方案

  1. 降低系统水位

Redis稳定性

MetaQ稳定性

DB稳定性

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