前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟花和尚学系统设计:System Design 101

跟花和尚学系统设计:System Design 101

作者头像
包子面试培训
发布2018-04-19 12:19:43
1.5K0
发布2018-04-19 12:19:43
举报

谁是花和尚?

花和尚是一个定居西雅图的程序员,喜欢研究和总结System Design, 并传授给大家。花和尚在MITBBS一篇 "我的SystemDesign总结" 文章获得超过3万访问量,并被许多网站和博客转载。

前言

本篇文章是个引子,主要讲述System Design的来龙去脉。后面会分批讲解基础知识和实践中的"积木"和用法。

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

System Design顾名思义,就是去设计一个system。通常来讲,设计一个万能的system是几乎不可能的,所以需要有具体的requirement, 根据requirement来tradeoff并决定使用某种架构。

为什么要学习System Design?

每个人学习System Design的动机不一样,但最常见的有两种原因:

  • 你在准备面试,你的dream company会考到System Design;
  • 你是架构师或者想成为架构师 需要用到相关知识。

我的观点是,即使是第一种情况,也希望你能抽出不少于刷leetcode的时间来看System Design。因为System Design和刷题的本质区别是,进入公司以后,除非你每天还在刷题保持状态,否则你早晚是要都还给老师的。而System Design才是你能长期收益的 一石二鸟,何乐而不为呢?

学习System Design应该学习哪几块?

我个人的经验,需要学习三大块:

  • Distributed System知识: 比如Sharding, Sticky sessions, etc。
  • 架构知识: 有哪些架构是常用的?举个例子,Apache Storm的创始人Nathan Marz提出的Lambda Architecture就是一种典型的data processing架构 了解这些架构会对你搭建大型系统有很大帮助。
  • "积木"知识: 我管它叫积木,其实就是别人做好的轮子,拿来即用即可。但你需要了解该轮子的优缺点以及适用范围,比如SQS和kinesis的区别 ActiveMQ和Kafka的区别。

面试和实践需要学习的点一样么?

Yes and no.

  • Yes的原因是两大块对于面试和实践都是非常有帮助的;
  • No的原因是对于面试而言,面试官的侧重点是Distributed System的知识。知道某些积木会有加分但不是必须。而对于实践而言,知道各种积木以及其优缺点反而更能发挥作用。

System Design面试的例子

我在自己面试的过程中 曾经被问到过许多System Design的题目,在这里我挑出几个典型的供大家参考:

  • 公司A: Design URL Shorten Service
  • 公司B: Design SQS(i.e. AWS's queue service)
  • 公司C: Design Uber(frontend app views + backend service)

下面我来详细解释一下每一题的考点:

Design URL Shortening Service

这一题是非常经典的System Design题目,可以考的很浅,也可以考的很深。由于特别适合初学者入门,建议每个想学习System Design的同学都要把这道题的可能的条件和解法过一遍。比如说:

  • If your website is the top URL shortening service in the world(i.e. handling 70% of world URL shortening traffic) How do you handle it?
  • How do you handle URL customization?
  • What if you have very hot URLs? How do you handle it?
  • How do you track the top N popular URLs?
Design SQS

这一题是非常geeky的一道题,完全深度考察distributed system的各种知识。难度比URL Shortening Service高,原因在于后者已经成为常规考题,变种变来变去就那么几个,所以你死记硬背也能过关。而前者是非常见题 考查点对于没有系统学习过System Design的同学来讲难以琢磨。

同时这道题也是道好题,因为如果你有realtime backend system经验,多半可能会用到queue service。那考察的就是你有没有抽出自己的spare time去理解queue service的具体原理呢?

Design Uber

这是一道极其抽象的题,难易全凭面试官把握。

我被问到的具体情形是,根据手机app上的view transition design出整个后台service群以及互相交互的情况。我当时在白板上一口气写了10+个service的交互图,最后临走前还专门拍照留念,现在想来还是很自豪...

100个人会design出100个Uber,没有谁对谁错,只要能自圆其说就可以。

System Design积木的例子

System design的另一大块是我前面所谈到的“积木”,也就是别人已经搭好的framework或product。

业界的Framework非常之多,你并不需要每个都掌握。只要可以做到知道某方面的几个option,并在需要用到的时候快速ramp up就可以了。下面做一个小分类供大家参考:

  • In-memory Cache: Guava cache
  • Standalone Cache: Memcached, Redis
  • Database: DynamoDB, Cassandra
  • Queue: ActiveMQ, RabbitMQ, SQS, Kafka
  • Data Processing: Hadoop, Spark, EMR
  • Stream Processing: Samza, Storm

结语

相信你看完这些肯定还有很多问题。不用担心,接下来我会逐个讲解System Design需要的基础知识以及业界主流的积木。最后我会介绍几个为业界做出卓越贡献的全明星公司。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 包子铺里聊IT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 谁是花和尚?
  • 花和尚是一个定居西雅图的程序员,喜欢研究和总结System Design, 并传授给大家。花和尚在MITBBS一篇 "我的SystemDesign总结" 文章获得超过3万访问量,并被许多网站和博客转载。
  • 前言
  • 什么是系统设计(System Design)?
  • 为什么要学习System Design?
  • 学习System Design应该学习哪几块?
  • 面试和实践需要学习的点一样么?
  • System Design面试的例子
    • Design URL Shortening Service
      • Design SQS
        • Design Uber
        • System Design积木的例子
        • 结语
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档