Saturday, August 22, 2015

大家不是说要多准备设计么,来一道google设计面试题目 - 未名空间(mitbbs.com)



大家不是说要多准备设计么,来一道google设计面试题目 - 未名空间(mitbbs.com)
如果实现像 facebook 一样的 activity broadcast.
一个朋友 f1 更新一条信息后,他的所有朋友都要看到这条信息。
条件:
1. 朋友数量极大。
2. 有的朋友在线,有的不在线,不在线的登陆后要能看到。
3. 如果储存空间有限,如何处理。

先讨论fan-out和pull两种模式的优劣,比如前者没有availability问题,但是需要大
量随机disk seek操作,朋友数极大可能会产生backlog,就需要考虑各种write优化的
DB,比如Cassandra或者HBase等。后者没有大量随机disk seek问题,但是有
availability问题。

FB在其news feeds中采用的pull模式,找找相关视频、slides过一遍就懂了,看看
services怎么划分,采用了几个模块,节约空间,其中一些交互是用id。

储存空间有限?先问问面试官怎么约束?是内存有限还是硬盘有限?是单机有限还是整
个DC有限。
http://www.tuicool.com/articles/BJRJja
Facebook起源的NewsFeed,以及Twitter起源的Timeline,核心问题都是如何处理巨大的消息(活动,activity)分发。“推Push”和“拉Pull”或者“推拉结合”,是主要的处理方式。 

各大网站都大量使用的Nginx, memcached, MySQL等开源产品,都标配了,文中不再提。实现技术上,异步消息队列的引入,来模块解耦和尖峰削平;Cache的精良设计等,也都是各家大量使用的技能,可看参看文档,不再详述。

Push, fan-out, Write-fanout写时消息推送给粉丝。空间换时间
Pull, fan-in,  Read-fanout读时拉取所有好友的消息,再聚合。时间换空间
混合  Hybrid基于推,混入拉;基于拉,加速推。时空平衡
2014.12.8—关于微博的内容分发机制的小调研
Read full article from 大家不是说要多准备设计么,来一道google设计面试题目 - 未名空间(mitbbs.com)

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts