面试题 | 设计twitter搜索功能

作为Twitter搜索系统的负责人,面临挑战是设计高效存储和查询400M/day tweets的系统,支持图片和文字搜索,处理500M/day的搜索请求。在10年的数据规模下,需保证在有限的存储空间内实现高并发的读写操作。解决方案包括索引服务和存储服务的分离,利用sharding优化搜索速度,应对索引服务故障的恢复策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

  • 现在你是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掉如何处理

  • 重建索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值