高并发系统设计40问 / 攻克高并发系统演进中的业务难点
唐扬
美图公司技术专家
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 为什么你要学习高并发系统设计?

    为了避免遇到问题时手忙脚乱,你有必要提前储备足够多的高并发知识,从而具备随时应对可能出现的高并发需求场景的能力。

  • 01 | 高并发系统:它的通用设计方法是什么?

    高并发系统演进是一个渐进的过程,我们需要灵活运用Scale-out、缓存、异步三个设计方法,具体问题具体分析。

  • 02 | 架构分层:我们为什么一定要这么做?

    分层架构有优有劣,相比于它带给我们的好处,它的不足可以接受。所以,我们在做决策的时候切不可以偏概全,因噎废食。

  • 03 | 系统设计目标(一):如何提升系统性能?

    为了应对峰值流量,我们需要在架构和方案上做更多的准备,这也是淘宝会花费大半年的时间准备双十一的主要原因。

  • 04 | 系统设计目标(二):系统怎样做到高可用?

    一个成熟系统的可用性需要从系统设计和系统运维两方面来做保障,两者共同作用,缺一不可。

  • 05 | 系统设计目标(三):如何让系统易于扩展?

    我们需要站在整体架构的角度,而不仅仅是业务服务器的角度来考虑系统的扩展性 。

  • 06 | 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?

    对于仅仅使用组件的开发人员来说,了解组件的实现原理真的重要吗?这会不会是面试官的故意刁难呢?

  • 07 | 池化技术:如何减少频繁创建数据库连接的性能损耗?

    只要确认要使用的对象在创建时确实比较耗时或者消耗资源,并且这些对象会被频繁地创建和销毁,我们就可以使用池化技术来优化。

  • 08 | 数据库优化方案(一):查询请求增加时,如何做主从分离?

    我们可以把主从复制引申为存储节点之间互相复制存储数据的技术,它可以实现数据的冗余,以达到备份和提升横向扩展能力的作用。

  • 09 | 数据库优化方案(二):写入数据量增加时,如何实现分库分表?

    分库分表是一种常见的将数据分片的方式,它的基本思想是依照某一种策略将数据尽量平均的分配到多个数据库节点或者多个表中。

  • 10 | 发号器:如何保证分库分表后ID的全局唯一性?

    对Snowflake算法进行改造,一是要让算法中的ID生成规则符合自己业务的特点;二是为了解决诸如时间回拨等问题。

  • 11 | NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?

    在业务开发的场景下,要利用SQL语句的查询功能以及传统数据库事务和灵活的索引等功能,NoSQL可以作为一些场景的补充。

  • 12 | 缓存:数据库成为瓶颈后,动态数据的查询要如何加速?

    缓存不仅仅是一种组件的名字,更是一种设计思想,你可以认为任何能够加速读请求的组件和设计方案都是缓存思想的体现。

  • 13 | 缓存的使用姿势(一):如何选择缓存的读写策略?

    你可能觉得缓存的读写很简单:优先读缓存,缓存不命中就从数据库查询,然后回种缓存,可针对不同的业务场景,读写策略是不同的。

  • 14 | 缓存的使用姿势(二):缓存如何做到高可用?

    分布式缓存的三种方案各有所长,具体的选择还是要根据团队的实际情况而定。

  • 15 | 缓存的使用姿势(三):缓存穿透了怎么办?

    回种空值和布隆过滤器是解决缓存穿透问题的两种最主要的解决方案,但是它们也有各自的适用场景,并不能解决所有问题。

  • 16 | CDN:静态资源如何加速?

    CDN是整体系统至关重要的组成部分,而它作为一种特殊的缓存,其命中率和可用性也是我们服务端开发人员需要重点关注的指标。

  • 加餐 | 数据的迁移应该如何做?

    “数据的迁移”的问题既重要,也繁琐,更是开发和运维同学关注的重点,我从数据库和缓存迁移两个方面,带你掌握数据迁移的方法。

  • 17 | 消息队列:秒杀时如何处理每秒上万次的下单请求?

    引入了消息队列的同时也会引入了新的问题,需要新的方案来解决,这就是系统设计的挑战,也是系统设计独有的魅力。

  • 18 | 消息投递:如何保证消息仅仅被消费一次?

    方案设计看场景,你不能把所有的消息队列都配置成防止消息丢失的方式,也不能要求所有的业务处理逻辑都要支持幂等性。

  • 19 | 消息队列:如何降低消息队列系统中消息的延迟?

    其实,队列是一种常用的组件,只要涉及到队列,任务的堆积就是一个不可忽视的问题,我遇到过的很多故障都是源于此。

  • 20 | 面试现场第二期:当问到项目经历时,面试官究竟想要了解什么?

    面试是双方的“博弈”,你不能被动地接受面试官的询问,而是要循循善诱,扬长避短,多争取主动,把面试官引到自己擅长的领域。

  • 用户故事 | 从“心”出发,我还有无数个可能

    你好,我是Longslee,很高兴与大家一起学习《高并发系统设计40问》。

  • 期中测试 | 10道高并发系统设计题目自测

    对于高并发系统设计,你的学习效果如何?掌握了多少系统设计使用和实现的知识呢?

  • 21 | 系统架构:每秒1万次请求的系统要做服务化拆分吗?

    究竟是什么促使我们将一体化架构,拆分成微服务化架构?系统的整体QPS到了1万,或者到了2万,就一定要做微服务化拆分吗?

  • 22 | 微服务架构:微服务化后系统架构要如何改造?

    微服务化是一个大的话题,在微服务开发和维护时,你也许会在短时间把微服务拆分完成,但你会花相当长的时间来完善服务治理体系。

  • 23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?

    RPC是一种规范,只要是封装了网络调用的细节,能够实现远程调用其他服务,就可以算作是一种RPC技术了。

  • 24 | 注册中心:分布式系统如何寻址?

    注册中心虽然是一种简单易懂的分布式组件,但是它在整体架构中的位置至关重要,不容忽视。

  • 25 | 分布式Trace:横跨几十个分布式组件的慢请求要如何排查?

    无论是用Zipkin这样的开源解决方案,还是团队内自研,你都应该在微服务化完成之前,尽快让分布式追踪系统发挥应有的价值。

  • 26 | 负载均衡:怎样提升系统的横向扩展能力?

    理解负载均衡服务的原理,掌握使用它的正确姿势,应该是每一个后端开发同学的必修课。

  • 27 | API网关:系统的门面要如何做呢?

    当你的微服务系统越来越复杂时,你可以考虑使用API网关作为整体系统的门面。

  • 28 | 多机房部署:跨地域的分布式系统如何做?

    一旦你的团队决定做多机房部署,那么同城双活已经能够满足你的需求了,这个方案相比异地多活要简单很多。

  • 29 | Service Mesh:如何屏蔽服务化系统的服务治理细节?

    在一些大厂中,比如微博、蚂蚁金服,Service Mesh已经开始在实际项目中落地实践,而我建议你持续关注这项技术。

  • 30 | 给系统加上眼睛:服务端监控要怎么做?

    监控系统是你发现问题,排查问题的重要工具,你应该重视它,并且投入足够的精力来不断的完善它。

  • 31 | 应用性能管理:用户的使用体验应该如何监控?

    如果说搭建的系统是骨架,那么具体监控的数据就是灵魂,因为数据是监控的主题内容,系统只是呈现数据的载体。

  • 32 | 压力测试:怎样设计全链路压力测试平台?

    压测时,应该实时地对系统性能指标做监控和告警,及时地对出现瓶颈的资源或者服务扩容,避免对正式环境产生影响。

  • 33 | 配置管理:成千上万的配置项要如何管理?

    如果你的项目还是使用文件方式来管理配置,那么你只需要,将类似超时时间等,需要动态调整的配置,迁移到配置中心就可以了。

  • 34 | 降级熔断:如何屏蔽非核心系统故障的影响?

    只有经过演练的开关才是有用的开关,有些同学在给系统加了开关之后并不测试,结果出了问题真要使用的时候,却发现开关并不生效。

  • 35 | 流量控制:高并发系统中我们如何操纵流量?

    我们可以在每次取令牌的时候,不再只获取一个令牌,而是获取一批令牌,这样可以尽量减少请求Redis的次数。

  • 36 | 面试现场第三期:你要如何准备一场技术面试呢?

    我周边很多年轻的朋友经常会问我,下一份工作是要选择大公司非核心项目,还是要选择小公司的核心部门?

  • 37 | 计数系统设计(一):面对海量数据的计数器要如何做?

    面临着高并发、大数据量、数据强一致要求的挑战,微博的计数系统是如何设计和演进的呢?你又能从中借鉴什么经验呢?

  • 38 | 计数系统设计(二):50万QPS下如何设计未读数系统?

    事实上,微博团队仅仅用16台普通的服务器就支撑了每秒接近50万次的请求,这就足以证明方案的性能有多出色。

  • 39 | 信息流设计(一):通用信息流系统的推模式要如何做?

    如果你的业务中粉丝数是有限制的,那么在实现以关注关系为基础的信息流时,也可以采用推模式来实现。

  • 40 | 信息流设计(二):通用信息流系统的拉模式要如何做?

    拉模式和推拉结合模式比较适合微博这种粉丝量很大的业务场景,因为它们都会有比较可控的消息推送延迟。

  • 结束语 | 学不可以已

    衷心祝愿我们都能够快乐幸福的工作!

  • 结课问卷获奖用户名单

    结课问卷获奖用户名单

