微博怎么发微博(微博如何快速增加粉丝)

转自 作者 | JiaGouX

一. 背景

微博,微信朋友圈,抖音等都是典型的feed流产品,也就是我们的浏览内容都是由他人发的feed组成。

本篇文章尝试进行微博feed流的设计解析,如有问题欢迎大家指正。

二. 如何设计一个微博feed流

1. 存储设计

在数据存储上主要分三个部分

1)feed存储

是用户发布的内容存储,这部分内容需要永久存储,用户在查看个人主页的时候不论多久的都要可以看到

数据结构简化如下,根据userId进行水平分表

create table `t_feed`(
  `feedId` bigint not null PRIMARY KEY,
  `userId` bigint not null COMMENT '创建人ID'
  `content` text,
  `recordStatus` tinyint not null default 0 comment '记录状态'
)ENGINE=InnoDB;

2)关注关系存储

是用户之间关系的一个存储,也是控制用户能够看到feed范围的依赖,同样需要永久存储。

数据结构简化如下(待优化)根据userId进行水平分表:

CREATE TABLE `t_like`(
    `id` int(11) NOT NULL PRIMARY KEY, 
    `userId` int(11) NOT NULL, 
    `likerId` int(11) NOT NULL,
    KEY `userId` (`userId`),
    KEY `userId` (`likerId`),
)ENGINE=InnoDB;

3)feed同步存储

用于feed流展示,可以理解为是一个收件箱,关注的人发布了feed,就要向其中投递。

可以根据业务场景保存一段时间内的内容,冷的数据可以进行归档也可以直接删除。

数据结构简化如下,根据userId进行水平分表:

create table `t_inbox`(
  `id` bigint not null PRIMARY KEY,
  `userId` bigint not null comment '收件人ID',
  `feedId` bigint not null comment '内容ID',
  `createTime` datetime not null
)ENGINE=InnoDB;

2. 场景特点

1) 读多写少

读写比例差距巨大,典型的读多写少场景。

2) 有序展示

需要根据timeline或者feed的打分值来进行排序处理展示。

3. 使用推模式实现

推模式也称写扩散模式,当被关注人发布内容后,主动将内容推送给关注,写入关注人的收件箱中。

1)方案

1、当被关注人发布一条内容以后,获取所有关注该人的用户,然后进行遍历数据,将内容插入这些用户的收件箱中,示例如下:

/** 插入一条feed数据  **/
insert into t_feed (`feedId`,`userId`,`content`,`createTime`) values (10001,4,'内容','2021-10-31 17:00:00');

/** 查询所有粉丝 **/
select userId from t_like where liker = 4;

/** 将feed插入粉丝的收件箱中 **/
insert into t_inbox (`userId`,`feedId`,`createTime`) values (1,10001,'2021-10-31 17:00:00');
insert into t_inbox (`userId`,`feedId`,`createTime`) values (2,10001,'2021-10-31 17:00:00');
insert into t_inbox (`userId`,`feedId`,`createTime`) values (3,10001,'2021-10-31 17:00:00');

2、当用户ID为1的用户进行查看feed流时,就将收件箱表中的所有数据进行查出,示例如下:

select feedId from t_inbox where userId = 1 ;

3、对数据进行聚合排序处理

2)存在的问题

1即时性较差

当大V被很多很多用户关注的时候,遍历进行粉丝进行插入数据非常耗时,用户不能及时收到内容

可尝试的解决方法:

 1.  可将任务推入消息队列中,消费端多线程并行消费。
 2.  使用插入性能高、数据压缩率高的数据库

2存储成本很高

每个粉丝都要存储一份关注人的微博数据,大V粉丝量很高的时候,插入数据量成指数级上升。

并且微博可以将关注的博主进行分组,所以数据不仅要在全部收件箱中插入,也要在分组的收件箱中插入。

可尝试的解决方法:

数据冷热分离,热库仅保存短时间内的数据,冷库多保留一段时间的数据,冷热库均定时清理数据。

用户量不断上涨,使用这种设计方案,终究还是会遇到瓶颈

3、数据状态同步

当被关注用户删除微博或取关某博主时,需要将所有粉丝的收件箱中的内容都删除,依然存在一个写扩散的即时性问题

可尝试的解决方案:

在拉取数据的时候对微博的状态进行判断,过滤已删除/已取关的微博过滤

以上解决方案可以在一定程度上提升效率,但是不能根源上解决问题。

3)小结

推模式仅适用于粉丝量不会太多的情况,例如微信朋友圈,这样能够比较好的控制好即时触达性、以及数据存储的成本。

对于微博大V这种粉丝量很大的场景并不适合。

4. 使用拉模式

拉模式也称读扩散模式,当我们使用拉数据的方式后,用户获取数据流程如下:

1、获取所有关注的博主ID。

select liker from t_like where userId = 1;

2根据博主ID进行内容拉取。

select * from t_feed where userId in (4,5,6) and recordStatus = 0;

3、获取所有内容后根据timeline进行排序。

这样的方案解决了在推模式下存在的三个问题,但是却也引发了另外的性能问题。

假如,用户关注的博主非常多,要拉取所有内容并进行排序聚合,这样的操作必定会耗时很多,请求时延很高。

那么如何做到低耗时,完成快速响应呢?

单纯依靠数据库是无法达到要求的,所以我们要在中间引入缓存层(分片),通过缓存来降低磁盘IO。

