微信朋友圈设计架构

 

微信朋友圈的数据有四个核心的表:

①  发布表,发布表记录了来自所有用户的所有feed,比如一个用户发布了几张图片,没张图片的URL,图片在CDN里的URL,它有哪些元属性,谁可以看,谁不可以看等等。

②  相册,相册是每个用户独立的,记录了该用户所发布的所有内容。

③ 评论, 评论就是针对某个具体发布的朋友评论和点赞操作。

④ 时间线,所谓“刷朋友圈”,就是刷时间线,就是一个用户所有的朋友的发布内容。

 

 

微信朋友圈的工作流程概述

 

比如有两个用户A和B, A和B各自都有各自的相册(可以理解为A和B各自的朋友圈内容),可能在同一台服务器上,也可能在不同服务器上。现在A上传了一张图片到自己的朋友圈。上传图片不经过微信服务器,而是直接上传到最近的CDN节点去,所以非常快。图片上传到CDN后,小王的微信客户端会通知,这里有一个新的发布(比如叫K2),这个发布的图片CDN URL是什么,谁能看这张图片等等此类的元数据。来把这些数据写入发布表中。

 

在发布表写完之后,会把K2的发布索引到A的相册表中,所以相册表记录得就是每个内容索引指针,相册表写好后会触发一个批处理动作,这个动作就是去跟A的每个好友说,A有一个新的发布,请把这个发布插入到每个好友的时间线里去。

 

现在B上朋友圈了,而B是A的一个好友,B拉自己的时间线的时候,时间线会获得K2的新发布通知,然后B的微信客户端就会取根据K2的元数据去获取发布表中的一些信息比如:CDN URL,把图片拉到本地。

 

在这个过程中,发布是很重要的,因为一方面要写一个自己的数据副本,并写入自己的时间线,还要把这个副本的指针插到所有好友的时间线里面去,如果一个用户有几百个好友的话,这个过程会比较慢一些。这是一个单数据副本写扩散的过程。但是相对应的,读取就很简单。每个用户只需要读取自己的时间线这一个动作就行,不需要去遍历所有的好友相册表。这个是否有一定得数据冗余??

 

posted on 2018-01-26 17:34  oceanL  阅读(7217)  评论(0编辑  收藏  举报

导航