面試題 | 設計twitter搜索功能

題目

  • 現在你是twitter搜索負責人,設計搜索系統,提供圖片、文字搜索
    • 用戶1.5 billion,日活800 million
    • 每天新增400 million tweets (每個tweet大小300B)
    • 每天搜索次數500M
    • 搜索格式包含多個words以及 and/or
  • 設計高效存儲和查詢tweets的系統

約束

  • 日存儲量120GB,月3.6TB,10年432TB
  • tweet數量:日400M,月12B,年144B,5年740B
  • 讀qps 6K, 寫qps 4.5K
  • 讀寫均衡,高併發系統

服務

high level

  • 索引服務 + 存儲服務
  • 存儲數量很大,一臺機器存不下,sharding要能加快搜索;
  • 存儲時需要做一些優化,加快搜索;生成索引信息,提取word和對應tweetId;可以快速找到某個word對應的tweetid列表;
  • 用戶只會關心她關注的好友的信息,如果一個人粉絲特別多,pull可能不行;

存儲

存儲規模

  • 機器數量:5年220TB,按照80%利用率;需要300TB;75臺機器;
  • 1T數據條數,1000billion數據;需要一個發號器srv,7位62編碼即可實現

索引規模

  • 預估index的大小:

    • 一個word平均5B,500K個word,5 * 500KB = 2.5MB
    • tweetID:每個tweetID的大小爲7B,5年,7B * 740B = 5TB;考慮每條tweet有50個word,有效word是20個;每個tweetID被重複使用20次;需要100TB
    • 總大小 (100TB + 2.5MB) = 100TB
  • 機器預估:

    • 內存144GB,大概需要700臺機器存儲index
  • sharding on words 主要問題

    • 訪問熱點word,導致機器負載過高
    • 分佈不均勻,有些word是高頻詞,引用的tweet過多
    • 解法:??
  • sharding on tweetID

    • 需要遍歷所有的index server,聚合tweetid集合

擴展

索引服務down掉如何處理

  • 重建索引
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章