系统设计学习路线
系统设计学习路线
学习核心
- 突击型学习路线
- 系统设计整体思路(形成系统设计的应对思路)
- 从0到百万用户的演进
- 高频系统设计(🚀短期突击必备)
- ① 秒杀系统
- ② 计数服务系统
- ③ 短链系统
- ④ 排行榜系统
- ⑤ 分布式ID
- ⑥ 限流器
- ⑦ 幂等性设计
- 进阶补充系统设计(⚽针对性准备,时间充裕可扩展学习)
- ① 扫码登录系统
- ② 订单系统
- ③ 优惠券系统
- ④ 评论系统
- ⑤ 红包系统
- ⑥ 通知系统
- ⑦ 聊天系统
- ⑧ 网约车系统
- ⑨ 微博系统
- ⑩ 短视频系统
- ⑪ kv 存储系统
- ⑫ 网盘系统
- ⑬ 爬虫系统
- ⑭⑮⑯⑰⑱
- 系统设计常见题型
- 进阶型学习路线(进阶补充,积累和培养系统设计思路)
学习资料
1.学习目标
面试突击主要是罗列了一些面试中常见的系统设计内容,面试中的系统设计面试题都是比较随机和灵活的,能不能遇到一模一样的题目,其实还是比较看运气的,重要的是积累一些系统设计回答思路,面试中回答不一定要设计的很完美才能过,重要的是要体现出思考能力,方向上正确对就行,细节对错无所谓的。
短时间需要面试的话,可以重点准备【黄色标记部分中比较高频的系统设计】,其余内容则可选择性针对性学习,积累和培养学习习惯。有时候系统设计跟面试公司的业务方向也有一定的关联性,可以针对对应公司相关的业务准备系统设计,这样有概率遇到一样的问题,比如:
滴滴公司,可以准备网约车系统的设计
电商类公司,可以准备秒杀系统设计
即时通讯的公司,可以准备聊天系统设计
微博公司,可以准备微博系统设计
涉及爬虫服务的公司,可以准备爬虫系统设计
todo:OLTP 架构相关理解
2.学习计划(2025-01-16)
系统设计学习路线 预计分配时间:2周
- 秒杀系统设计
- 短链系统设计
- 分布式ID设计
- 计数服务设计
- 限流器设计
todo 系统设计整体思路:
① 需求对齐
- 需求分析(沟通对齐)
- 请求量:5000/s、5000s/-10w/s、10w+/s
- 精准度:对数据的敏感度要求(例如是否允许多记、少记、数据一致性等)
- 难点分析:针对业务场景可能存在的一些性能瓶颈和方案设计思考
② 架构设计
- 服务设计(分层设计):一般是接入层(网关服务)、服务层(业务服务、其他服务等)、存储层
- 存储设计(存储选型):根据数据存储的需求进行择选
- MySQL + 缓存:如果需要保证数据的可靠性,则需要MySQL兜底,引入缓存缓解高并发访问压力
- Redis:如果是倾向高性能,则选用Redis,但无法保证数据可靠性(Redis性能本身很高,一般情况下不用另外引入缓存层)
- 业务设计(业务流程)
- 根据需求思考一个完整业务流程的步骤,然后将服务和存储串联起来构成一个访问链,形成基础版图
③ 要点分析
- 针对步骤②架构设计模块中的基础版图设计,完善和填充细节
- 例如解决高并发、高精准问题等,业务流程可能存在什么问题....
- 异步化:确认是否存在可以接入MQ的场景,例如异步处理提升并发处理能力、削峰平谷缓解瞬时压力等
④ 总结陈述
- 要点总结(一个怎样的系统)
- 要点牵引(基于要点做个简单的总结)
- 收尾
系统设计的一些通用思路
基于基础架构,但不拘于此。发散思路
- 高并发、高可用的通用方案
- 存储组件的选型
- 压测相关
- 服务治理相关(通用侧)
在软件设计开发中,会涉及两类知识。一类是和具体业务无关的,比如编程语言、编程框架这些技术和具体业务无关,消息队列、分布式缓存这些技术也和具体业务无关。这一类技术更具有通用性,技术人员不管跳槽到哪家公司,几乎都会用到这些技术。
还有一类技术是和具体业务相关的,比如电商业务、金融业务、包括本文的网约车业务等等,这些业务如何用最合适的技术方案实现。这些和具体业务相关的技术经验主要适用于相关的业务领域。技术人员在职业生涯的早期,需要更多地去关注和学习通用性的技术。而随着年龄增加,应该在业务相关的技术上获得更多沉淀,成为一个领域的专家,才能使自己在职场上获得更强的竞争力。
系统设计:由简化繁,从最基础的单一架构切入,然后从高可用、高性能方向扩展切入拆分(理解淘宝10年架构的演变方向,这些技术应用思路是通用的,举一反三)
将系统业务流程进行架构拆分,理解每一层中如何进行"三高"优化
例如 用户访问页面 引入CDN、静态资源缓存、Nginx缓存等等等机制提升页面加载效率
应用服务层:多机部署的情况下, 请求通过负载均衡分发 (避免多级)
DB 层:缓存机制、DB 架构(分库分表、部署架构等角度优化并发处理能力)
- 不要一上来就一步到位,而是慢慢切入,根据请求流量的流向思考,在每一层可以通过什么方案来抗住高并发,然后再深入到DB进一步剖析高并发、大数据量的处理方案
- 落到数据存储层
- 高并发如何支撑
- 大数据量如何存储等等
- 落到数据存储层
- .....
???????????
业务架构图
前端访问-》网关-》服务(各个用户服务的关联)-》切入
系统核心架构(服务架构图)
分层服务、数据库、整体架构上串联起来的流程
todo 系统设计通用思路核心(术语跟踪)
常见的负载均衡算法有如下几种:
轮询法。将请求顺序轮流分配到后端服务器。好处是实现简单,不会给系统额外带来负荷,另外是一台服务器宕机后会自动停止发送流量至该服务器。缺点是没有考虑每台服务器的负载情况。 随机法。随机将流量发送到一台服务器。 源地址hash法。获取客户端的ip地址进行hash计算,用其数值对服务器数目进行取模运算,得到的结果即要发送到的服务器的序列号。 加权轮询法。不同的服务器的配置和系统负载可能不同,因此可以给配置高负载低的机器配置更高的权重。将请求顺序按照权重分配到后端。 加权随机法。和加权轮询法类似,不同的是按照权重随机请求后端服务器而不是顺序。 最小连接法。根据后端服务器的连接请情况动态选择积压连接数最少的一台服务器。