码迷,mamicode.com
首页 > 其他好文 > 详细

第10章 系统设计考察点

时间:2019-10-03 12:53:31      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:sign   模块设计   使用   bin   扩展   abc   tab   自增   qps   

系统设计考点


考点聚焦

系统设计考点

  • 什么是系统设计?

  • 系统设计需要掌握哪些知识?

  • 如何设计和实现一个后端系统服务的设计?


什么是系统设计?(System Design)

系统设计是一个定义系统架构,模块,接口和数据满足特定需求的过程

  • eg: 设计一个短网址服务,评论服务,Feed流系统,抢红包系统

  • eg: 提供一个供其它所有业务使用的一个短网址服务

? 微服务架构很多系统被按照业务拆分,需要单独设计一个系统服务

  • 系统设计的难点

    中高级工程师必经之路

  • 需要具备相关领域,算法的经验,有一定的架构设计能力
  • 熟悉后端技术组件,eg: 消息队列,缓存,数据库,框架
  • 具备文档撰写,流程图绘制,架构设计,编码实现等综合能力

系统设计的要素

系统设计三大要素

  • 使用场景和限制条件

  • 数据存储设计

  • 算法模块设计

什么场景和条件下使用?

这个系统是什么地方使用的?

  • eg: 短网址系统提供给站内各种服务生成短网址

    ? 限制条件: 用户估计有多少?至少能支撑多少用户(服务)?

    ? 估算并发qps:峰值qps是多少?平均qps是多少?(每秒请求量多少?)

设计数据存储系统

数据库的选型

  • 按需设计数据表,需要哪些字段,使用什么类型?数据增长规模

  • 数据库选型:是否需要持久化?使用关系型还是NoSQL?

  • 如何优化?如何设计索引?是否可以使用缓存?

设计算法相关模块

系统=服务+存储

  • 需要哪些接口?接口如何设计

  • 使用什么算法?或者模型?

  • 不同实现方式之间的优劣对比,如何取舍?

如何扩展,容错?

  • 用户多了,qps高了如何处理?

  • 数据存储多了不够存如何处理?

  • 故障如何处理?单点失败,多点失败,雪崩问题

如何设计与实现一个短网址系统?

? 什么是短网址系统?包含哪些功能(接口)?

? 短网址系统的存储设计?需要存储哪些字段?

? 如何设计算法生成短网址?


什么是短网址系统?

TinyUrl Service

把一个长网址转成短网址的服务

eg: https://bitly.com/

? 转换之后网址的后缀不超过7位(字符 or 数字)

使用场景和限制

  • 使用场景:提供短网址服务为公司其它各业务服务

  • 功能:一个长网址装成短网址并存储,根据短网址还原长URL

  • 要求:短网址的后缀不超过7位(大小写字母和数字)

    ? 预估峰值插入请求数量级:数百,查询请求数量级:数千

数据存储设计

根据需要设计数据存储方式

  • 使用Mysql即可满足

  • 需要的字段有哪些?

  • 如何根据查询设计索引?

Mysql数据表

id token(索引) url(原网址) created_at
1

算法实现设计?

短网址生成算法有些?对比优缺点?

two API: long2short_url, short2long_url

自增id? -->计数器-->使用redis

? request->redis incr index->encode(index)->save mysql

#递增序列算法
def mybin(num): #10进制->2进制
    if num == 0:
        return 0
    res = []
    while num:
        num, rem = divmod(num, 2)   # 2 -> 62
        res.append(str(rem))
    return ''.join(reversed(res))

print(mybin(10))

CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def encode(num):
    if num == 0:
        return CHARS[0]
    res = []
    while num:
        num, rem = divmod(num, len(CHARS)) #62
        res.append(CHARS[rem])
    return ''.join(reversed(res))

print(encode(1))
print(encode(61))

回答重点

遵守三个要素来回答

  • 包含数据表的设计,api的设计,算法的设计

  • 图文并茂,有数据表,接口定义,流程图


系统设计思考题

如何设计一个秒杀系统

难点:如何应对高并发的用户请求

  • 什么是秒杀系统?

  • 如何根据提到的三个要素来设计秒杀系统?

  • 秒杀系统涉及到哪些后端组件

?

第10章 系统设计考察点

标签:sign   模块设计   使用   bin   扩展   abc   tab   自增   qps   

原文地址:https://www.cnblogs.com/xuzhaoping/p/11619255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!