开篇词 | 为什么你要学习高并发系统设计?
下载APP
关闭
渠道合作
推荐作者
开篇词 | 为什么你要学习高并发系统设计?
2019-09-16 唐扬 来自北京
《高并发系统设计40问》
课程介绍
讲述:唐扬
时长10:02大小9.19M
你好,我是唐扬,现在在美图公司任职技术专家,负责美图秀秀社区的研发、优化和运行维护工作。从业十年,我一直在从事社区系统研发、架构设计、系统优化的工作,期间参与研发过三个 DAU 过千万的大型高并发系统。在这三个项目中,我参与了业务系统的开发和改造,也参与和主导过像 RPC 框架、分布式消息系统、注册中心等中间件系统的研发,对于高并发系统设计的各个方面都有所涉猎。
我见证了系统从初期构建,到承接高并发大流量的全过程,并在其中积累了大量的系统演进经验。我认为,虽说每家公司所处的行业不同,业务场景不同,但是设计和优化的思想却是万变不离其宗。
这些经验是一个个的“小套路”,它们相互联系,形成一套指引我们进行高并发系统设计的知识体系,其中包括了理论知识的讲解、问题场景的介绍、问题分析的过程,以及解决问题的思路。当你掌握这些“套路”之后,就能明确地知道,系统处于某一个阶段时,可能会面临的问题,然后及时找到架构升级优化的思路解决这些问题,提升系统性能。
从今天起,我会在“极客时间”上分享这些“套路”,和你一起分析问题原因,探讨解决方案,让你学有所用!
为什么要学习高并发系统设计?
在解答“为什么要学习高并发系统设计”之前,我想让你思考几个问题:
在微博中,明星动辄拥有几千万甚至上亿的粉丝,你要怎么保证明星发布的内容让粉丝实时地看到呢?
淘宝双十一,当你和上万人一起抢购一件性价比超高的衣服时,怎么保证衣服不会超卖?
春运时我们都会去 12306 订购火车票,以前在抢票时经常遇到页面打不开的情况,那么如果你来设计 12306 系统,要如何保证在千万人访问的同时也能支持正常抢票呢?
这些问题是你在设计和实现高并发系统时经常会遇到的痛点问题,都涉及如何在高并发场景下做到高性能和高可用,掌握这些内容,你开发的产品可以为用户提供更好的使用体验,你的技术能力也能有一个质的变化。
高并发系统设计知识,是你获取大厂 Offer 必不可少的利器
不可否认的是,目前的经济形势不好,很多公司(比如阿里、腾讯、今日头条)一方面在减少招聘的人员数量,另一方面也期望花费了人力成本之后可以给公司带来更大的价值。那么对于公司来说,仅仅懂得 CRUD 的程序员就不如有高并发系统设计经验的程序员有吸引力了。
所以当你去面试时,面试官会要求你有高并发设计经验,有的面试官会询问你的系统在遭遇百万并发时可能有哪些瓶颈点,以及有什么优化思路等问题,为的就是检验你是否真的了解这方面的内容。
那么进不了大厂,没有高并发的场景,这些设计的经验又要从何处来呢?这就是鸡生蛋蛋生鸡的问题了。我能肯定的是,当你学习这门课程,掌握了这方面的技术之后,大厂的 Offer 将不再遥不可及。
不要囿于公司现有的业务场景,你的能力,绝不止于此
那你可能会说:“我在小公司工作,小公司的系统并发不高,流量也不大,学习高并发系统设计似乎有些多此一举。”但我想说的是,公司业务流量平稳,并不表示不会遇到一些高并发的需求场景。
就拿电商系统中的下单流程设计技术方案为例。在每秒只有一次调用的系统中,你只需要关注业务逻辑本身就好了:查询库存是否充足,如果充足,就可以到数据库中生成订单,成功后锁定库存,然后进入支付流程。
这个流程非常清晰,实现也简单,但如果要做一次秒杀的活动,配合一些运营的推广,你会发现下单操作的调用量可能达到每秒 10000 次!
10000 次请求同时查询库存,是否会把库存系统拖垮?如果请求全部通过,那么就要同时生成 10000 次订单,数据库能否抗住?如果抗不住,我们要如何做?这些问题都可能出现,并让之前的方案不再适用,此时你就需要设计新的方案。
除此之外,同样是缓存的使用,在低并发下你只需要了解基本的使用方式,但在高并发场景下你需要关注缓存命中率,如何应对缓存穿透,如何避免雪崩,如何解决缓存一致性等问题,这就增加了设计方案的复杂度,对设计者能力的要求也会更高。所以,为了避免遇到问题时手忙脚乱,你有必要提前储备足够多的高并发知识,从而具备随时应对可能出现的高并发需求场景的能力。
我身边有很多在小公司打拼闯荡,小有建树的朋友,他们无一不经历过低谷期,又一一开拓了一片天地,究其原因,是因为他们没有将目光放在现有的业务场景中,而是保持着对于新技术的好奇心,时刻关注业界新技术的实现原理,思考如何使用技术来解决业务上的问题。
他们虽然性格很不同,但不甘于现状,突破自己的信念却是一致的。我相信,你也一定如此。所以完成业务需求,解决产品问题不应该是你最终的目标,提升技术能力和技术视野才应是你始终不变的追求。
计算机领域里虽然知识点庞杂,但很多核心思想都是相通的
举个例子,消息队列是高并发系统中常见的一种组件,它可以将消息生产方和消费方解耦,减少突发流量对于系统的冲击。但如果你的系统没有那么高的流量,你就永远不会使用消息队列了吗?当然不是。
系统模块要做到高内聚、低耦合,这是系统的基本设计思想,和是否高并发无关,而消息队列作为主要的系统解耦方式,应该是你技术百宝囊中一件不可或缺的制胜法宝。
又比如,缓存技术蕴含的是空间换时间的思想;压缩体现的是时间换空间的思想;分布式思想也最初体现在 CPU 的设计和实现上……这些内容,都是高并发系统设计中的内容,而我希望在这个课程中,帮你把握这些核心思想,让你触类旁通,举一反三。
所以,高并发系统设计无论是对于初入职场的工程师了解基本系统设计思想,还是对于有一定工作经验的同学完善自身技能树,为未来可能遇见的系统问题做好技术储备,都有很大的帮助。
也许你会担心知识点不成体系;担心只讲理论,没有实际的场景;担心只有空洞的介绍,没有干货。放心!我同样考虑了这些问题并在反复思考之后,决定以一个虚拟的系统为主线,讲解在流量和并发不断提升的情况下如何一步步地优化它,并在这个过程中穿插着讲解知识点,这样通过场景、原理、实践相结合的方式,来帮助你更快、更深入地理解和消化。
总体来说,学完这次课程,你会有三个收获:
掌握高并发系统设计的“套路”;
理解基本的系统设计思想,对新的知识触类旁通,举一反三;
突破技术的瓶颈,突破所处平台的限制,具备一个优秀架构师的资质。
课程设计
我将课程划分了三个模块来讲解,分别是:基础篇、演进篇和实战篇。
基础篇主要是一些基本的高并发架构设计理念,你可以把它看作整个课程的一个总纲,建立对高并发系统的初步认识。
演进篇是整个课程的核心,主要讲解系统支持高并发的方法。我会用一个虚拟的系统,带你分析当随着前端并发增加,这个系统的变化,以及你会遇到的一系列痛点问题。比如数据查询的性能瓶颈,缓存的高可用问题,然后从数据库、缓存、消息队列、分布式服务和维护这五个角度来展开,针对问题寻找解决方案,让你置身其中,真真切切地走一遍系统演进的道路。
实战篇将以两个实际案例,带你应用学到的知识应对高并发大流量的冲击。
一个案例是如何设计承担每秒几十万次用户未读数请求的系统。之所以选择它,是因为在大部分的系统中未读数都会是请求量最大、并发最高的服务,在微博时 QPS 会达到每秒 50 万次。同时,未读数系统的业务逻辑比较简单,在你了解设计方案的时候也不需要预先对业务逻辑有深入了解;另一个例子是信息流系统的设计,它是社区社交产品中的核心系统,业务逻辑复杂且请求量大,方案中几乎涉及高并发系统设计的全部内容。
下面是这个课程的目录,你能快速了解整个课程的知识体系。
写在最后
课程从原理到实战,以案例作为主线,涵盖了高并发系统设计的整个知识体系。只要你一步一步地坚持学习,课后多加思考,多练习,相信你的系统设计能力一定能够得到很大的提升,职业发展路径也会走得愈加宽阔。
最后,欢迎你在留言区和我说一说自己的情况,想要了解高并发的哪些内容,或者在高并发方面存在的一些困惑,一是方便我在后面的讲解中有所侧重地展开介绍,一是希望你在跟着我一起学完这个课程后,再回顾此前的问题,能够发现自己切实地成长与提高,这是我最希望看到的。
期待你的留言,也感谢你的信任,未来的三个月里,我们一起沟通、探讨、进步。
分享给需要的人,Ta购买本课程,你将得18元
生成海报并分享
赞 67
提建议
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
下一篇
01 | 高并发系统:它的通用设计方法是什么?
精选留言(141)
- 蓝魔丶2019-09-18也许我就是老师口中的那类人吧,不拘于当下的眼界,同时也有不甘平庸的野心61
- 亦知码蚁2019-09-16高并发与高性能的关系是啥
作者回复: 高并发是场景,高性能是目标
共 4 条评论22 - 与山鬼说2019-09-16赶上了最期待的课程21
- 业余草2019-09-18多租户 Saas 系统架构的设计思路 https://mp.weixin.qq.com/s/kywuJ6suLgMOzSfuZbdTsQ共 3 条评论20
- 钱2020-04-06说一下自己的理解: 1:😄不想做CRUD工程师,这个是不可能的,除非你不编写代码了,区别在于你CRUD的数据量是多少。 千级、万级、十万级、百万级、千万级、亿级、十亿级、百亿级、千亿级、万亿级,还可以继续,不过我主观认为百万级其实已到分水岭,后面亿级又是一个分水岭。 2:处理思路基本如下: 第一找专业的人来处理——恰当的工具处理恰当的事 第二人多力量大——一台机器扛不了就加机器 第三交给时间——拉长处理事情的链条 几乎所有事情的基本思路都是这样,具体到不同的细分领域具体的实现方案会有所不同。 在互联网技术这 池化技术——避免创建资源的性能损耗以及有效保护系统 异步化技术——比如:MQ,系统解藕,削峰填谷 缓存技术——提速大杀器 多线程技术——充分利用计算机多核的能力 RPC技术——提高开发并行度,系统解藕 分布式技术——提高系统性能和存储容量 3:看目录很是期待,有几个主题恰好现在自己也在弄,希望可以借鉴到更完美的解决方案。展开
作者回复: 加油💪
共 2 条评论17 - Jaswine2019-09-17来吧,我自己生蛋11
- Chocolate2019-09-16打卡,跟并发编程一起学,更爽9
- 段启超2019-09-19目前我的状态: 工作两年了,写CRUD 写到觉得很枯燥,很少涉及到高并发的业务。我意识到,目前我对于业务场景中所具有的高并发场景的识别能力很欠缺,虽然听过很多解决高并发的技术方案,但是始终停留在一个知道有这么个东西的层面,没有落地过,更没有去深入的了解过里边的原理什么的。希望能通过老师的讲解,完善一下自己在这个方面的短板。
作者回复: 加油💪
8 - lunar2019-09-17麻的, 听得专栏也不算少了, 但是觉得这是所有专栏的开篇词里, 最说痛我心的, 怒赞三千遍共 3 条评论5
- wkq27861302019-09-16看完目录就订阅了,和工作中用到的基本一样。5
- 小小程序猿2020-04-07突然想到一个问题:为什么服务器请求太大服务器会挂?
作者回复: 资源被耗尽
共 3 条评论4 - 行者2019-09-25打卡,要想设计一个高并发系统 首先,要做到高性能、高可用、可扩展 具体到细节 数据库层,要合理使用各个数据库,利用好其特性 缓存层,要提升缓存命中率,避免缓存穿透 消息队列层,要利用好消息队列削峰填谷,解耦的特点 进一步 如何治理服务,RPC 注册中心 复杂均衡 网关 最后 如何维护这些服务 我想,掌握了这些,就可以说自己是一个资深工程师了。 期待老师接下来的课程。展开
作者回复: 👍👍
4 - _Axios丶靜ﻩ2019-09-22打卡,目前正在看JAVA并发与实践这本书。书中大多都是基础内容,希望跟随这门课程掌握更多解决问题的套路。理论和实践结合,更好的提升自己
作者回复: 嗯那 ⛽️
3 - helloworld2019-09-22开始学习高并发系统设计,看了目录和老师计划讲课的思想,很贴个合实战,一希望自己坚持下来后能有所收获。打卡01。
作者回复: 加油💪
3 - 小布2019-09-20作者很nice,看目录,写出了大多数人的信心渴望3
- jc9090kkk2019-09-19这个课程真的是我梦寐以求的,以前对于高并发解决方案的知识脉络非常模糊,希望能从这个课程中把零碎的知识整理的更清晰,希望老师快快更新~
作者回复: 好嘞
3 - 岁月不待人@2019-09-17看到课程名称及简介,就确定要订阅这门课,是我的菜。 应该能够帮我系统的梳理高并发的设计思想及实现。3
- 🔥是希文er啊2019-12-27唐老师您好,我想请教下怎么更好的学习这门课程,做了3年的curd 这些知识知识只有听说过,而且还是部分。听一遍也只是听明白了,但是原理什么的基本不懂。思考都不知道往哪方面思考。怎么办啊?还是第一遍先跟着,第二遍在思考实践。多看几遍这样?
作者回复: 1. 可以跟着课程学一遍 2. 根据每节课的主题做一些延伸的阅读,可以Google一些文章 3. 夯实基础知识 4. 读一些相关的源代码
2 - Kevin Liao2019-09-24满怀期待的一门课程,收获必会良多,谢谢老师。
作者回复: 加油💪
2 - helloworld2019-09-22开始学习,打卡012