分布式应用系统设计.Feed 流系统(学习笔记)

news2024/9/20 0:08:38

什么是Feed 流系统

今天记录 Feed 流系统的设计学习笔记,Feed 流常见系统包括 Twitter、微博、Instagram 和抖音等等,它们的特点是,每个用户都是内容创作者,每个用户也都是内容消费者,每个用户看到的内容都是不同的,它取决于用户所关注的用户列表,再结合时间线(有时还包括优先级)将这些用户的最新 feed 聚合,并以流的方式展示出来。

用户周围用户分为

1. 我关注的(我想看的)

2. 关注我的(看我写的)

用户获取信息模式

push:服务器推给用户的模式,服务器给我每个用户预留一定空间,我关注的博主发博文后,服务器就会将博文给我复制一份(多少个关注人就复制多少份)

pull:用户从服务器拉的模式,服务器不给每个人在服务器预留空间,我上线后刷新,就去关注的博主挨个拉取,并按照时间线聚合,形成流给我输出

经典场景:一个大V粉丝众多

1. 如果采用push模式,都复制一份,则会占用很多空间

2. 博文可以采用ID,将ID推送给粉丝,这就需要在刷新页面的时候再读取一次博文

3. 读取博文可以进行缓存,而不是IO

4. 另一种思路是:减少推送的数量,比如只推送给活跃的粉丝

5. 换种思路,如果用pull(拉)模式,就可能一个大V的八卦会瞬间大流量的读,服务器可能扛不住

6. 缓存博文,并进行流控,防止大流量冲垮服务

用户信息和关系存储

1. 用户信息:用关系型数据库MySQL

2. 用户关系:用图数据库GraphDB,也可以用MySQL

博文存储

1. 可以使用 KV 数据库

2. 也可以使用 MongoDB 这一类文档数据库,以适应弱结构化文本为主的数据

3. 使用MySQL存储时需要考虑性能问题

用户和博文的关联数据存储

1. 数据量会比较大,可以选择 Redis 这样的 KV 数据库

2. Sharding 维度问题:博文数据量巨大,需要集群存储,那按照什么维度进行分片呢

3. 常用的有:按照时间维度;按照博文ID;按照用户ID Hash

4. 时间维度:新老数据访问不均,新数据访问的多

5. 博文维度:一个人的博文会存储在多个机器,需要挨个查询聚合

6. 用户维护:用户活跃程度不同

图片,视频和文件存储

OBS,S3等文件系统

发文过程

1. 记录博文

2. 如果是push模式,则进行推送。用户的聚合服务将博文按照时间线聚合起来

3. 如果是pull模式,则不进行处理

读取博文

1. 如果是push模式则读取自己,已聚合起来的消息

2. 如果是pull模式,则需要读取并聚合

学习博文:

常见分布式应用系统设计图解(二):Feed 流系统 – 四火的唠叨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch学习(2)-猫狗大战数据集分类识别-PyTorch代码实训

