SLA服务等级协议
Service Level Agreement,包括:
服务目录:如feed流(推荐信息流)
服务可用性:99.9,99.99等
服务故障恢复时间:多长时间可以恢复如10分钟
依赖性
强依赖:挂掉后用户无法使用
弱依赖:挂掉后用户可以使用,但体验不佳
核心依赖:挂掉后用户体验损伤很大
非核心依赖:挂掉后用户体验基本无损
核心概念
并发数:同一时刻处理的请求数,并发能力受限于worker数量、cpu、memory等
吞吐量QPS:每秒钟处理的请求数
响应时间:处理一个请求的响应时间
avg:平均响应时间
pct99: 99%的请求相应时间
目标
在任何情况下,尽可能保证SLA
准则:Design for failure,墨菲定律,自动化
产品核心指标
新增,留存,活跃,营收
故障预防
重试
解决下游单机/网络抖动等问题,提高接口可用性。
重试一次会导致两倍流量,会引起雪崩。
原则是核心从宽,非核心从严。
核心依赖:1次重试+10%比例限制。非核心依赖:0次重试。
合理的超时+合理的重试+适当的缓存策略。超时timeout = 2 * time_pct99.5
熔断
为了保护下游,防止无效等待和占用资源,可以引入熔断,即一段时间内直接返回不去请求。
兜底
服务异常时,通过策略尽可能保证用户体验。如增加默认数据,Redis,local cache(热内容,上已刷等)
编码设计
良好的设计
服务职责单一、高内聚、低耦合
读写分离、部署隔离(非核心和核心分开部署)、存储隔离(不同的app不同的数据库和Redis)
服务异常外抛(有异常抛exception),api异常屏蔽
防御性编程
防御依赖(假定下游一定会有异常)、使用方(参数校验非常重要)、自己
单元测试、集成测试、故障演练