跳转到内容
系统设计入门 · 中文文档

附录

一些时候你会被要求做出保守估计。比如,你可能需要估计从磁盘中生成 100 张图片的缩略图需要的时间或者一个数据结构需要多少的内存。2 的次方表和每个开发者都需要知道的一些时间数据(译注:OSChina 上有这篇文章的译文)都是一些很方便的参考资料。

Power Exact Value Approx Value Bytes
---------------------------------------------------------------
7 128
8 256
10 1024 1 thousand 1 KB
16 65,536 64 KB
20 1,048,576 1 million 1 MB
30 1,073,741,824 1 billion 1 GB
32 4,294,967,296 4 GB
40 1,099,511,627,776 1 trillion 1 TB

每个程序员都应该知道的延迟数

Section titled “每个程序员都应该知道的延迟数”
Latency Comparison Numbers
--------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 10,000 ns 10 us
Send 1 KB bytes over 1 Gbps network 10,000 ns 10 us
Read 4 KB randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 us
Round trip within same datacenter 500,000 ns 500 us
Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
HDD seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from 1 Gbps 10,000,000 ns 10,000 us 10 ms 40x memory, 10X SSD
Read 1 MB sequentially from HDD 30,000,000 ns 30,000 us 30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms
Notes
-----
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns

基于上述数字的指标:

  • 从磁盘以 30 MB/s 的速度顺序读取
  • 以 100 MB/s 从 1 Gbps 的以太网顺序读取
  • 从 SSD 以 1 GB/s 的速度读取
  • 以 4 GB/s 的速度从主存读取
  • 每秒能绕地球 6-7 圈
  • 数据中心内每秒有 2,000 次往返

常见的系统设计面试问题,给出了如何解决的方案链接

问题引用
设计类似于 Dropbox 的文件同步服务youtube.com
设计类似于 Google 的搜索引擎queue.acm.org
stackexchange.com
ardendertat.com
stanford.edu
设计类似于 Google 的可扩展网络爬虫quora.com
设计 Google 文档code.google.com
neil.fraser.name
设计类似 Redis 的键值存储实现键值存储系列
Amazon Dynamo 论文
设计类似 Memcached 的缓存系统slideshare.net
设计类似亚马逊的推荐系统hulu.com
ijcai13.org
设计类似 Bitly 的短链接系统n00tc0d3r.blogspot.com
设计类似 WhatsApp 的聊天应用highscalability.com
设计类似 Instagram 的图片分享系统highscalability.com
highscalability.com
设计 Facebook 的新闻推荐方法quora.com
quora.com
slideshare.net
设计 Facebook 的时间线系统facebook.com
highscalability.com
设计 Facebook 的聊天系统erlang-factory.com
facebook.com
设计类似 Facebook 的图表搜索系统facebook.com
facebook.com
facebook.com
设计类似 CloudFlare 的内容传递网络cmu.edu
设计类似 Twitter 的热门话题系统michael-noll.com
snikolov .wordpress.com
设计一个随机 ID 生成系统blog.twitter.com
github.com
返回一定时间段内次数前 k 高的请求ucsb.edu
wpi.edu
设计一个数据源于多个数据中心的服务系统highscalability.com
设计一个多人网络卡牌游戏indieflashblog.com
buildnewgames.com
设计一个垃圾回收系统stuffwithstuff.com
washington.edu
设计 API 限流器Stripe:限流器设计
设计证券或数字资产交易所(如 NASDAQ、Binance)Jane Street 讲座
Go 交易引擎实现
Go 限价订单簿实现
添加更多的系统设计问题贡献

关于现实中真实的系统是怎么设计的文章。


Source: Twitter timelines at scale

不要专注于以下文章的细节,专注于以下方面:

  • 发现这些文章中的共同的原则、技术和模式。
  • 学习每个组件解决哪些问题,什么情况下使用,什么情况下不适用
  • 复习学过的文章
类型系统引用
Data processingMapReduce - Google的分布式数据处理research.google.com
Data processingSpark - Databricks 的分布式数据处理slideshare.net
Data processingStorm - Twitter 的分布式数据处理slideshare.net
Data storeBigtable - Google 的列式数据库harvard.edu
Data storeHBase - Bigtable 的开源实现slideshare.net
Data storeCassandra - Facebook 的列式数据库slideshare.net
Data storeDynamoDB - Amazon 的文档数据库harvard.edu
Data storeMongoDB - 文档数据库slideshare.net
Data storeSpanner - Google 的全球分布数据库research.google.com
Data storeMemcached - 分布式内存缓存系统slideshare.net
Data storeRedis - 能够持久化及具有值类型的分布式内存缓存系统slideshare.net
File systemGoogle File System (GFS) - 分布式文件系统research.google.com
File systemHadoop File System (HDFS) - GFS 的开源实现apache.org
MiscChubby - Google 的分布式系统的低耦合锁服务research.google.com
MiscDapper - 分布式系统跟踪基础设施research.google.com
MiscKafka - LinkedIn 的发布订阅消息系统slideshare.net
MiscZookeeper - 集中的基础架构和协调服务slideshare.net
添加更多贡献
CompanyReference(s)
AmazonAmazon 的架构
Cinchcast每天产生 1500 小时的音频
DataSift每秒实时挖掘 120000 条 tweet
DropBox我们如何缩放 Dropbox
ESPN每秒操作 100000 次
GoogleGoogle 的架构
Instagram1400 万用户,达到兆级别的照片存储
是什么在驱动 Instagram
Justin.tvJustin.Tv 的直播广播架构
FacebookFacebook 的可扩展 memcached
TAO: Facebook 社交图的分布式数据存储
Facebook 的图片存储
Facebook Live 如何同时向 80 万观众直播
FlickrFlickr 的架构
Mailbox在 6 周内从 0 到 100 万用户
NetflixNetflix 全栈架构概览
按下播放键后发生了什么
Pinterest从零到每月数十亿的浏览量
1800 万访问用户,10 倍增长,12 名员工
Playfish月用户量 5000 万并在不断增长
PlentyOfFishPlentyOfFish 的架构
Salesforce他们每天如何处理 13 亿笔交易
Stack OverflowStack Overflow 的架构
TripAdvisor40M 访问者,200M 页面浏览量,30TB 数据
Tumblr每月 150 亿的浏览量
TwitterMaking Twitter 10000 percent faster
每天使用 MySQL 存储2.5亿条 tweet
150M 活跃用户,300K QPS,22 MB/s 的数据流
可扩展时间表
Twitter 的大小数据
Twitter 运维:扩展到超过 1 亿用户
Twitter 如何每秒处理 3,000 张图片
UberUber 如何扩展自己的实时化市场
Uber 扩展到 2,000 名工程师、1,000 个服务与 8,000 个 Git 仓库的经验
WhatsAppFacebook 用 190 亿美元购买 WhatsApp 的架构
YouTubeYouTube 的可扩展性
YouTube 的架构

你即将面试的公司的架构

你面对的问题可能就来自于同样领域

想添加工程博客?为避免重复维护,可以考虑将公司博客加入下面的仓库: