你好,我是易乐天,到 2020 年,我在软件行业已经 10 年了。
我曾经做过 Linux 系统编程相关的工作,积累了许多性能优化方面的经验。后来,我开始做分布式系统的架构设计和实现,特别是项目当中涉及的“三高”架构——高可用、高性能、高并发。
其间,我越来越体会到“三高”架构对业务系统的长期稳定运行起着非常重要的作用。
记得那是 2016 年初,我做 IM 云核心服务开发。当时我们的核心服务是个大的单体应用,每到客户做活动的时候,系统的 CPU 负载都会超过 90%,请求错误率超 10%。
更可怕的是,高负载导致已建立的连接因心跳超时而断开,而连接断开后客户端又尝试建立连接,最终导致雪崩,服务被压垮重启,整个集群不可用。当时许多客户都来投诉我们,威胁着要退钱,我们整个团队都面临巨大的压力。
在后面的工作中,我们暂停了功能开发,转而寻找事故原因。最后发现,主要是因为系统功能没拆分,从而导致业务处理逻辑跟连接管理功能抢夺资源;也缺乏熔断和限流,没有预防 DDoS 攻击的能力;热点数据缓存设计也不合理,系统堆积大量请求,等等。
为什么会出现这些问题?就是因为在做架构设计的时候,没考虑到高可用、高性能、高并发的问题!
还有一次,那时我进入小米没多久,遇到了小米国际电商举办 2017 年印度 Diwali 节秒杀活动。当时运营和客服就收到了许多米粉的投诉。原来活动期间秒杀系统因为并发压力大,CPU 被打满,大量用户点了秒杀按钮后不能下单,一直提示“系统繁忙,请稍后再试”。
活动不能停,也不能直接在线上系统排查和调试,我和同事急得像热锅上的蚂蚁,最后紧急扩容了一半的机器,才扛过这场秒杀活动。
正是经历了这些事故,我才感叹,对大流量系统来说,处理好“三高”问题有多重要。
比如,高可用对系统来说就是生命线,因为一个可用的系统才能产生价值;而系统的并发能力越高,则意味着它能同时服务的用户就越多,如果没有处理好,会因为并发请求抢夺资源而耗时过长或数据错乱;还有单机性能的提高,既可以提升系统稳定性,还能降低系统运行成本。
如今三四年过去了, 在工作中我也积累了丰富的经验,我曾将 IM 系统长连接服务的单机并发能力从 2 万提升到 5 万,可用性从 99.9% 提升到 99.999%;也曾将小米国际电商秒杀系统的整体性能提升了至少 30%。
与此同时,我还发现众多大厂在招聘高级工程师以上的岗位时,都要求有“三高” 架构方面的经验。比如拉勾上发布的岗位信息:
(以上职位信息来源:拉勾网)
为什么大厂会有这样的招聘要求呢?
因为大厂本身用户量大,或者它的某项业务的用户在迅速增长,这意味着服务器成本非常高。为了降低企业成本,大厂就需要掌握“三高”技术的高级工程师努力提升软件的性能和并发能力,最大限度压榨服务器性能,减少浪费。
还有用户量和业务达到一定程度后,意味着每次宕机都可能给公司带来巨大的经济损失,而掌握“三高”架构的高级工程师可以有效降低非人为导致的风险。
所以,如果你掌握了“三高”架构并拥有实践经验,也就意味着你应聘这些岗位的时候更具有竞争力。
还有,据我多年经验发现,初级架构师或服务端工程师不一定能接触到大流量系统。即使接触到了,他们也不一定能负责系统的“三高”架构设计。而当你随着工作经验的增长,公司会尝试给你一些很有挑战的工作,此时你怎么办呢?逃避吗?
所以,对于架构师和服务端工程师来说,学习“三高”架构还是一次获得成长和晋升的机会。另外,想要进大厂拿高薪,我们拉勾教育还有一门《Java 工程师高薪训练营》,往期已经有学员经过学习训练+面试模拟+大厂内推成功拿到 Offer,你也可以试试哦。
秒杀系统对电商来说是流量大杀器。每年春节、情人节、618、双十一等大促节日,各大电商平台都会有秒杀活动,好几亿的用户会参与进来。而对小米来说,每年双十一也有超过百万人来参加。
在小米工作期间,我发现秒杀系统的业务逻辑其实很简单,它的难点就是保障系统的高可用、高并发、高性能。
为什么这样说呢?
秒杀的核心业务主要是配置秒杀活动,让用户在活动页上抢购特价商品并下单。这个看似简单的功能,其背后需要做大量工作来支撑庞大流量,以免系统在巨大的压力下宕机,既影响用户体验又会造成巨大经济损失。
而那次 2017 年的印度 Diwali 节秒杀活动,就是没有处理好这方面的事情。在那之后,我发现小米国际电商的秒杀系统在高并发下 CPU 容易超过 90%,Redis 请求量也非常高。而第二年,也就是 2018 年参与米粉节秒杀活动的用户量和并发 QPS 预计在百万以上。通过评估,我发现如果要扛住这次活动,要么增加机器,要么优化秒杀系统并发性能,否则系统会被流量压垮。
怎么办?当然是迎难而上。在机器成本不变的前提下,基于以前 IM 云“三高”架构的优化经验,我对小米国际电商的秒杀系统做了一系列优化,让它的并发性能提升了 30%,最终保障了这次米粉节秒杀系统稳定运行。
正是因为我实际经历过秒杀系统的“三高”问题,而它确实对所有涉及 ToC 端的交易业务非常重要。所以,我想以秒杀系统为例,在典型场景下为你详细介绍“三高”架构。我也希望能对想要了解秒杀、抢购、抢票等涉及“三高”场景的架构师和服务端开发工程师有所帮助。
在这里,我将会以一个完整的项目流程形式,从需求分析、架构设计、代码实现、性能测试这四大部分,渐次带你设计出符合“三高”要求的秒杀系统,真正搞懂“三高”架构及其实现。
整个专栏的设计思路如下图所示:
第一部分,需求分析(模块一):我将从电商发展史和秒杀系统的业务背景入手,介绍秒杀系统的前后端功能需求和非功能需求,特别是如何通过思想实验来分析非功能需求中的“三高”并计算其指标。通过学习这块内容,我希望你能掌握“三高”架构的需求分析,不至于在开始之初就手忙脚乱。
第二部分,架构设计(模块二 ~ 五):这部分我将为你分享秒杀系统的总体架构设计及其具体的高可用、高性能、高并发原理和方法。这部分,你将学到如何通过领域驱动设计(DDD)来设计秒杀系统,如何利用云计算基础设施设计高可用架构,如何利用池化技术、漏斗模型、熔断和限流等技术手段提升并发能力和稳定性。
第三部分,代码实现(模块六 ~ 九):我将介绍秒杀系统的代码实现细节,希望你能学到如何利用热更新、池化技术、缓存技术、漏斗模型等高级编程技巧,提升服务的并发性能和稳定性。
第四部分,性能测试(模块十):我将介绍项目落地的最后环节——如何做好验收工作,希望你能学会用压力测试来做性能调优,以及了解项目上线后需要注意的事情。
一直以来秒杀系统的难点在“三高”上,如果你学完这个专栏的内容,我相信有关它的稳定性、缓存穿透、库存超售、反黄牛等问题,将迎刃而解。
而且课程中还有占 40% 的“三高”架构设计原理,再加上代码实现部分,我希望通过这个典型的业务场景,能让你真正搞懂“三高”架构,在涉及其他系统架构时也能举一反三、融会贯通,进而在工作中享受成就的乐趣,并拥有更宽广、顺畅的职业发展。
“三高”架构的学习之旅已然开始,我也在留言区期待你的声音。有效的学习,永远是“学”和“习”两重动作的合力成效,希望我们的交流过程更好地促成进步,也希望你记得,这里有众多和你一样在努力的同好,一起钻研、前行。
《Java 工程师高薪训练营》
实战训练+面试模拟+大厂内推,想要提升技术能力,进大厂拿高薪,点击链接,提升自己!