程序员社区

系统设计面试指南

系统设计面试指南插图

原文地址
关于回答系统设计问题的模版以及系统设计问题的学习链接

本文由3部分组成——准备指南、系统设计模板和设计问题学习链接。

我在Amazon的系统设计面试中,观看了视频讲座,阅读了博客文章,并和朋友讨论了设计系统的各种方法。经过我的精心准备,我想出了一个在面试中使用的模板,想要分享它并希望它能帮助到正在准备系统设计面试的人。

准备

首先,在设计一个系统之前,学习基本概念是很重要的。了解所有的概念有助于您在设计系统时做出正确的决策。系统设计概念指南:https://github.com/donnemartin/system-design-primer/blob/master/README.md
在学习了所有的基本概念之后,现在是开始设计的时候了。首先,你必须想到一个用例(例如:Instagram一个图片社交应用),并尝试设计所有的组件。主要考虑如何使您的系统具有容错性(系统始终启动并运行)和可伸缩性(处理不断增长的流量)。对瓶颈如何解决进行头脑风暴。整个过程可以帮助您将学到的概念应用在设计系统中。如果您在设计系统的步骤上遇到困难,请参考下面提供的设计模板。

我给你的建议是使用这个系统并探索所有的功能

对自己问以下问题:

  • 可以使用哪些不同的架构组件?
  • 这些组件如何互相交互?
  • 我们如何最好地利用这些组件:如何正确的权衡?
    你问的问题越多,从面试官那里得到的信息就越多,你的设计也就越好。

系统设计模版

1、需求

功能

系统或应用程序提供给用户哪些功能?例如:在Twitter中,用户可以关注另一个用户,发推文,喜欢一条推文,转发他人的推文,分享一条推文(关注Twitter的基本特性,不要深入研究Twitter的复杂特性)。

非功能

必须知道CAP定理:博客
对于任何分布式系统,以下是需要考虑的基本概念:

  • 高可用:大多数系统必须具有高可用性。
  • 一致性:具有高可用性的系统将达到最终一致性。任何银行系统都倾向于一致性而非可用性,因为数据(账户余额)不可能存在差异。
  • 可靠性:不会丢失用户数据
  • 延时: 用户请求的响应时间,如加载网页、点赞帖子等。

2、存储评估

  • 根据数据的形态:粗略的估计多少数据必须存储-知道什么样的数据库可以使用和文件存储,存储图像/视频。
  • 服务的请求数量:了解如何扩展服务。大量读请求的服务可以扩展为处理高流量的请求。
  • 读写比例:判断系统是读请求多还是写请求多。

3、数据库设计

在讨论完用户可以向服务发起的数据和操作请求之后。下一步是讨论您将使用哪种类型的数据库以及为什么。详细的差异SQL Vs NoSQL - 资料

4、系统概要设计

从最基本的设计开始:

系统设计面试指南插图1
扩展设计——创建特定的组件
  • 隔离服务——为了更容易扩展和流量控制

    系统设计面试指南插图2
    服务隔离

服务和数据库多副本——单点故障-视频

  • 负载均衡——如果需要多话,在应用端和数据库端添加负载均衡器-视频,博客
  • 消息队列——从紧耦合到松耦合/同步到异步通信--阅读消息队列,消息队列优势
  • 数据分区——基于位置的分区、基于用户ID分区--视频,博客
  • CDN内容分发网络—— 避免与主服务器之间的往返(减少延迟)视频, 面试问题
  • 缓存——分布式缓存和客户端缓存(用于更快的读访问)-- 视频, 博客, 指南

5、其他组件(可选)

如果您在面试中还有时间,可以将这些组件添加到设计中。了解这些组件有助于您回答任何深入的后续问题。一般来说,上面提到的内容就足够了,也会占用你面试的大部分时间。

  • 加密——用于消息传递服务以保护数据--博客
  • 业务分析——用于分析请求和用户数据
  • 机器学习服务——推荐/新闻提要排名(如果用例(Netflix)需要,那么就把它添加到基本组件中)-讨论你的推荐/排名模型所需的数据。
  • API网关——视频,微服务详解,和API网关学习视频列表
  • 服务发现——动态识别微服务--视频
    通过遵循这个模板,任何系统设计问题都可以在面试中设计出来。
    声明:下面提供的视频链接是一个系统设计的详细内容,可供深入实际系统设计参考。博客链接是简洁的,涵盖了特定系统的设计概念的使用。

设计问题

通用服务

  • Tiny URL: 视频, Blog
  • PasteBin(在线内容托管服务): Video, Blog
  • 搜索服务: Video, Blog
  • 输入提示服务: 视频, 博客
  • web爬虫: 视频, 博客
  • API限流: 视频, 博客

社交服务

  • Instagram: 视频, 博客
  • Twitter: 视频, 博客
  • Facebook news feed: 博客

云服务

  • Google drive: 视频, 博客
  • Google docs: 视频
  • Amazon S3: 视频

视频服务

视频是主要的数据,不同格式的视频必须存储。推荐服务是关键

  • Netflix: 视频, 博客

在线购物

  • Amazon: 视频
    类似的系统:沃尔玛,Airbnb, eBay

社交软件系统

了解HTTP、连接池和WebSockets之间的区别,对于一个消息系统是很重要的— 视频

  • WhatsApp: 视频

打车系统

  • Uber: 视频, 博客

视频会议

  • Zoom: 视频
    类似的系统:Skype,谷歌Meet
赞(0) 打赏
未经允许不得转载:IDEA激活码 » 系统设计面试指南

一个分享Java & Python知识的社区