容灾稳定性

早过忘川 提交于 2019-11-30 18:47:32

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异常屏蔽

防御性编程

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

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!