持续创作,加速成长!这是我参与「掘金日新计划 · 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_id
和 to_user_id
是 User
表的外键关联。
-
News Service(新鲜事服务)存储新鲜事的表结构:
升级、扩展 - Scale
解决缺陷,处理可能遇到的问题。
如何存取信息流(News Feed)/ 时间线(Timeline)?
当你打开微博:
- 打开首页,看自己关注的用户发布了哪些新内容
- 打开某特定用户的时间轴,浏览该用户发布的内容
聚焦信息流和时间线的数据存储和数据访问,来权衡设计。