“秒杀活动”“抢红包”“微博热搜”“12306抢票”“共享单车拉新”等都是高并发的典型业务场景,那么如何解决这些业务场景背后的难点问题呢?

  • 秒杀系统中,QPS达到10万/s时,如何定位并解决业务瓶颈?
  • 明星婚恋话题不断引爆微博热搜,如何确保系统不宕机?
  • 共享单车充值活动,如何保证不超卖?
  • ……

同一时间、海量用户的高频访问对任何平台都是难题,但可喜的是,虽然业务场景不同,设计和优化的思想却是万变不离其宗。如果你掌握了高并发系统设计的核心技术点(缓存、池化、异步化、负载均衡、队列、降级熔断等),深化成自己的知识体系,解决这些业务问题将不在话下,应对自如。

唐扬,美图公司技术专家,主要负责美图秀秀社区的研发、优化和运行维护工作。从业十余年,他见证了系统从初期构建,到承接高并发大流量的全过程,并参与过三个DAU过千万的大型高并发系统的研发,拥有大量的系统演进经验。

在他看来,不少技术能力极强的工程师依旧会被“高并发”所困,这与知识储备不足,无法系统化地掌握核心技术有很大关系。技术人要不断汲取新的营养,更要能将技术知识应用到实际业务中,这样才能提升竞争力,突破职场瓶颈。

