System Design——系统设计过程(一)约束和用例
2017-10-20 15:08
218 查看
英文原文链接:https://www.hiredintech.com/classrooms/system-design/lesson/55
从这一节开始,开始介绍当拿到一个System Design问题时候应该如何处理。
-----------------------------分隔符------------------------------------------------------------------------------------
系统设计过程:
Step 1 约束和用例
Step 2 抽象设计
Step 3 理解瓶颈
Step 4 可扩展性设计
-----------------------------分隔符------------------------------------------------------------------------------------
Step 1 约束和用例
和算法设计相同,系统设计问题同样也没有得到全面而明确的定义。考虑一下上一篇文章中提到的URL缩短服务(设计一个类似“bit.ly”的URL缩短服务),对于这个问题其实有许多不明确的地方。再没有了解清楚的情况下,设计出一个恰当的解决方案是几乎不可能的事情。
在拿到一个问题的时候,第一件事情是要明确系统的约束和系统需要满足哪些用例。通常,在面试中,每部分面试官想考察的是你能否立刻获取这个问题的需求,同时设计一个能够覆盖满足这些需求的解决方案。永远不要期待能够在一个问题没有清楚地被表述的时候能够解决它!
举个例子来说,URL缩短服务可能受众只有几千的用户,但每个用户可能会共享数百万个URL。它可能需要处理短URL上数以百万的点击,也有可能点击量只有几十。这个服务可能需要对每个短URL提供扩展性的统计(这会增加数据存储量),当然也有可能没必要提供这个功能。
下面以URL缩短服务为例子,分析约束和用例:
用例(系统需要完成的功能):
缩短URL:将一个长URL转换为一个短URL
重定向:接收到一个短URL后,重定向到长URL,即定向到真实地址
自定义URL功能
统计分析功能
链接自动过期(为短URL设置expiration time)
手动删除链接
UI或者API(这个service是一个有界面UI可供直接操作的web service或者website还是提供API供其他服务调用)
在实际场景下,可能并不是上面都需要实现。在我们后文的讨论中,暂时不考虑后面斜体的功能部分。
约束(性能指标):(do some math!)
每月新增URL:100million
每月request数:1billion(每个URL的生命周期为1-2周,在此假设为平均值~10天。假设点击数为1次/天,所以100million × 10days × 1 click/day = 1billion/month)
下图是估算这个值的方法,可以参考一下:
10%的流量流向缩短URL服务,90%流量流向重定向
每秒request数:400+(40:缩短;360:重定向)
5年内6billion urls
每个URL大小为500字节
每个URL的hash值为6字节
五年时间,url总大小为3TB,hash总大小为36GB
每秒写入的新数据约为20KB
上面的数据实际上都是估算的,为了能够得到尽可能准确的估算,实际上是需要更多的以往数据和经验来做支持的!所以,必要的数据准备是肯定的。
Step 2、Step 3、Step 4 未完待续...
从这一节开始,开始介绍当拿到一个System Design问题时候应该如何处理。
-----------------------------分隔符------------------------------------------------------------------------------------
系统设计过程:
Step 1 约束和用例
Step 2 抽象设计
Step 3 理解瓶颈
Step 4 可扩展性设计
-----------------------------分隔符------------------------------------------------------------------------------------
Step 1 约束和用例
和算法设计相同,系统设计问题同样也没有得到全面而明确的定义。考虑一下上一篇文章中提到的URL缩短服务(设计一个类似“bit.ly”的URL缩短服务),对于这个问题其实有许多不明确的地方。再没有了解清楚的情况下,设计出一个恰当的解决方案是几乎不可能的事情。
在拿到一个问题的时候,第一件事情是要明确系统的约束和系统需要满足哪些用例。通常,在面试中,每部分面试官想考察的是你能否立刻获取这个问题的需求,同时设计一个能够覆盖满足这些需求的解决方案。永远不要期待能够在一个问题没有清楚地被表述的时候能够解决它!
举个例子来说,URL缩短服务可能受众只有几千的用户,但每个用户可能会共享数百万个URL。它可能需要处理短URL上数以百万的点击,也有可能点击量只有几十。这个服务可能需要对每个短URL提供扩展性的统计(这会增加数据存储量),当然也有可能没必要提供这个功能。
下面以URL缩短服务为例子,分析约束和用例:
用例(系统需要完成的功能):
缩短URL:将一个长URL转换为一个短URL
重定向:接收到一个短URL后,重定向到长URL,即定向到真实地址
自定义URL功能
统计分析功能
链接自动过期(为短URL设置expiration time)
手动删除链接
UI或者API(这个service是一个有界面UI可供直接操作的web service或者website还是提供API供其他服务调用)
在实际场景下,可能并不是上面都需要实现。在我们后文的讨论中,暂时不考虑后面斜体的功能部分。
约束(性能指标):(do some math!)
每月新增URL:100million
每月request数:1billion(每个URL的生命周期为1-2周,在此假设为平均值~10天。假设点击数为1次/天,所以100million × 10days × 1 click/day = 1billion/month)
下图是估算这个值的方法,可以参考一下:
10%的流量流向缩短URL服务,90%流量流向重定向
每秒request数:400+(40:缩短;360:重定向)
5年内6billion urls
每个URL大小为500字节
每个URL的hash值为6字节
五年时间,url总大小为3TB,hash总大小为36GB
每秒写入的新数据约为20KB
上面的数据实际上都是估算的,为了能够得到尽可能准确的估算,实际上是需要更多的以往数据和经验来做支持的!所以,必要的数据准备是肯定的。
Step 2、Step 3、Step 4 未完待续...
相关文章推荐
- System Design——系统设计过程(二)抽象设计
- System Design——系统设计过程(三)理解瓶颈
- 读《Uml Toolkit》有感 -- 用例驱动的中小型系统设计过程
- 读《Uml Toolkit》有感 -- 用例驱动的中小型系统设计过程
- System Design——系统设计过程(四)系统的可扩展性设计
- System Design 笔记及代码(系统设计)
- 电路系统设计制作过程和需要注意的一些问题
- 面向对象系统分析设计过程-整体思路
- 20145234黄斐《信息安全系统设计基础》GDB调试汇编堆栈过程分析
- 项目管理实战之团队管理 对团队的管理需要重视以下几个方面 一个系统不仅需要优秀的分析和设计,更需要一个良好的过程将其从蓝图转化为实现。这个过程中最重要的是对团队的管理,也就是人的管理
- Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程
- 面向对象系统设计与分析专题<5>__用例模型
- JWFD开源工作流系统在设计过程中遇到的问题
- 系统分析与设计之用例图
- 需求分析与系统设计的面向对象推导过程
- 面向对象系统分析设计过程-概要设计
- 【用例】研究生招生报名管理系统设计
- 【GOF23设计模式】_责任链模式_公文审批_供应链系统的采购审批_异常链_过滤器和拦截器调用过程JAVA243
- 面向对象系统分析设计过程-详细设计
- 在线电影订票系统 - 用例设计