zoukankan      html  css  js  c++  java
  • 微信朋友圈设计架构

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

    ①  发布表,发布表记录了来自所有用户的所有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,把图片拉到本地。

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

  • 相关阅读:
    html websocket
    使用公钥进行远程登录主机/远程执行命令
    cropper.js 跨域问题
    利用PhantomJS生成网站截图
    Windows下的MySQL删除data文件夹后……
    快速设置环境变量
    压缩JS时生成source_map
    调试android chrome web page简明备忘
    CURL 简介【转载】
    一些同形异码字符
  • 原文地址:https://www.cnblogs.com/oceanL/p/8360641.html
Copyright © 2011-2022 走看看