在这个课程中,他将基于业务场景还原大型互联网技术架构的演进过程,带你攻克不同业务阶段所需的各项核心技术,解决你的痛点问题。除此之外,他还将结合自身经验,从课程内容延伸出高频面试题,还原面试现场,为你的面试助力!

你将获得

  • 高并发设计核心技术点
  • 分布式组件的原理与使用方法
  • 完整的系统演进实战
  • 5个角度带你解决高并发难点

课程模块

课程分为三大模块。

课程讲解的思路是:先带你建立对高并发系统设计的直观理解,再以最简单架构逐步演进到支撑百万、千万并发的分布式架构为案例,带你解决这个过程中遇到的痛点问题,提升业务处理能力,真正完成一次系统演进,最后结合实战优化整体设计思路。

  • 基础篇

一起了解高并发架构的设计理念,建立对高并发系统的初步认知。比如,如何让你的系统更好地支持高性能、高可用与可扩展性,比如带你掌握架构分层的核心技术点。

  • 演进篇

从数据库、缓存、消息队列、分布式服务和维护这五个角度,讲解系统支持高并发的方法。该模块将带你分析其中的核心技术点,以及系统演进过程中会遇到的问题,从而针对性地解决。你还将了解数据库池化技术、主从分离、分库分表等分布式数据库技术。

  • 实战篇

未读数系统设计和信息流设计为例展开介绍。未读数系统实战,主要讲解如何设计方案来抵挡每秒几十万次的获取用户未读数的请求;信息流设计实战,讲解如何做通用信息流系统的推模式与拉模式。实战篇内容操作性强,能检验你对技术点的掌握程度,和灵活运用的程度,是完善你知识体系的重要环节。

特别说明

语言:基础篇和演进篇不涉及语言,实战篇的语言会偏Java。

限时福利