综述

系统设计分类

系统设计类问题是面试常见的题目,也是提升个人架构思维和系统思维的好途径,本文会持续更新,记录一些经典的系统设计问题。

常见的系统设计问题,大概分为两个类型:

  1. 垂直场景的单模块设计,例如:如何实现短网址系统,如何实现ID生成器。单模块的设计,比较需要大家平时的技术积累,例如:分布式ID生成器,其实并没有他多需要原创的地方,需要大家对现有的技术方案有个比较好的掌握。

  1. 复杂系统的构建设计,例如:设计一个秒杀系统,设计一个交易系统。这类设计题,主要考察大家对业务场景的理解,以及常见技术栈的了解。复杂的系统设计,通常是将单个模块或者是各个技术模块,以最佳的实践组织起来。

思考路径&答题技巧

参考:https://www.pianshen.com/article/14071259841/

在工作中,我们需要有以文档结合会议口述的方式说明清楚自己的方案。在面试中,我们需要以口述的方式表述出自己的方案。这两者思考路径大致是一样的。这里面比较重要的一点是,系统设计通常有多个技术方案可以选用,所以需要给出各个方案的特点,以及选用相关方案的权衡过程。

明确需求场景和功能点

面试过程中,面试官的很多表述是模糊的,例如:

  • 设计一个像bit.ly一样的URL缩短服务。

面试官这种模糊表述,很多时候是有意而为之,目的是想叫你列出,这个设计题可能的需求场景和功能点。系统设计通常没有标准答案,都需要根据场景来确定方案。

设计一个像bit.ly一样的URL缩短服务,这个功能设计之前,我们首先要明确需求场景:

  1. 访问的qps,从而预估是否需要高并发方案

  1. 整体用户规模,从而预估存储空间

  1. SLA要求,如果是严格场景,必须有较高的sal,所以需要有高可用方案

需求点:

  • 返回一个比原始URL短的URL

  • 必须存储原始URL

  • 新生成的URL必须能够链接到存储的原始

  • 缩短的URL应该允许重定向

  • 必须支持自定义短url

明确了场景和功能点后再去作答比较合理。

明确系统的

单模块设计

MQ消息队列相关

消息队列在分布式系统中有这有着广泛应用,主要用于一下场景:

  1. 解耦上下游应用:将服务之间的信息同步,从系统调用方式切换成消息队列后,可以有效提升系统的鲁棒性。整体系统可以无视单点故障,依赖mq的鲁棒性来保障系统的运行。

  1. 流量消峰:一条业务线的处理信息处理节点的吞吐量不同,通过mq的接入,可以平滑流量徒增造成的处理系统访问压力。

  1. 消息分发:标准的消息处理场景,通过mq来构建消息分发链路,可以降低消息生产者的开发难度。

  1. 异步处理:mq为异步处理提供了很好机制,之前的异步处理,是基于系统轮训 去回调查询状态来进行的,这样做会增加被调用方的网络负载。引入mq后,只需要系统执行完成后,向mq写入一条消息,调用方只需要监听mq即可。

使用mysql实现消息队列 wip

使用redis实现消息队列 wip

ID生成器

参考文章:https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247489483&idx=3&sn=fbf4945e6474d19ab98e99d4088fe441&chksm=fbb29e35ccc51723d20211820715346c70c25e6eaf49d80cde0314aff4ab2d072658038f1a3b&scene=21#wechat_redirect

在业务系统中,实体需要ID作为唯一标识符,进行管理查找了操作。例如:抖音的短视频,每个视频都需要持有一个ID,从而拉通视频生命周期的每一个业务和分析环节。在美团外卖,每一个订单都需要有个唯一ID,串联起从下单,到支付,再到配送中间的各个环节。

通常ID生成器需要满足以下需求:

  1. 全局唯一:不能出现重复的ID

  1. 趋势递增:整体是增加的,不需要id之间连续,但是需要新ID数值层面大于旧ID

  1. 信息安全:ID最好是无规律的,不能通过ID+1获取系统的下一个ID,否则在部分场景下,如图片URL,视频ID,连续的id,给恶意抓取造成可乘之机,会造成安全漏洞。

  1. ID长度尽量短:ID作为唯一标识符会留存在业务系统的各个存储系统中,例如:hive离线存储,Redis在线缓存,过长的ID会造成存储的浪费。

UUID

UUID(Universally Unique Identifier)

SnowFlake 算法

数据ID自增

复杂系统设计

