feed流拉取,读扩散,究竟是啥?
from:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961214&idx=1&sn=5e80ad6f2a278529c395e445029d8f63&chksm=bd2d02a28a5a8bb4f8622b1bff1cf87fc9adb510117dd2cf93fedd01fdc5d5ace7557a03f3b1&scene=21#wechat_redirect
任何脱离业务的架构设计都是耍流氓。
哪些产品是feed流典型业务?
答:微博,微信朋友圈,Pinterest是典型的feed流业务,系统中的每一条消息就是一个feed。
这类业务的特点是:
有好友关系,例如关注,粉丝
我们的主页由别人发布的feed组成
这类业务的典型动作是:
关注,取关
发布feed
拉取自己的主页feed流
这类业务的核心元数据是:
关系数据
feed数据
feed流的“拉取”与“推送”实现,是个怎么回事?
答:feed流业务最大的特点是“我们的主页由别人发布的feed组成”,获得朋友圈消息feed流集合,从技术上说,主要有“拉取”与“推送”两种方式。feed流的推与拉主要指的是这里。
今天将简述拉模式(圈内说的较多的是“读扩散”)的核心数据结构,核心流程,优缺点。
例如:某feed系统里有ABCD四个用户,其中:
A关注了BC,D关注了B
其关系存储又包含关注关系与粉丝关系,“A关注了BC,D关注了B”的潜台词是“B有两个粉丝AD,C有一个粉丝A”。
B发布过四条feed:msg1, msg3, msg5, msg10
C发布过两条feed:msg2, msg8
每一个用户,都有一个feed队列,记录自己曾经发布的所有feed数据。
在拉模式中,发布一条feed的流程非常简单,例如C新发布了一条msg12:
此时只需往C的feed队列里加入一条feed即可。
在拉模式中,取消关注的流程也非常简单,例如A取消关注C:
此时只需要在A的关注列表里删除C,并在C的粉丝列表里删除A即可。
在拉模式中,用户A获取“由别人发布的feed组成的主页”的过程比较复杂,此时需要:
获取A的关注列表
list<gz_uid> = select uid from GZ where uid=A
获取所关注的用户发布的feed
list<msg> = NULL;
for(uid in list<gz_uid>){
list<some_msg> =
select * from F where uid=$uid offset | limit
list<msg> += list<some_msg>;
}
对消息进行rank排序(假设按照发布时间排序),分页取出对应的一页feeds
sort_msg_by_time(list<msg>);
get_one_page(list<msg>, page_num);
feed流的拉模式(“读扩散”)有什么优缺点?
优点:
存储结构简单,数据存储量较小,关系数据与feed数据都只存一份
取消关注,发布feed的业务流程非常简单
存储结构,业务流程都比较容易理解,非常适合项目早期用户量、数据量、并发量不大时的快速实现
缺点也显而易见:
拉取朋友圈feed流列表的业务流程非常复杂
有多次数据访问,并且要进行大量的内存计算,大量数据的网络传输,性能较低
在拉模式中,系统的瓶颈容易出现在“用户所发布feed列表”的读取上,而每个用户发布feed的频率其实是很低的,此时,架构优化的核心是通过缓存降低数据存储磁盘IO。
当用户量、数据量、并发量数据逐步增加之后,拉模式会慢慢扛不住了,需要升级优化,但对于“取消关注”与“发布feed”这两个写流程又会有冲击和影响,具体架构应该如何迭代,下一章和大家分享(额,今天笔记本没电了)。
架构,不只是设计出来的,更是演进而来的。
填坑篇1:《系统通知,究竟是推还是拉?》
填坑篇2:《状态同步,究竟是推还是拉?》
填坑篇3:《网页端消息,究竟是推还是拉?》
填坑篇4:《群已读回执,究竟是推还是拉?》
填坑篇5:《群消息,究竟存1份还是多份?》
朴素的设计,也有其适应的业务阶段。
feed流拉取,读扩散,究竟是啥?的更多相关文章
- 如何打造千万级Feed流系统
from:https://www.cnblogs.com/taozi32/p/9711413.html 在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈 ...
- what is feeding and what is 读扩散 and 写扩散?
what is feeding? 通俗点说feed系统就是当你登陆进对应网站后:微信朋友圈的动态.人人网上看到的一件件新鲜事.新浪微博上推到你面前的一条条新围脖等等.系统中的每一条消息就是一个feed ...
- IM群聊消息究竟是存1份(即扩散读)还是存多份(即扩散写)?
1.前言 IM的群聊消息,究竟存1份(即扩散读方式)还是存多份(即扩散写方式)? 上一篇文章<IM群聊消息的已读回执功能该怎么实现?>是说,“很容易想到,是存一份”,被网友们骂了,大家争论 ...
- 微博Feed流
一.微博核心业务图 二.微博的架构设计图 三.简述 先来看看Feed流中的一些概念: Feed:Feed流中的每一条状态或者消息都是Feed,比如微博中的一条微博就是一个Feed. Feed流:持续更 ...
- 从小白到架构师(4): Feed 流系统实战
「从小白到架构师」系列努力以浅显易懂.图文并茂的方式向各位读者朋友介绍 WEB 服务端从单体架构到今天的大型分布式系统.微服务架构的演进历程.读了三篇万字长文之后各位想必已经累了(主要是我写累了), ...
- Feed流系统设计-总纲
https://mp.weixin.qq.com/s/ccxM2thPbzg5vDWgGVJ5vQ 作者:少强 简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代 ...
- 常用Feed流架构实现
业务中很多需求都会用到类似feed流的架构. 例如 微信朋友圈 微博 动态 1对N消息. 一般feed流的架构实现有下面几种. 假如现在的业务场景是微博,然后当前的数据情况是: 用户A关注了用户B和C ...
- 数据人看Feed流-架构实践
背景 Feed流:可以理解为信息流,解决的是信息生产者与信息消费者之间的信息传递问题.我们常见的Feed流场景有:1 手淘,微淘提供给消费者的首页商品信息,用户关注店铺的新消息等2 微信朋友圈,及时获 ...
- Feed 流系统杂谈
什么是 Feed 流 Feed 流是社交和资讯类应用中常见的一种形态, 比如微博知乎的关注页.微信的订阅号和朋友圈等.Feed 流源于 RSS 订阅, 用户将自己感兴趣的网站的 RSS 地址登记到 R ...
随机推荐
- oozie无法识别hadoopHA中的ns1
[hadoop@dwdev-name1 m_goods_sale_detail]$ oozie job -config job.properties -run Error: E1603 : java. ...
- JavaScript(四):函数
JavaScript中的函数分为两种:系统函数和自定义函数,这里主要讲解自定义函数. 一.自定义函数 1.语法: 注意: 传入的参数是可选的. 例如: <!DOCTYPE html> &l ...
- linq操作符:连接操作符
linq中的连接操作符主要包括Join()和GroupJoin()两个. 一.Join()操作符 Join()操作符非常类似于T-SQL中的inner join,它将两个数据源进行连接,根据两个数据源 ...
- Ubuntu free以及Linux内存占用大的解释
-bash-3.00$ free total used free shared buffers cached Mem: 514020 465932 48088 0 15864 348844 -/ bu ...
- 使用STC-ISP向KEIL添加STC芯片头文件
第一步:打开“STC-ISP”软件. 第二步:点击右手边“Keil仿真设置”,然后点击“添加型号和头文件到Keil中添加STC仿真器驱动到Keil中”. 第三步:在弹出的“浏览文件夹”对话框中,找到你 ...
- Spring面试,IoC和AOP的理解
spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...
- Android O seLinux 编译错误
编译android O源码,遇到错误 FAILED: out/target/product/hon450/obj/ETC/sepolicy_intermediates/sepolicy /bin/ba ...
- 第三百二十二节,web爬虫,requests请求
第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...
- e799. 限制JSlider的数值在标记以内
By default, the slider can take on any value from the minimum to the maximum. It is possible to conf ...
- 目标检测之rcnn---开启检测新高度优于dpm
http://www.cnblogs.com/louyihang-loves-baiyan/p/4839869.html http://www.cnblogs.com/louyihang-loves- ...