Fork me on GitHub

高并发项目指南书

本文主要学习参考自“拉勾教育”《打造千万级流量秒杀系统》,作者易乐天,链接点此.

对于秒杀系统来说,它的核心非功能需求主要有:高可用指标、高性能指标、高并发指标,比如可用性方面要高于 99.99%,高性能方面要求请求延迟小于 100ms,高并发方面要求QPS 大于 10万。这三个指标俗称“三高”要求,公司不同,指标大小要求也会有所不同。

1. 高可用指标

高可用指标是指用来衡量一个系统可用性有多高。这里有几个需要了解的概念:

  1. MTBF(Mean Time Between Failure,平均可用时长),系统正常、稳定运行的平均时长,比如三天内系统出现了3次故障,每次持续1小时,那么平均可用时长是23小时。

  2. MTTR(Mean Time To Repair,平均修复时长),系统从失效后到恢复正常所耗费的平均时间,比如前面提到的每次故障持续1小时。

  3. SLA(Service-Level Agreement,服务等级协议),用于评估服务可用性等级,计算公式是MTBF/(MTBF+MTTR),一般我们所说的可用性高于 99.99%,是指 SLA 高于 99.99%。

  4. 那么,在实际项目中SLA应该如何计算呢?SLA的计算规则如下。

    1. 如果一个系统的正常运行还依赖多个子系统,比如系统中有 a、b、c、d 四个子系统(系统依赖于 a,a 依赖于b 和 c,b 依赖于 d),只要其中一个子系统不正常,整个系统就无法正常工作,那么整个系统的 SLA = SLA(a) × SLA(b) × SLA(c) × SLA(d)。

    假如四个子系统的SLA分别为 99.99%、99.995%、99.995%、99.999%,那么最终的 SLA 为 99.979%,整体SLA小于每一个子系统的SLA。

    1. 如果两个子系统作为主备关系提供服务时,只有两个子系统都出问题了才会影响整个系统,那么SLA=1-(1-SLA(a1)) × (1-SLA(a2))。

    如果 a1 系统的 SLA 为 99.99%,a2 系统的 SLA 为 99.995%,那么系统最终的 SLA 为 99.9999995%。当然这是理想情况,主备切换也是需要耗费时间的,实际计算的时候需要将主备切换耗时考虑在内。

2. 高并发指标

QPS(Queries Per Second,每秒查询率)。

范例:

某电商通过观察数据统计得知,自己的日活大概有 600 万。活动期间,运营团队在社交媒体上推广,预计可拉新 50 万,那么活动当天日活大概就有 650 万。根据经验,活动期间活跃用户占日活用户 70%,那么参加这场活动的活跃用户大概有 455 万。

假如有一爆款商品,库存只有 1000 件,预计会有 30% 的活跃用户参加秒杀,那么参与抢购的人大概是 136.5万人。假如每个用户每秒触发 2 次请求,那么业务服务承载的 QPS 最高可能达到 273 万。另外,我们还知道它的底层 Redis 承载能力为 1 万 QPS。

根据业务服务承载最高值达 270 万 QPS 以及底层 Redis 承载能力 1 万 QPS,我们预留 10% ~ 20% 的余量,可以初步制定出并发指标:业务服务300万QPS,底层资源 8000QPS。

这里你可能会问了:为何业务服务的 QPS 要比实际的高,而底层资源 QPS 却比实际承载能力低呢?

其实这是一种保护措施:业务系统设计上保留余量,要比计算出来的 QPS 高一些,以防实际突发流量高于估算值导致系统不稳定;底层资源一般比较固定,不容易扩容,需要限制QPS不能超过其承载能力。总的来说,系统资源在设计上要留有 10% ~ 20% 的余量,以便应对突发流量。

3. 高性能指标

不同并发压力下,请求延迟可能不同。通常来说,并发压力越大,平均请求延迟也越大。这好比排队买东西,排队的人越多,最后一个人买东西耗时越长。所以,我们在评估性能的时候,通常需要跟并发指标关联起来。例如,并发低于100万时,平均请求延迟不高于200ms。

五视图

  1. 逻辑视图:对应逻辑架构,主要关注功能需求,以及系统职责和行为的划分。逻辑视图不仅包括用户可见的功能,还包括相应的辅助功能。比如秒杀系统中的活动场次切换、商品列表、用户登录、活动管理、后台权限等功能,其中后台权限属于辅助功能。
  2. 开发视图:对应开发架构,主要关注系统开发过程中的质量属性。它包括软件源码的组织方式、配置方式、编译打包方式以及与第三方包的依赖关系等。
  3. 运行视图:对应运行架构,主要关注软件运行过程中的质量属性,它包括进程、线程、协程、对象之间的并发、同步、通信的问题等。
  4. 物理视图:对应物理架构,主要关注安装和部署需求。它包括软件运行时的系统、网络、服务器等基础设施和相关配置,以及如何利用基础设施来实现应用程序的高可用、可伸缩等。
  5. 数据视图:对应数据架构,主要关注数据需求,它包括数据的格式、属性、关系等。

秒杀场景的物理架构内容:

  1. 动静分离,CDN缓存,秒杀系统静态页面和静态数据。
  2. 多个可用区、多台机器同时提供后端服务。作为一个整体对外提供服务,需要部署路由器、防火墙、交换机、SLB(Server Load Balancer,负载均衡器)。路由器是负责接收外网请求并转发到内网;防火墙负责过滤掉有风险的数据,比如过滤掉黑客发起的网络攻击;交换机负责将请求转发到具体的可用区内;SLB 是负载均衡器,它可以将可用区内多个节点作为一个整体对外提供访问,并将请求均衡地转发到后端各节点。
  3. 域名解析,将域名解析到 SLB 外网 IP 上。
-------------The End-------------