liuxuhelloworld's notebook

高并发系统设计三大目标:

高性能

性能优化要以问题为导向,在合适的度量指标的参考下,持续地做性能优化。

常用的性能度量指标就是响应时间,相比平均响应时间和最大响应时间,分位响应时间是更合理的选择。90分位响应时间表示百分之90的请求在这个响应时间之内。

一般的,一个优秀系统的响应时间的99分位值应当控制在200ms以内,99.99%的响应时间应当在1s以内。

性能优化思路:

高可用

高可用指的是系统具备较高的无故障运行的能力。

可用性度量

如何度量可用性?

我们定义:

可用性 = MTBF / (MTBF + MTTR)

一般的,我们用几个九来描述可用性,比如,一个九指90%,两个九指99%,三个九指99.9%,四个九指99.99%,五个九指99.999%,…

一个九和两个九,人工运维基本就能达到。

三个九和四个九,需要建立完善的运维值班体系和故障处理流程。

五个九就要靠系统的容灾和自动恢复能力了。

一般的,核心业务系统的可用性应该达到四个九,非核心业务系统的可用性可以放宽到三个九。

故障转移(failover)

对等节点failover比较简单,某一个节点故障,随机选择其他节点就可以了。

主备节点failover比较复杂,需要做故障检测。一般通过心跳检测来做故障检测。主节点故障时触发选主操作,选主的结果需要在备份节点间达成一致,涉及分布式一致性算法。

超时控制

出现大面积延迟时,大量系统资源被占用,导致系统整体崩掉。超时控制就是要避免出现这种问题,当请求处理超过一定时间时,直接让请求失败,释放资源给其他请求。

超时控制的关键是超时时间的设定,超时时间过大或过小都不行,这个需要依据历史日志或经验来确定一个相对合理的超时时间,并根据实际情况做出调整。

降级

降级是为了保证核心服务的稳定而牺牲非核心服务的做法。

限流

限流通过对并发的请求进行限速来保护系统。

灰度发布

故障演练

故障演练指的是对系统进行一些破坏性的手段,观察在出现局部故障时,整体的系统表现是怎样的。

易扩展

为什么不容易实现易扩展呢?因为扩展并不仅仅是业务服务器的扩展,还涉及到数据库、缓存、第三方服务等上下游全链路的各种服务。