猫狗大战数据集分类识别-PyTorch代码实训 二分类任务 数据集文件目录结构图 pythonProject/ │ ├── cat_recognition.py │ └── kagglecatsanddogs_5340/└── PetImages/├── Cat/...└── Dog/...Cat和Dog文件夹中的图片的后缀均为.jpg 代码1(实现…

MYSQL多表数据去重、合并、取并集等

SQL join 用于把,来自两个或多个表的行结合起来。 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。。 1、SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key 2、SELECT <select_list> FROM TableA A LEFT …

在VMware里面安装Linux安装教程

!(https://gitee.com/code-shuyi/local-images/raw/master/image/202407311020201.png) 5385453)] [外链图片转存中…(img-BiUfrRTp-1722395385453)]

替代TLD5190同步四开关升降压LED专用电源调节器,支持PWM调光功能,具有强制电流调节模式

特征:PC8655替代TLD5190  AEC-Q100合格 −设备环境温度&#xff1a; -40C≤TA≤125C −器件结温&#xff1a; -40C≤TJ≤150C  工作输入电压4.5V至55V&#xff0c;启动电压降至4.5V  在各种条件下效率都很高&#xff0c;高达96%  3%LED电流精度  高侧PMOS调…

C语言中的浮点数存储:深入探讨

案例引入 请看下面一段代码并思考结果&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int n 9;float* pFloat (float*)&n;printf("n的值为&#xff1a;%d\n", n);printf("*pFloat的值为&#xff1a;%f\n", *…

如何实现参加RAG比赛但进不了复赛的总结

今天写这篇文章主要就是总结一下我使用的一些基本方法&#xff0c;虽然肯定比不上前十的大佬们的操作&#xff0c;但对于常规RAG实现来说也是够用的。这次的考题是给了一堆HTML的知识文档&#xff0c;基于这些文档来进行知识问答。这些文档是企业内部的运维相关文档&#xff0c…

点击jmeter.bat一闪而过无法打开的解决方案

重新查看了配置&#xff0c;在系统变量&#xff08;win10以上直接搜索“环境变量”&#xff09;配置了所有的配置&#xff0c;点击jmater.bat一闪而过无法打开&#xff0c;并且在命令行输入jmeter如下的提示&#xff1a; 检查JMETER_HOME在系统变量的配置是否有分号&#xff0c…

windows 上使用纯 nvcc 命令编译 myboyhood/yolo-tensorrt 工程的过程记录

1. 码云仓库链接&#xff1a;https://gitee.com/myboyhood/yolo-tensorrt 2. 参考博客&#xff1a; 1. 用C/C写一个简单的音乐播放器&#xff08;基于windows控制台编程&#xff09;&#xff1a;https://blog.csdn.net/lwx1051046458/article/details/128889992 3. 过程记录&…

Linux中新添加的磁盘信息不显示-主动扫盘(刷新磁盘状态)

在Linux系统中&#xff0c;当你新添加了一个磁盘&#xff08;无论是通过物理添加还是虚拟化环境&#xff09;&#xff0c;你可能需要让系统识别这个新磁盘&#xff0c;并且可能需要更新或“刷新”磁盘的状态。这通常涉及到几个步骤&#xff0c;但没有一个直接的“刷新磁盘状态”…

springboot集成nacos开启权限验证报错:user not found!

按照官网的说明对nacos的application.properties配置做了开启权限配置。 我的配置项&#xff1a; spring:cloud:nacos:discovery: #服务发现配置group: devnamespace: integrated-manage-dev password: integrated_manageusername: integrated_manageserver-addr: lo…

手把手教你实现基于丹摩智算的YoloV8自定义数据集的训练、测试。

摘要 DAMODEL&#xff08;丹摩智算&#xff09;是专为AI打造的智算云&#xff0c;致力于提供丰富的算力资源与基础设施助力AI应用的开发、训练、部署。 官网链接&#xff1a;https://damodel.com/register?source6B008AA9 平台的优势 &#x1f4a1; 超友好&#xff01; …

Java 延迟消息

场景 6S后执行任务 7天后发送订单 从现有时间算延后多少时间开始执行&#xff0c;当然也可以转换为在以后某个时间执行。 Timer类 Java中的Timer类是一个定时器&#xff0c;它可以用来实现延时消息的功能。 import java.util.Timer; import java.util.TimerTask;public c…

uniapp微信小程序本地和真机调试文件图片上传成功但体验版不成功

文章目录 导文是因为要添加服务器域名&#xff01; 导文 uniapp微信小程序本地和真机调试文件图片上传成功但体验版不成功 uniapp微信小程序体验版上传图片不成功 微信小程序本地和真机调试文件图片上传成功但体验版不成功 是因为要添加服务器域名&#xff01; 先看一下 你小程…

android13 第三方桌面不能使用后台历史任务问题 任务键功能失效问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.复现现象 3.问题分析 4.解决方法 5.编译运行 6.彩蛋 1.前言 随着Android 13操作系统的发布,用户现在可以更加自由地选择和使用第三方Launcher来定制自己的设备。本文将介绍在Android 13上安装和使用第三方Launcher导致…

工信部哪些证书可以考,含金量高吗

随着科技的快速发展和行业的不断变化&#xff0c;市场对人才的需求也在不断更新。技能提升可以帮助个人适应这些变化&#xff0c;满足新的岗位要求。同时学习新技能可以拓宽思维&#xff0c;激发创新意识&#xff0c;帮助我们在工作中找到新的解决方案。 泰迪智能科技专注…

楼宇智能化仿真实训室解决方案

在信息技术的浪潮中&#xff0c;智慧城市作为未来城市发展的新形态&#xff0c;正以前所未有的速度在全球范围内兴起。其中&#xff0c;楼宇智能化作为智慧城市的关键构成&#xff0c;扮演着举足轻重的角色。它不仅提升了建筑的能源效率、安全性与舒适度&#xff0c;还促进了城…

SQL Server 端口配置

目录 默认端口 更改端口 示例&#xff1a;更改 TCP 端口 示例&#xff1a;验证端口设置 远程连接测试 示例&#xff1a;使用 telnet 测试连接 配置防火墙 示例&#xff1a;Windows 防火墙设置 远程连接测试 示例&#xff1a;使用 telnet 测试连接 默认端口 TCP/IP: …

【Github】Github 上commit后 contribution 绿格子不显示 | Github绿格子 | Github贡献度不显示

一、Github 消失的绿点 1、贡献值为什么没了&#xff1f; 2、选择要显示的贡献 如下配置 二、如何解决消失的绿点&#xff1f; 1、添加邮箱 确保邮箱的设置必须选择一个邮箱邮箱 2、git config 添加邮箱 设置邮箱如下&#xff1a; git config --local user.email 316434776…

Tomcat IntelliJ IDEA整合

一、下载及安装Tomcat 下载官网&#xff1a;Apache Tomcat - Welcome! 1.点击红色框中的任意一个版本 2.点击下载 3.解压后放在任意路径&#xff08;我的是放在D盘&#xff09; 4.在bin目录下找到startup.bat&#xff0c;点击启动Tomcat 5.如果双击启动后&#xff0c;终端出…