设计新鲜事(News Feed)系统(二)

146 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

服务 - Service

将大系统拆分为小服务。

  • 第一步 - Replay:重新过一下所有需求,为每个需求添加一或多个服务
  • 第二步 - Merge:归并相同的服务

可将新鲜事系统拆为如下服务,每个服务中会包含场景分析中提到的各个功能:

  • User Service(用户服务):

    • 登录
    • 注册
  • News Service(新鲜事服务):

    • 发布/转发新鲜事
    • 新鲜事
    • 时间线
  • Friendship Service(好友服务):

    • 关注好友
    • 取消关注
  • Media Service(媒体服务):

    • 上传图片
    • 上传视频

存储 - Storage

  • 第一步 - Select:为每个服务选择合适存储结构
  • 第二步 - Schema:细化数据库表结构

选择合适的存储结构:

  • SQL 关系型数据库

    • 用户信息
  • NoSQL 非关系型数据库

    • 新鲜事内容(推文、微博内容)
    • 社交图谱
  • 文件系统

    • 图片/视频

简单的表结构设计实例:

  • 针对 User Service(用户服务),用户表可设计:

    数据库中存放的密码一般是经hash后的。

  • Friendship Service(好友服务)可能包含如下的关系表结构:

from 用户关注了to用户, from_user_idto_user_idUser表的外键关联。

  • News Service(新鲜事服务)存储新鲜事的表结构:

    升级、扩展 - Scale

解决缺陷,处理可能遇到的问题。

如何存取信息流(News Feed)/ 时间线(Timeline)?

当你打开微博:

  • 打开首页,看自己关注的用户发布了哪些新内容
  • 打开某特定用户的时间轴,浏览该用户发布的内容

聚焦信息流和时间线的数据存储数据访问,来权衡设计。