zoukankan      html  css  js  c++  java
  • 容灾稳定性

    SLA服务等级协议

    Service Level Agreement,包括:

    服务目录:如feed流(推荐信息流)

    服务可用性:99.9,99.99等

    服务故障恢复时间:多长时间可以恢复如10分钟

    依赖性

    强依赖:挂掉后用户无法使用

    弱依赖:挂掉后用户可以使用,但体验不佳

    核心依赖:挂掉后用户体验损伤很大

    非核心依赖:挂掉后用户体验基本无损

    核心概念

    并发数:同一时刻处理的请求数,并发能力受限于worker数量、cpu、memory等

    吞吐量QPS:每秒钟处理的请求数

    响应时间:处理一个请求的响应时间

    avg:平均响应时间

    pct99: 99%的请求相应时间

    并发数 / 平均相应时间 = qps

    目标

    在任何情况下,尽可能保证SLA

    准则:Design for failure,墨菲定律,自动化

    产品核心指标

    新增,留存,活跃,营收

    故障预防

    超时

    核心从宽,非核心从严

    核心依赖:1~3 * p99.5

    非核心依赖:1~2 * p99.5

    重试

    解决下游单机/网络抖动等问题,提高接口可用性。

    重试一次会导致两倍流量,会引起雪崩。

    原则是核心从宽,非核心从严。

    核心依赖:1次重试+10%比例限制。非核心依赖:0次重试。

    合理的超时+合理的重试+适当的缓存策略。超时timeout = 2 * time_pct99.5

    熔断

    为了保护下游,防止无效等待和占用资源,可以引入熔断,即一段时间内直接返回不去请求。

    兜底

    服务异常时,通过策略尽可能保证用户体验。如增加默认数据,Redis,local cache(热内容,上已刷等)

    编码设计

    良好的设计

    服务职责单一、高内聚、低耦合

    读写分离、部署隔离(非核心和核心分开部署)、存储隔离(不同的app不同的数据库和Redis)

    服务异常外抛(有异常抛exception),api异常屏蔽

    防御性编程

    防御依赖(假定下游一定会有异常)、使用方(参数校验非常重要)、自己

    单元测试、集成测试、故障演练

    上线

    防止上线带来的问题(编码+配置)

    开发-》自测ci-》双人review-》上线-》小流量-》单机房-》全流量

    上线检测(先小流量检测),灰度机制(小流量,单机房,全流量)。

    上线过程中观察:错误日志,流量正常,监控(业务核心指标、接口和下游错误、机器负载),报警,回归线上功能。

    单点

    去单点:防止机器、网络局部故障,导致整体不可用。

    异地双机房,无状态水平扩容,db多主。

    容量

    防止DAU、依赖等的动态变化,容量不足带来的异常。

    流量高峰前容量排查,核心服务保证3倍高峰期容量;

    压测常态化,确定服务容量,优化性能;

    根据压测,设置qps上线,进行过载保护(处理不了的请求直接抛弃),定期review;

    核心使用方单独集群保证容量。

    监控报警

    指标和日志。

    指标

    接口时延、流量、错误率;

    依赖时延、错误率;

    业务正确性;

    机器指标(cpu,网卡);

    正确覆盖(有问题确保要报警)。

    日志

    规范日志,去除无效日志;

    过滤器分类,配置不同报警阈值。预期日志分类,设置预期报警阈值;非预期日志>0即报警,需要立马解决。

    DEBUG/TRACE:开发人员开发/调试使用

    INFO:重要业务处理流程

    WARN:主业务处理流程可以继续,但需要关注

    ERROR:错误需要立马处理,影响用户使用

    FATAL:系统基本不可用

    日志需要携带上下文信息(context),看见日志,能基本判定问题。

    故障预处理

    即使止损,尽可能保用户体验,最后再定位问题。

    回滚:上线、配置

    兜底:验证兜底是否正常生效

    降级:启动降级预案,非核心依赖、接口降级

    熔断:是否正常触发、更改阈值强制触发

  • 相关阅读:
    python学习随笔--string[:]
    年少时读不懂 天龙八部,如今读懂已过少年
    web安全测试随笔
    纪录jmeter loop controller 使用中的一个坑
    移动设备覆盖统计数据源
    jmeter and postman
    web测试----http状态码
    转自莫某的java学习计划
    jquery实现页面加载时删除特定class 的div内前三个字符
    js学习
  • 原文地址:https://www.cnblogs.com/codingforum/p/11635502.html
Copyright © 2011-2022 走看看