开篇词 秒杀系统的“三高”架构是怎么炼成的?

记得那是 2016 年初,我做 IM 云核心服务开发。当时我们的核心服务是个大的单体应用,每到客户做活动的时候,系统的 CPU 负载都会超过 90%,请求错误率超 10%。

更可怕的是,高负载导致已建立的连接因心跳超时而断开,而连接断开后客户端又尝试建立连接,最终导致雪崩,服务被压垮重启,整个集群不可用。当时许多客户都来投诉我们,威胁着要退钱,我们整个团队都面临巨大的压力。


在后面的工作中,我们暂停了功能开发,转而寻找事故原因。最后发现,主要是因为系统功能没拆分,从而导致业务处理逻辑跟连接管理功能抢夺资源;也缺乏熔断和限流,没有预防 DDoS 攻击的能力;热点数据缓存设计也不合理,系统堆积大量请求,等等。


为什么会出现这些问题?就是因为在做架构设计的时候,没考虑到高可用、高性能、高并发的问题!


还有一次,那时我进入小米没多久,遇到了小米国际电商举办 2017 年印度 Diwali 节秒杀活动。当时运营和客服就收到了许多米粉的投诉。原来活动期间秒杀系统因为并发压力大,CPU 被打满,大量用户点了秒杀按钮后不能下单,一直提示“系统繁忙,请稍后再试”。


活动不能停,也不能直接在线上系统排查和调试,我和同事急得像热锅上的蚂蚁,最后紧急扩容了一半的机器,才扛过这场秒杀活动。

正是经历了这些事故,我才感叹,对大流量系统来说,处理好“三高”问题有多重要。

image.png比如,高可用对系统来说就是生命线,因为一个可用的系统才能产生价值;而系统的并发能力越高,则意味着它能同时服务的用户就越多,如果没有处理好,会因为并发请求抢夺资源而耗时过长或数据错乱;还有单机性能的提高,既可以提升系统稳定性,还能降低系统运行成本。

如今三四年过去了, 在工作中我也积累了丰富的经验,我曾将 IM 系统长连接服务的单机并发能力从 2 万提升到 5 万,可用性从 99.9% 提升到 99.999%;也曾将小米国际电商秒杀系统的整体性能提升了至少 30%。

与此同时,我还发现众多大厂在招聘高级工程师以上的岗位时,都要求有“三高” 架构方面的经验。比如拉勾上发布的岗位信息:

image.png


为什么大厂会有这样的招聘要求呢?

因为大厂本身用户量大,或者它的某项业务的用户在迅速增长,这意味着服务器成本非常高。为了降低企业成本,大厂就需要掌握“三高”技术的高级工程师努力提升软件的性能和并发能力,最大限度压榨服务器性能,减少浪费。

还有用户量和业务达到一定程度后,意味着每次宕机都可能给公司带来巨大的经济损失,而掌握“三高”架构的高级工程师可以有效降低非人为导致的风险。

所以,如果你掌握了“三高”架构并拥有实践经验,也就意味着你应聘这些岗位的时候更具有竞争力。

还有,据我多年经验发现,初级架构师或服务端工程师不一定能接触到大流量系统。即使接触到了,他们也不一定能负责系统的“三高”架构设计。而当你随着工作经验的增长,公司会尝试给你一些很有挑战的工作,此时你怎么办呢?逃避吗?

所以,对于架构师和服务端工程师来说,学习“三高”架构还是一次获得成长和晋升的机会。

更多课程可访问https://shop.exp-9.com 了解详情

“三高”架构对秒杀系统的意义

秒杀系统对电商来说是流量大杀器。每年春节、情人节、618、双十一等大促节日,各大电商平台都会有秒杀活动,好几亿的用户会参与进来。而对小米来说,每年双十一也有超过百万人来参加。

在小米工作期间,我发现秒杀系统的业务逻辑其实很简单,它的难点就是保障系统的高可用、高并发、高性能。

image.png

为什么这样说呢?

秒杀的核心业务主要是配置秒杀活动,让用户在活动页上抢购特价商品并下单。这个看似简单的功能,其背后需要做大量工作来支撑庞大流量,以免系统在巨大的压力下宕机,既影响用户体验又会造成巨大经济损失。