常见的系统设计问题以及思路相关推荐

  1. 系统设计面试题思路综述

    应届生在面试的时候,偶尔也会遇到一些系统设计题,而这些题目往往只是考一下你的知识面,或者对系统架构方面的了解,不会涉及编码.很多人感觉难以应对这样的题目,也不知道从何说起,在本文中,作者总结了回答这类 ...

  2. 【flink】Flink常见Checkpoint超时问题排查思路

    1.概述 转载:Flink常见Checkpoint超时问题排查思路 这里仅仅是自己学习. 在日常flink应用中,相信大家经常会遇到checkpoint超时失败这类的问题,遇到这种情况的时候仅仅只会在 ...

  3. c语言一些算法解题技巧,c语言常见小算法的解题思路.doc

    c语言常见小算法的解题思路 判定某一年是否是闰年 闰年时间:四年一闰,百年不闰,四百年再闰.,其中 大写字母转小写字母 大写字母+32 = 小写字母 A = 65 a = 97 输入一个华氏温度,要求 ...

  4. K8S集群中Pod资源常见的异常状态以及排查思路

    K8S集群中Pod资源常见的异常状态以及排查思路 1.Pod资源的结构 Pod资源中会有一个基础容器Pause容器,每一个Pod资源下都会有一个Pause容器,Pause容器负责创建一个虚拟网络和存储 ...

  5. 关于机器学习系统设计的一些思路

    Machine Learning System Design[机器学习系统设计] 主要涉及在设计复杂的机器学习系统时,可能遇到的主要问题.同时,我们也会试着给出一些关于如何巧妙构建一个复杂的机器学习系 ...

  6. 面向UE4新手----基于UE4的室内软装系统设计和实现思路

    由于一直有朋友在与我讨论关于UE4室内软装的系统设计问题,问题也都大同小异,正好类似项目有一些经验,因此在此分享给大家,希望能帮助更多UE4的新手和小团队.由于我本人是独立游戏开发者而非室内设计方向的 ...

  7. 几个常见HTTP5XX状态码解决思路

    500错误(Internal Server Error) 500错误指的是服务器内部错误,也就是服务器遇到意外情况,而无法履行请求. 一般有几种情况: 1.web脚本错误,如php语法错误,lua语法 ...

  8. 【数据库篇】——4.用户登录注册系统设计和分析思路

    学习下一节:util包中创建数据库连接的工具类DBUtil.java 1.功能需求分析 本系统的功能就两个:用户登录和注册. a.用户登录需要我们根据用户的输入的信息到数据查询用户的账号密码是否能够匹 ...

  9. 测试过程中常见的中间件及测试思路

    1.中间件是什么 中间件(英语:Middleware)顾名思义是系统软件和用户应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序 ...

最新文章

  1. mvn deploy 报错:Return code is: 400, ReasonPhrase: Bad Request. -
  2. (转)zookeeper理解
  3. poj 2528 Mayor's posters (线段树+离散化)
  4. P8实战(二):分布式锁前置技能 etcd 集群搭建
  5. win7如何修改dns服务器地址,Win7系统DNS怎么设置?Win7系统DNS设置方法
  6. treemap怎么保证有序_干货!208道面试题教你怎么通过面试!
  7. gblfy大数据技术之安装CentOS系列
  8. 英语笔记:写作:Nothing succeeds without a strong will
  9. 在Windows下使用Git+TortoiseGit+码云管理项目代码
  10. iOS 瀑布流之栅格布局
  11. c++ using 前置声明_详解C++ 前置声明
  12. Excel关于宏的运用
  13. 如何在计算机命令内转换操作盘,如何在命令行窗口中从驱动器C切换到驱动器D...
  14. 如何在CSDN中发表博客
  15. setprecision、setw、fixed详解
  16. 当我跑步时我在想什么读后感
  17. android底部蒙版,Android实现蒙板效果
  18. Ubuntu更新企业微信
  19. Laravel5.4中文分词搜索-使用 Laravel Scout,Elasticsearch,ik 分词(三)
  20. React —— Descriptions(根据自己需求判断要显示哪些)

热门文章

  1. 矢量图、位图、RGB、YUV、JPEG、PNG的理解
  2. 爬取酷狗top500
  3. C语言工资信息管理系统设计
  4. 颠覆音视频会议市场 腾讯拿出“杀手锏”
  5. CRM系统帮助企业省时省力
  6. python抖音表白程序代码_python 下载抖音视频示例源码
  7. Windows 下 Gambit 启动脚本
  8. Spark 概述以及与Hadoop的关系
  9. IDEA:IDEA中文翻译插件的安装与使用
  10. servlet过滤器的介绍