个人知乎
功能九-timeline/新鲜事推送
基础知识
不同用户不同的内容
推:
事件触发后广播给所有粉丝,异步实现简单
粉丝量大时,后台压力大
拉:
登录时主动拉取关注内容
读取压力大
推拉:
活跃/在线用户推
其他/僵尸拉
大型网站技术架构
按时间分表
异步处理
分库分表,比如按尾号
分级缓存,热门数据存在内存
多机房数据同步
人人网
推送为主,新鲜事合并
内存缓存关系链
数据压缩缓存
异步线程池
业务分析
模型:feed新鲜事
拉模式:读取数据库
推模式:
Model
feed:id,type,userId,createdDate
data:json格式
数据表
根据模型建表
DAO
注解实现简单sql
插入
xml实现动态sql
查询和userId相关的新鲜事
Service
查询list<userId>对应的新鲜事
Controller
拉模式
feedHandler
当如评论,关注等Event事件发生时,生成一个feed并入数据库
getPullFeeds:拉模式
根据登录用户取出关注的人,得到id列表list<userId>
调用Service从数据库得到所有的新鲜事
用macro宏在模板根据type中渲染出不同样式
推模式
feedHandler
当把feed存入库时,还需要推入到粉丝的reids.<timelinekey,list>中
用户登录时根据自己的timelinekey直接从redis取出所有feed
注意当取消关注或者取消事件是需要同步redis