后端面试每日一题 如何设计一个系统?

第一步:需求场景分析

这里分为功能性需求非功能性需求,都是非常重要的。

  • 功能性需求

    • 谁用,使用角色是谁,有哪些。
    • 现在有什么问题,为什么要开发这个系统。
    • 解决了他什么问题,达到什么目标。
    • 有哪些场景,多描述
    • 如果功能很多,建议分期来做,先做核心功能,后面再做其他功能,持续迭代

    说白了就是该系统的价值、意义、使用场景,替谁解决了哪些问题。

  • 非功能性需求

    • 用户量评估,例如集团用户2w

    • 并发用户以及峰值评估,例如最高并发用户100,峰值预估120

    • 每天的总体QPS评估、很有意义,加Cache啊,存储选型的依据

    • 读写比评估、很有意义,加Cache啊,存储选型的依据

    • 存储评估,每年多少TB、GB的数据,存储多少年

    • 带宽评估,上行、下行带宽

    • 多久上线、工期,团队评估

    • 浏览器、手机兼容性等

    • 其他方面

      • 高可用,排在第一位
      • 扩展性,功能方面
      • 安全性
      • 可监控。。。
      • 高性能,排在最后

可行性分析,以现有的团队,指定的工期能不能实现,让你造个火箭,有生之年估计都没戏

整个设计过程涉及的技术选型,这里记下每种中间件的限定值

  • 一台Web Server承受量约为 1K的QPS
  • 一台SQL Database承受量约为 1K的QPS
  • Redis约为10W的QPS
  • Nginx约为5W的QPS

第二步:系统API、服务设计

  • 基于领域,划分几个服务

  • 每个服务设计的API

  • 设计API接口,一般都会有对资源的CRUD

第三步:存储设计

分析系统,涉及哪些类型的数据

结构化、半结构化、非结构化

  • 数据库
    • 选用关系数据库
    • 选用非关系数据库
    • 分析对象关系
    • 建立对象关系模型
    • 每个字段选用合适的类型
    • 预估索引、是否联合索引、唯一索引等
    • 是否是关系数据库或者非关系数据库以及是否并存。
    • 分库分表
  • 文件系统
  • 缓存系统

第四步:高可用和高性能等

是否有核心瓶颈点算法优化

注意 权衡 Trade-off思想,没有万能钥匙

  • 过期数据清理和规整

  • 整体负载均衡

  • 安全性

  • 可监控

Cache:缓存,万金油,哪里不行优先考虑

Queue:消息队列,常见使用Linkedin的kafka

Asynchronized:批处理+异步,减少系统IO瓶颈

Load Balance: 负载均衡,可以使用一致性hash技术做到尽量少的数据迁移

Parallelization:并行计算,比如MapReduce

Replication:提高可靠性,如HDFS,基于位置感知的多块拷贝

Partition:数据库sharding,通过hash取摸

架构建议越简单越好,可以慢慢迭代。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lakernote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值