CHAPTER 11: DESIGN A NEWS FEED SYSTEM

news2024/12/22 18:24:10

Step 1 - Understand the problem and establish design scope

Candidate: Is this a mobile app? Or a web app? Or both?
Interviewer: Both
Candidate: What are the important features?
Interview: A user can publish a post and see her friends’ posts on the news feed page.
Candidate: Is the news feed sorted by reverse chronological order or any particular order
such as topic scores? For instance, posts from your close friends have higher scores.
Interviewer: To keep things simple, let us assume the feed is sorted by reverse chronological
order.
Candidate: How many friends can a user have?
Interviewer: 5000
Candidate: What is the traffic volume?
Interviewer: 10 million DAU
Candidate: Can feed contain images, videos, or just text?
Interviewer: It can contain media files, including both images and videos.
Now you have gathered the requirements, we focus on designing the system.

Step 2 - Propose high-level design and get buy-in

Feed publishing
Newsfeed building

Newsfeed APIs

publishing API and news feed retrieval API.

Feed publishing API

POST /v1/me/feed
Params:
• content: content is the text of the post.
• auth_token: it is used to authenticate API requests.

Newsfeed retrieval API

GET /v1/me/feed
Params:
• auth_token: it is used to authenticate API requests.

Feed publishing

在这里插入图片描述

Newsfeed building

在这里插入图片描述

Step 3 - Design deep dive

Feed publishing deep dive

在这里插入图片描述
Fanout service
Pros:
• The news feed is generated in real-time and can be pushed to friends immediately.
• Fetching news feed is fast because the news feed is pre-computed during write time.
Cons:
• If a user has many friends, fetching the friend list and generating news feeds for all of them are slow and time consuming. It is called hotkey problem.
• For inactive users or those rarely log in, pre-computing news feeds waste computing resources.

Fanout on read.

Pros:
• For inactive users or those who rarely log in, fanout on read works better because it will not waste computing resources on them.
• Data is not pushed to friends so there is no hotkey problem.
Cons:
• Fetching the news feed is slow as the news feed is not pre-computed.

在这里插入图片描述
The memory consumption can become very large if we store the entire user
and post objects in the cache. Thus, only IDs are stored.
Most users are only interested in the latest content, so the cache miss
rate is low.
在这里插入图片描述

Cache architecture

在这里插入图片描述

Step 4 - Wrap up

Scaling the database:
• Vertical scaling vs Horizontal scaling
• SQL vs NoSQL
• Master-slave replication
• Read replicas
• Consistency models
• Database sharding
Other talking points:
• Keep web tier stateless
• Cache data as much as you can
• Support multiple data centers
• Lose couple components with message queues
• Monitor key metrics. For instance, QPS during peak hours and latency while users
refreshing their news feed are interesting to monitor.

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

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

相关文章

《红警3》因计算机中丢失d3dx9_35.dll无法打开游戏怎么办?最新解决方法推荐

d3dx9_35.dll 是 DirectX 9.0c 的一部分,它是一个动态链接库 (DLL),包含了许多用于支持 DirectX 9.0c 功能的函数和类。DirectX 是一种由微软开发的游戏和多媒体应用程序编程接口,它提供了许多功能,如 3D 图形、音频、输入等&…

电子器件系列55:lm339比较器

以这个比较器为例 电压比较器可以看作是放大倍数接近“无穷大”的运算放大器。 电压比较器的功能:比较两个电压的大小(用输出电压的高或低电平,表示两个输入电压的大小关系): 当””输入端电压高于”-”输入端时,电压…

阿里巴巴中国站获得1688商品详情 API 返回值说明

1688商品详情API接口可以获得1688商品详情原数据。 这个API接口有两种参数,公共参数和请求参数。 公共参数有以下几个: apikey:这是您自己的API密钥,可以在1688开发者中心获取。 请求参数有以下几个: num_iid&…

115V/400Hz 中频交流航空电源系统测试负载箱

中频交流航空电源系统测试负载箱主要面向战斗机、教练机以及民航飞机的生产及使用单位,用于对航空电源系统(28V低压直流电源系统、270V/540V高压电源系统和115V/230V三相400HZ交流电源系统)进行维护测试、功能性验证、可靠性负载试验。 系统加…

uni-app:实现图片周围的图片按照圆进行展示

效果 代码 <template><view class"position"><view class"circle"><img src"/static/item1.png" class"center-image"><view v-for"(item, index) in itemList" :key"index" class&q…

通俗讲解MobileNet-v1/v2/v3网络

MobileNet网络是由google团队在2017年提出的&#xff0c;专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统卷积神经网络&#xff0c;在准确率小幅降低的前提下大大减少模型参数与运算量。(相比VGG16准确率减少了0.9%&#xff0c;但模型参数只有VGG的1/32)。MobileNet网络…

智慧电力平台打造无人值守配电房、变电所

