系统设计面试题 - 设计 Twitter 时间线和搜索 (或者

2018-04-26  本文已影响111人  专职跑龙套

引用:
系统设计入门

设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)

解答

第一步:通过讨论,明确限制及用例,确定Scope

支持的用例:

不支持的用例:

Constraints and assumptions:

计算规模:
对于每一个tweet:

对于每一个月:

第二步:高层次设计

设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)

第三步:设计核心组件

Tweet基本信息存储在关系型数据库MySQL中。
Tweet包含的图片及视频等内容存储在 Object Store 中,可以是 Amazon S3,或者文档型的NoSQL,例如 MongoDB。

对于Write API:设计为一个REST API

使用Redis作为Memory Cache,并使用list结构,例如:

           tweet n+2                   tweet n+1                   tweet n
| 8 bytes   8 bytes  1 byte | 8 bytes   8 bytes  1 byte | 8 bytes   8 bytes  1 byte |
| tweet_id  user_id  meta   | tweet_id  user_id  meta   | tweet_id  user_id  meta   |

对于Read API:设计为一个REST API

对于Search API:设计为一个REST API

第四步:扩展设计

设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)

其他一些优化思想:

上一篇下一篇

猜你喜欢

热点阅读