高并发系统设计 40 问
唐扬
美图公司技术专家
49013 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
高并发系统设计 40 问
15
15
1.0x
00:00/10:02
登录|注册

开篇词 | 为什么你要学习高并发系统设计?

讲述:唐扬大小:9.19M时长:10:02
实战篇
演进篇
基础篇
分布式思想
缓存技术的思想
消息队列解耦系统
提前储备高并发知识
小公司也可能遇到高并发需求
经济形势下,技术能力更有价值
面试官会询问高并发设计经验
对于大厂Offer有吸引力
支持大量用户同时访问
确保商品不会超卖
保证实时内容传达
课程设计
核心思想相通
能力不止于公司现有业务场景
高并发系统设计知识
为什么学习高并发系统设计?
高并发系统设计

该思维导图由 AI 生成,仅供参考

你好,我是唐扬,现在在美图公司任职技术专家,负责美图秀秀社区的研发、优化和运行维护工作。从业十年,我一直在从事社区系统研发、架构设计、系统优化的工作,期间参与研发过三个 DAU 过千万的大型高并发系统。在这三个项目中,我参与了业务系统的开发和改造,也参与和主导过像 RPC 框架、分布式消息系统、注册中心等中间件系统的研发,对于高并发系统设计的各个方面都有所涉猎。
我见证了系统从初期构建,到承接高并发大流量的全过程,并在其中积累了大量的系统演进经验。我认为,虽说每家公司所处的行业不同,业务场景不同,但是设计和优化的思想却是万变不离其宗。
这些经验是一个个的“小套路”,它们相互联系,形成一套指引我们进行高并发系统设计的知识体系,其中包括了理论知识的讲解、问题场景的介绍、问题分析的过程,以及解决问题的思路。当你掌握这些“套路”之后,就能明确地知道,系统处于某一个阶段时,可能会面临的问题,然后及时找到架构升级优化的思路解决这些问题,提升系统性能。
从今天起,我会在“极客时间”上分享这些“套路”,和你一起分析问题原因,探讨解决方案,让你学有所用!

为什么要学习高并发系统设计?

在解答“为什么要学习高并发系统设计”之前,我想让你思考几个问题:
在微博中,明星动辄拥有几千万甚至上亿的粉丝,你要怎么保证明星发布的内容让粉丝实时地看到呢?
淘宝双十一,当你和上万人一起抢购一件性价比超高的衣服时,怎么保证衣服不会超卖?
春运时我们都会去 12306 订购火车票,以前在抢票时经常遇到页面打不开的情况,那么如果你来设计 12306 系统,要如何保证在千万人访问的同时也能支持正常抢票呢?
这些问题是你在设计和实现高并发系统时经常会遇到的痛点问题,都涉及如何在高并发场景下做到高性能和高可用,掌握这些内容,你开发的产品可以为用户提供更好的使用体验,你的技术能力也能有一个质的变化。

高并发系统设计知识,是你获取大厂 Offer 必不可少的利器

不可否认的是,目前的经济形势不好,很多公司(比如阿里、腾讯、今日头条)一方面在减少招聘的人员数量,另一方面也期望花费了人力成本之后可以给公司带来更大的价值。那么对于公司来说,仅仅懂得 CRUD 的程序员就不如有高并发系统设计经验的程序员有吸引力了。
所以当你去面试时,面试官会要求你有高并发设计经验,有的面试官会询问你的系统在遭遇百万并发时可能有哪些瓶颈点,以及有什么优化思路等问题,为的就是检验你是否真的了解这方面的内容。
那么进不了大厂,没有高并发的场景,这些设计的经验又要从何处来呢?这就是鸡生蛋蛋生鸡的问题了。我能肯定的是,当你学习这门课程,掌握了这方面的技术之后,大厂的 Offer 将不再遥不可及。

不要囿于公司现有的业务场景,你的能力,绝不止于此

那你可能会说:“我在小公司工作,小公司的系统并发不高,流量也不大,学习高并发系统设计似乎有些多此一举。”但我想说的是,公司业务流量平稳,并不表示不会遇到一些高并发的需求场景。
就拿电商系统中的下单流程设计技术方案为例。在每秒只有一次调用的系统中,你只需要关注业务逻辑本身就好了:查询库存是否充足,如果充足,就可以到数据库中生成订单,成功后锁定库存,然后进入支付流程。
这个流程非常清晰,实现也简单,但如果要做一次秒杀的活动,配合一些运营的推广,你会发现下单操作的调用量可能达到每秒 10000 次!
10000 次请求同时查询库存,是否会把库存系统拖垮?如果请求全部通过,那么就要同时生成 10000 次订单,数据库能否抗住?如果抗不住,我们要如何做?这些问题都可能出现,并让之前的方案不再适用,此时你就需要设计新的方案。
除此之外,同样是缓存的使用,在低并发下你只需要了解基本的使用方式,但在高并发场景下你需要关注缓存命中率,如何应对缓存穿透,如何避免雪崩,如何解决缓存一致性等问题,这就增加了设计方案的复杂度,对设计者能力的要求也会更高。所以,为了避免遇到问题时手忙脚乱,你有必要提前储备足够多的高并发知识,从而具备随时应对可能出现的高并发需求场景的能力。
我身边有很多在小公司打拼闯荡,小有建树的朋友,他们无一不经历过低谷期,又一一开拓了一片天地,究其原因,是因为他们没有将目光放在现有的业务场景中,而是保持着对于新技术的好奇心,时刻关注业界新技术的实现原理,思考如何使用技术来解决业务上的问题。
他们虽然性格很不同,但不甘于现状,突破自己的信念却是一致的。我相信,你也一定如此。所以完成业务需求,解决产品问题不应该是你最终的目标,提升技术能力和技术视野才应是你始终不变的追求。

计算机领域里虽然知识点庞杂,但很多核心思想都是相通的

举个例子,消息队列是高并发系统中常见的一种组件,它可以将消息生产方和消费方解耦,减少突发流量对于系统的冲击。但如果你的系统没有那么高的流量,你就永远不会使用消息队列了吗?当然不是。
系统模块要做到高内聚、低耦合,这是系统的基本设计思想,和是否高并发无关,而消息队列作为主要的系统解耦方式,应该是你技术百宝囊中一件不可或缺的制胜法宝。
又比如,缓存技术蕴含的是空间换时间的思想;压缩体现的是时间换空间的思想;分布式思想也最初体现在 CPU 的设计和实现上……这些内容,都是高并发系统设计中的内容,而我希望在这个课程中,帮你把握这些核心思想,让你触类旁通,举一反三。
所以,高并发系统设计无论是对于初入职场的工程师了解基本系统设计思想,还是对于有一定工作经验的同学完善自身技能树,为未来可能遇见的系统问题做好技术储备,都有很大的帮助。
也许你会担心知识点不成体系;担心只讲理论,没有实际的场景;担心只有空洞的介绍,没有干货。放心!我同样考虑了这些问题并在反复思考之后,决定以一个虚拟的系统为主线,讲解在流量和并发不断提升的情况下如何一步步地优化它,并在这个过程中穿插着讲解知识点,这样通过场景、原理、实践相结合的方式,来帮助你更快、更深入地理解和消化。
总体来说,学完这次课程,你会有三个收获:
掌握高并发系统设计的“套路”;
理解基本的系统设计思想,对新的知识触类旁通,举一反三;
突破技术的瓶颈,突破所处平台的限制,具备一个优秀架构师的资质。

课程设计

我将课程划分了三个模块来讲解,分别是:基础篇、演进篇和实战篇。
基础篇主要是一些基本的高并发架构设计理念,你可以把它看作整个课程的一个总纲,建立对高并发系统的初步认识。
演进篇是整个课程的核心,主要讲解系统支持高并发的方法。我会用一个虚拟的系统,带你分析当随着前端并发增加,这个系统的变化,以及你会遇到的一系列痛点问题。比如数据查询的性能瓶颈,缓存的高可用问题,然后从数据库、缓存、消息队列、分布式服务和维护这五个角度来展开,针对问题寻找解决方案,让你置身其中,真真切切地走一遍系统演进的道路。
实战篇将以两个实际案例,带你应用学到的知识应对高并发大流量的冲击。
一个案例是如何设计承担每秒几十万次用户未读数请求的系统。之所以选择它,是因为在大部分的系统中未读数都会是请求量最大、并发最高的服务,在微博时 QPS 会达到每秒 50 万次。同时,未读数系统的业务逻辑比较简单,在你了解设计方案的时候也不需要预先对业务逻辑有深入了解;另一个例子是信息流系统的设计,它是社区社交产品中的核心系统,业务逻辑复杂且请求量大,方案中几乎涉及高并发系统设计的全部内容。
下面是这个课程的目录,你能快速了解整个课程的知识体系。

写在最后

课程从原理到实战,以案例作为主线,涵盖了高并发系统设计的整个知识体系。只要你一步一步地坚持学习,课后多加思考,多练习,相信你的系统设计能力一定能够得到很大的提升,职业发展路径也会走得愈加宽阔。
最后,欢迎你在留言区和我说一说自己的情况,想要了解高并发的哪些内容,或者在高并发方面存在的一些困惑,一是方便我在后面的讲解中有所侧重地展开介绍,一是希望你在跟着我一起学完这个课程后,再回顾此前的问题,能够发现自己切实地成长与提高,这是我最希望看到的。
期待你的留言,也感谢你的信任,未来的三个月里,我们一起沟通、探讨、进步。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

学习高并发系统设计对技术人员至关重要,能够提升个人竞争力,为公司创造更大的价值。作者唐扬通过分享自身十年从业经验,强调了高并发系统设计的重要性。课程分为基础篇、演进篇和实战篇,涵盖了高并发系统设计的整个知识体系。演进篇是核心内容,通过虚拟系统分析高并发场景下的系统变化和痛点问题,从数据库、缓存、消息队列、分布式服务和维护等角度寻找解决方案。实战篇则通过两个实际案例展示如何应对高并发大流量的挑战。课程内容丰富,从原理到实战,以案例为主线,能够帮助读者全面掌握高并发系统设计的知识体系。通过坚持学习、思考和练习,读者的系统设计能力将得到提升,职业发展路径也会更加宽阔。作者期待读者的留言和沟通,希望能够在探讨中共同进步。

2019-09-1676人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(141)

  • 最新
  • 精选
  • 亦知码蚁
    高并发与高性能的关系是啥

    作者回复: 高并发是场景,高性能是目标

    2019-09-16
    4
    28
  • 说一下自己的理解: 1:😄不想做CRUD工程师,这个是不可能的,除非你不编写代码了,区别在于你CRUD的数据量是多少。 千级、万级、十万级、百万级、千万级、亿级、十亿级、百亿级、千亿级、万亿级,还可以继续,不过我主观认为百万级其实已到分水岭,后面亿级又是一个分水岭。 2:处理思路基本如下: 第一找专业的人来处理——恰当的工具处理恰当的事 第二人多力量大——一台机器扛不了就加机器 第三交给时间——拉长处理事情的链条 几乎所有事情的基本思路都是这样,具体到不同的细分领域具体的实现方案会有所不同。 在互联网技术这 池化技术——避免创建资源的性能损耗以及有效保护系统 异步化技术——比如:MQ,系统解藕,削峰填谷 缓存技术——提速大杀器 多线程技术——充分利用计算机多核的能力 RPC技术——提高开发并行度,系统解藕 分布式技术——提高系统性能和存储容量 3:看目录很是期待,有几个主题恰好现在自己也在弄,希望可以借鉴到更完美的解决方案。

    作者回复: 加油💪

    2020-04-06
    2
    26
  • 段启超
    目前我的状态: 工作两年了,写CRUD 写到觉得很枯燥,很少涉及到高并发的业务。我意识到,目前我对于业务场景中所具有的高并发场景的识别能力很欠缺,虽然听过很多解决高并发的技术方案,但是始终停留在一个知道有这么个东西的层面,没有落地过,更没有去深入的了解过里边的原理什么的。希望能通过老师的讲解,完善一下自己在这个方面的短板。

    作者回复: 加油💪

    2019-09-19
    8
  • 小小程序猿
    突然想到一个问题:为什么服务器请求太大服务器会挂?

    作者回复: 资源被耗尽

    2020-04-07
    3
    4
  • 行者
    打卡,要想设计一个高并发系统 首先,要做到高性能、高可用、可扩展 具体到细节 数据库层,要合理使用各个数据库,利用好其特性 缓存层,要提升缓存命中率,避免缓存穿透 消息队列层,要利用好消息队列削峰填谷,解耦的特点 进一步 如何治理服务,RPC 注册中心 复杂均衡 网关 最后 如何维护这些服务 我想,掌握了这些,就可以说自己是一个资深工程师了。 期待老师接下来的课程。

    作者回复: 👍👍

    2019-09-25
    4
  • _Axios丶靜ﻩ
    打卡,目前正在看JAVA并发与实践这本书。书中大多都是基础内容,希望跟随这门课程掌握更多解决问题的套路。理论和实践结合,更好的提升自己

    作者回复: 嗯那 ⛽️

    2019-09-22
    3
  • helloworld
    开始学习高并发系统设计,看了目录和老师计划讲课的思想,很贴个合实战,一希望自己坚持下来后能有所收获。打卡01。

    作者回复: 加油💪

    2019-09-22
    3
  • jc9090kkk
    这个课程真的是我梦寐以求的,以前对于高并发解决方案的知识脉络非常模糊,希望能从这个课程中把零碎的知识整理的更清晰,希望老师快快更新~

    作者回复: 好嘞

    2019-09-19
    3
  • 🔥是希文er啊
    唐老师您好,我想请教下怎么更好的学习这门课程,做了3年的curd 这些知识知识只有听说过,而且还是部分。听一遍也只是听明白了,但是原理什么的基本不懂。思考都不知道往哪方面思考。怎么办啊?还是第一遍先跟着,第二遍在思考实践。多看几遍这样?

    作者回复: 1. 可以跟着课程学一遍 2. 根据每节课的主题做一些延伸的阅读,可以Google一些文章 3. 夯实基础知识 4. 读一些相关的源代码

    2019-12-27
    2
  • Kevin Liao
    满怀期待的一门课程,收获必会良多,谢谢老师。

    作者回复: 加油💪

    2019-09-24
    2
收起评论
大纲
固定大纲
为什么要学习高并发系统设计?
高并发系统设计知识,是你获取大厂 Offer 必不可少的利器
不要囿于公司现有的业务场景,你的能力,绝不止于此
计算机领域里虽然知识点庞杂,但很多核心思想都是相通的
课程设计
写在最后
显示
设置
留言
99+
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部