随着科技的发展&#xff0c;电力行业也在不断进步。为了提高电力供应的可靠性和效率&#xff0c;智慧电力平台应运而生。通过智慧电力平台&#xff0c;打造无人值守配电房和变电所成为行业趋势。 一、无人值守配电房和变电所的概念 无人值守配电房和变电所是指通过数字化、…

夜莺启动时报dialector() not supported

sudo nohup /opt/n9e/n9e &>> /opt/n9e/n9e.log &启动的时候&#xff0c;ss -tlnp|grep 17000查看一下监控端口状态&#xff0c;发现提示的信息是[1] Exit 1 sudo nohup /opt/n9e/n9e &>> /opt/n9e/n9e.log&#xff0c;这表明没有正常启动。 原来以为…

linux系统中通过docker安装python包

前提 已经安装docker 已经安装python,python镜像是jetz_python3.7.13 1、将需要安装的python包都写入txt文件中 2、拷贝文件 (1)、通过已安装的python包找到python安装路径 首次安装镜像后,容器启动,进入容器中 docker run -it --name py37 jetz_python3.7.13 /bin/ba…

C语言连接MySQL并执行SQL语句(hello world)

1.新建一个控制台项目 参考【VS2022 和 VS2010 C语言控制台输出 Hello World】VS2022 和 VS2010 C语言控制台输出 Hello World_vs2022源文件在哪_西晋的no1的博客-CSDN博客 2.安装MySQL 参考【MySQL 8.0.34安装教程】MySQL 8.0.34安装教程_西晋的no1的博客-CSDN博客 3.复制MySQ…

【2-SAT】【前缀和优化建图】【ICPC网络赛第二场】C. Covering

题目 思路 对于限制2&#xff0c;可以发现&#xff0c;如果 i i i 不选&#xff0c;那么 i − 1 i-1 i−1 和 i 1 i1 i1 就一定要选&#xff0c;2-SAT可以很好地解决 对于限制1&#xff0c;其实就是把 i i i 分成了若干个集合&#xff0c;每个集合只能选1个点。但如果用…

2、SpringBoot_依赖介绍

三、SpringBoot介绍 1.parent 前言&#xff1a;之前是使用spring/springmvc 开发&#xff0c;整合不同的组件会有很多依赖&#xff0c;这些依赖会涉及到很多的版本信息&#xff0c;版本信息多了之后可能会导致版本冲突问题概述&#xff1a;把很多组件技术的搭配放到一起&…

ruoyi-vue项目的打包、与运行

ruoyi-vue项目的打包、与运行 打包打包后文件&#xff0c;及其运行 打包 打包后文件&#xff0c;及其运行 注意&#xff1a;要&#xff08;带配置&#xff09;打开redis redis-server.exe redis.windows.conf

细胞机器人系统的概念

摘要 本文讨论了一种新型机器人系统的理论和工程的概念基础。该系统由协作完成任务的自主机器人单元组成。本文在描述了该系统与细胞自动机和神经网络的相关性和差异后&#xff0c;建立了该系统的基础属性及其对机器人单元结构的影响、它们操作的空间以及它们完成全局任务的算法…

SPA项目的登录注册实现,post/get请求以及跨域问题

目录 前言 一. 登录&#xff0c;注册静态页面 1.1 ElementUI简介 1.2 基于SPA项目完成登录 1.2.1 在SPA项目中添加elementui依赖 1.2.2 在main.js中添加elementui模块 1.2.3 在src目录下创建views目录&#xff0c;用于存放vue组件 1.2.4 配置路由 1.2.5 修改项目端口并启…

企业如何实现设备管理数字化?企业有什么办法做到降本增效?

随着时代的发展&#xff0c;科学技术的进步以及自动化水平的不断提高&#xff0c;设备的维护保养成为日常工作中不可或缺的事项。但是&#xff0c;许多工作人员对于设备操作和保养规程的不熟悉&#xff0c;导致误操作、保养不到位或不能及时发现设备故障隐患等情况的大量出现。…

【vue】利用axios发送请求

这里写目录标题 一、项目环境配置二、利用axios发送POST请求登录三、异步实现&#xff1a;利用axios发送POST请求登录&#xff08;json&#xff09;四、异步实现&#xff1a;利用axios发送POST请求登录&#xff08;表单&#xff09;五、token存储六、token使用七、全局的axios配…

基于springboot地方废物回收机构管理系统springboot11

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

2023-9-25 排队打水

题目链接&#xff1a;排队打水 #include <iostream> #include <algorithm>using namespace std;typedef long long LL;const int N 100010;int n; int t[N];int main() {scanf("%d", &n);for(int i 0; i < n; i ) scanf("%d", &t…

服务接口调用OpenFeign_入门案列

构建cloud-consumer-feign-order80工程 修改POM文件 <!-- 引入OpenFeign依赖 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>编写YML文件…