而那次 2017 年的印度 Diwali 节秒杀活动,就是没有处理好这方面的事情。在那之后,我发现小米国际电商的秒杀系统在高并发下 CPU 容易超过 90%,Redis 请求量也非常高。而第二年,也就是 2018 年参与米粉节秒杀活动的用户量和并发 QPS 预计在百万以上。通过评估,我发现如果要扛住这次活动,要么增加机器,要么优化秒杀系统并发性能,否则系统会被流量压垮。

怎么办?当然是迎难而上。在机器成本不变的前提下,基于以前 IM 云“三高”架构的优化经验,我对小米国际电商的秒杀系统做了一系列优化,让它的并发性能提升了 30%,最终保障了这次米粉节秒杀系统稳定运行。

正是因为我实际经历过秒杀系统的“三高”问题,而它确实对所有涉及 ToC 端的交易业务非常重要。所以,我想以秒杀系统为例,在典型场景下为你详细介绍“三高”架构。我也希望能对想要了解秒杀、抢购、抢票等涉及“三高”场景的架构师和服务端开发工程师有所帮助。

课程设计

在这里,我将会以一个完整的项目流程形式,从需求分析、架构设计、代码实现、性能测试这四大部分,渐次带你设计出符合“三高”要求的秒杀系统,真正搞懂“三高”架构及其实现。

整个专栏的设计思路如下图所示:image.png

第一部分,需求分析(模块一):我将从电商发展史和秒杀系统的业务背景入手,介绍秒杀系统的前后端功能需求和非功能需求,特别是如何通过思想实验来分析非功能需求中的“三高”并计算其指标。通过学习这块内容,我希望你能掌握“三高”架构的需求分析,不至于在开始之初就手忙脚乱。

第二部分,架构设计(模块二 ~ 五):这部分我将为你分享秒杀系统的总体架构设计及其具体的高可用、高性能、高并发原理和方法。这部分,你将学到如何通过领域驱动设计(DDD)来设计秒杀系统,如何利用云计算基础设施设计高可用架构,如何利用池化技术、漏斗模型、熔断和限流等技术手段提升并发能力和稳定性。

第三部分,代码实现(模块六 ~ 九):我将介绍秒杀系统的代码实现细节,希望你能学到如何利用热更新、池化技术、缓存技术、漏斗模型等高级编程技巧,提升服务的并发性能和稳定性。

第四部分,性能测试(模块十):我将介绍项目落地的最后环节——如何做好验收工作,希望你能学会用压力测试来做性能调优,以及了解项目上线后需要注意的事情。


相关文章

01课 - 功能需求:秒杀业务背景及前端需求是怎么产生的?(秒杀系统)

01课 - 功能需求:秒杀业务背景及前端需求是怎么产生的?(秒杀系统)

先问你一个问题:为何我们要在项目开始前要先了解业务背景和需求?拿到一个项目,你也许能从技术层面上做出来,但你真的知道为何要做这个项目吗?如果没有充分了解业务背景和需求,你能确保自己理解项目的业务价值吗...

04课 - 系统架构:如何设计秒杀的系统架构?(秒杀系统)

04课 - 系统架构:如何设计秒杀的系统架构?(秒杀系统)

你好,欢迎进入模块二的系统架构设计。前面 3 讲我们介绍了如何分析功能需求和非功能需求,按照一个软件项目开发流程,接下来我们要做什么呢?设计软件的系统架构。为什么要重视架构设计呢?软件的系统架构和我们...

课程表:打造千万级流量秒杀系统(秒杀系统)

收集不容易,访问 https://shop.exp-9.com/#/goods?goods_id=2  获取所有课程内容课程列表:00 开篇词秒杀系统的“三高”架构是怎么炼成的?....

02课 - 功能需求:秒杀活动信息是如何管理的?(秒杀系统)

02课 - 功能需求:秒杀活动信息是如何管理的?(秒杀系统)

上一讲我们介绍了秒杀业务背景和前端需求是怎么产生的。回想一下,你在秒杀活动的前端页面能看到什么?有活动场次信息,比如第一场、第二场,以及对应每个活动场次的详情及规则,有商品的名称、价格等基本信息,还有...

03课 - 非功能需求:高可用、高性能、高并发的指标如何计算?(秒杀系统)

03课 - 非功能需求:高可用、高性能、高并发的指标如何计算?(秒杀系统)

你好,欢迎来到第 03 讲,这一讲主要介绍秒杀系统的非功能需求分析,特别是涉及高可用、高性能、高并发方面的内容。前两讲,我们介绍了秒杀系统的前、后端功能需求,许多人在做业务系统时会发现,虽然功能自测、...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。