feed流架构设计探讨

如何设计一个feed流信息系统。

 

概念

feed:用户发表的内容

follower:A关注B,A是B的follower

followee:B被A关注,B是A的folowee

feed流:持续更新并展示folowee的内容

 

产品偏向

1:微博、twitter类

2:微信朋友圈、陌陌类

3:快手、抖音类

 

产品目标。

1:用户可以读取/存储微博

2:用户可以关注/取消关注他人

3:用户读取feed流

 

用户维度

僵尸用户、非僵尸用户

活跃用户、非活跃用户

普通用户、大V用户

百万规模、海量用户规模

 

feed流维度

近期微博、历史微博

热点微博、普通微博

已删除微博、取消关注者微博

 

 

底层存储资源设计(基于数据库设计,也可以直接基于hbase存储)

基于userId hash

关注者表(userId, follower) ,粉丝表(userId, followee)

基于userId hash,再加时间维度分库分表

内容表(feedId,userId, time,content)

 

feed流设计

推模式基于redis、hbase(userId,time,feedId),冷数据自动过期。

推模式基于MySQL(userId,time,feedId),冷数据需要手动删除。

推模式实现简单,读取性能高,缺点就是存储成本,写压力大。另外取消关注者,微博被删除,此时这些微博不可见也都需要考虑。

对于这些大v发布的信息可以采用MQ异步推送的方式,其他微博直接推送。

 

基于拉模式

缺点就是写性能高,读性能需要考虑。

增量实时聚合新能容。

1:遍历好友,找到最近发表过feed人。

2:遍历最近发表过feed的人,获取feedId和time。

3:聚合形成feed流。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(架构)