1)流程为:

1、关注列表缓存

将用户关注的所有博主ID存入缓存中。以用户ID为key,value为关注博主id集合

2、微博内容缓存

以博主ID为key,value为微博内容集合。博主发布微博后,将微博内容存入集合中

3、获取feed流时

根据关注的博主id集合,在所有缓存分片节点上拉取所有内容并进行排序聚合。

假如缓存分片集群为三主三从,也就是一共需要三次请求即可拉取到所有内容,然后进行时间倒排,响应给用户

2)存在的问题

1、系统的读压力很大

假如用户关注了1000个博主,那么需要拉取这1000个博主的所有发布内容,进行排序聚合,对于缓存服务,以及带宽压力都很大。

可尝试的解决方案:

缓存节点一主多从,通过水平扩容,来分散读压力和带宽瓶颈

3)小结

对于大V用户,拉模式能够很好解决写扩散存在的问题,同时也会带来上述存在的问题。

三. 总结

分析完推模式和拉模式的优缺点,我们很容易发现

  1. 推模式适合于粉丝量不大的场景。例如朋友圈,一对一聊天。
  2. 拉模式适合粉丝量巨大的大V用户。例如微博大V。

所以在场景设计时,可以将推模式和拉模式结合使用。逻辑如下

  1. 设定一个大V粉丝量阈值,达到阈值后触发打用户标签事件。
  2. 对于未达到阈值的用户依然使用写扩散方式,这样冗余的数据量不会太大,也不存在即时性问题。
  3. 当达到阈值的用户发微博的时候,将微博内容存入缓存(热数据),不进行写扩散,而是粉丝拉取数据与收件箱中的数据进行排序聚合。

PS:这里还可以通过用户行为去维护一个活跃粉丝列表,对于该列表中的粉丝,同样进行一个写扩散的行为,保证即时触达。

免责声明: 文章源于会员发布,不作为任何投资建议

如有侵权请联系我们删除,本文链接:https://www.sws100.com/kexue/245927.html

(0)
句子百科句子百科
上一篇 2023年 2月 24日 上午7:20
下一篇 2023年 2月 24日 上午8:10

相关推荐

  • 网易邮箱忘了账号怎么办(百度邮箱登录)

    有时候我们会忘记网易邮箱账号,这时候就需要有一些方法来找回它,因此本文将给大家介绍如何找回网易邮箱账号的步骤。 1.第一步,登录你的网易邮箱,在登录界面点击“忘记密码”或者“找回密码”。 2.第二步,根据要求填写你绑定的手机号或邮箱,然后点击“下一步”。 3.第三步,验证你的身份,可以使用绑定的手机号或邮箱收到的验证码,然后填写验证码,点击“下一步”。 4.…

    2023年 5月 21日
  • 牛蛙跟青蛙的区别

    喵~这是与您分享三菜一汤的 第94期 黄焖田鸡 | 苦瓜炒蛋 肉末烧茄子 | 芥菜咸蛋肉丝汤 说到田鸡,可能大多数的朋友都吃过,肉质鲜嫩,营养丰富!但是很多人傻傻分不清楚青蛙、牛蛙、田鸡、癞蛤蟆,这就要认真听讲了~ 青蛙:头部扁平,略呈三角形,吻端稍尖,横裂,由上下颌组成,上颌背侧前端有一对外鼻孔,外鼻孔外缘有鼻瓣。牛蛙:成年体长一般在7-17cm,是目前常…

    2023年 5月 15日
  • 银行不肯协商还款如何解决(银行不答应协商还款怎么办)

    大家好今天我们来说一下逾期之后协商的问题,很多朋友逾期之后特别焦虑害怕,然后就去跟银行协商还款,协商分期还款,但是只是有一小部分人协商成功了,那到底是怎么回事呢? 很多人觉得协商比较难,那是因为时机还没到,你还不符合银行减免的政策,银行是盈利机构,我们逾期之后要想协商,要满足以下五个要求,缺一不可。 1、逾期时间要超过三个月,在三个月之内能协商下来的,除非你…

    2023年 2月 8日
  • 定频和变频空调的区别(定频和变频空调的区别有哪些)

    每年的三月份,都是买空调的最好时机。这个时期,恰好是天天刚刚转暖,空调安装不久就可以投入使用,就算有问题也能及时联系商家进行三包。再者这段时间是空调厂家推出新款空调的时候,一般都会有较大幅度的折扣——对于空调来说,三月份的价格甚至要比双十一还低。 用户在购买空调时,问的最多的一个问题,就是“定频还是变频”——毕竟对于大多数人来说,空调专业性的词汇,也就只知道…

    2023年 5月 12日
  • 春天在哪里儿歌歌词(春天在哪里儿歌歌词歌曲)

    春暖花开,万物生长 在这春天末尾之际 让我们一起和贝乐虎唱儿歌《春天到》 踩着春天的尾巴出门游玩一次 祈愿今年的我们会越来越好~ 视频加载中… 《春天到》歌词 春天到呀春天到 迎春花来把春报 青草害羞点点头 太阳公公哈哈笑 春天到呀春天到 小青笋呀往上长 小蜜蜂呀采蜜忙 小蚂蚁也凑热闹 春天到呀春天到 大自然里很奇妙 小朋友们快快来 一起找春的信…

    2023年 5月 20日

联系我们

在线咨询: QQ交谈

邮件:k37759@foxmail.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信