• 要求
    • user人数10w, 活跃1w。
    • 大部分user关注1k人, 一部分大v被关注100w人。z
    • 每人每天发100条博文
    • user新博文数量提醒,消息标记已读
    • user
    • user_followers
    • user_followed
    • user_posts(u_id, created_ts)
    • user_messages(u_id, p_id, is_read)
      • 10w * 100条数据 / 天
  • 定时任务拉取
    • user_followed拉u_id, user_posts表按时段拉id, 更新user_messages
    • 优点
      • 平均, 少次, 增量。
    • 缺点
      • 及时性中
      • 每次对所有用户操作
    • 数据
      • 10w1k100条数据 / 天
  • 发布时推送
    • 有p_id, user_followers, 更新user_messages
    • 优点
      • 及时性高
    • 缺点
      • 计算集中, 可能高峰
    • 数据
      • 最高 100w*100条数据 / 次
      • 10w*100次 / 天
  • messages处理
    • 存部分messages
      • 不活跃user不存message
        • 在登录状态,定时拉取
          • 优点
            • 减少message
          • 缺点
            • 计算集中
          • 数据
            • 1k * N(N<100)条 / 次
            • 1w * 1k * 100条数据 / 天
    • messages结构变化
      • u_id: [{p_id: uint, is_read: bool}] # 条数稳定为10w
      • 用mongodb或redis
  • 消息队列?
    • 服务端存message状态,不能mq
    • 如果客户端存状态,这就是个简单的mq问题