【面试突击】微信亿级朋友圈的社交系统设计

微信亿级朋友圈的社交系统设计

先来说一下业务需求吧:

  • 每个用户可以发朋友圈,可以点赞,评论
  • 可以设置权限,不看某些人朋友圈、不让某些人看你的朋友圈
  • 可以刷朋友圈中其他人的动态

对于这样的系统设计,主要从业务来考虑如何设计,比如不能让用户等太久,那么从哪些方面可以优化速度,这些思想在所有的系统设计中都是 通用

发送朋友圈的流程

一般发送朋友圈是一段文字 + 几张图片或者视频,那么如果视频和图片较大,上传是比较慢的,如果等上传到服务器之后再返回用户成功,那用户可能要等 2-3 秒,界面一直在转圈,用户肯定会感到很难受哈

因此点击发送朋友圈的操作,要设计成异步的,点击发送之后,先将数据保存在本地缓存里,再通过异步操作将数据上传服务器,保存在本地成功后,就可以返回用户发布成功了,再异步的向服务器上传即可

那么如果不保存在本地,也可以将视频和图片就近上传到 CDN 中(当然也可以先保存在本地,再上传到 CDN 中),传到 CDN 的话也是很快的,之后再将发送请求到服务端,包括图片的 CDN 地址、视频的 CDN 地址、文字内容,并且将朋友圈的权限给写到朋友圈的发布表中去

之后,再通过离线的批处理(后台处理)将你刚刚发布的朋友圈给写入到好友的时间线表中,让好友也可以刷到你发布的朋友圈

在这里插入图片描述

那么还有朋友圈的权限设置,比如不让某人看,或者不看某些人,这些权限肯定是要缓存在本地的,而且权限的数据符合写少读多的特性的,用缓存来做很合适,如果你的好友的朋友圈权限设置发生了变化,那么可以发送一个通知,将你和好友的本地缓存都更新成新的数据

那么每次你刷新朋友圈,会根据你和好友的朋友圈的权限结合起来进行判断,看你是否有权限看到这条朋友圈

高并发的朋友圈点赞系统架构

点赞功能:可以点赞,可以取消点赞

基于 Redis 来设计点赞系统就可以,微信的朋友圈点赞和评论只有好友之间才可以看到的

每个朋友圈动态都在 Redis 中通过 set 集合来存放谁来给你点赞了,这样点赞的人和数量都可以从 redis 中直接获取,使用 smembers 和 scard 命令

那么你的朋友圈被 A 点赞了,B和你俩也是好朋友,那么 B 刷到你的朋友圈时,对你和 B 的共同好友通过 sismember A 来判断 A 是否给这条朋友圈点赞了,将共同好友的点赞给展示出来

对于评论的话,存在表中,也是将共同好友的评论给展示出来即可

如果是重复点赞其实也没有关系,在 Redis 的 set 中本来就会去重,因此不会出现重复点赞的情况

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

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

相关文章

uniapp css样式穿透

目录 前言css样式穿透方法不加css样式穿透的代码加css样式穿透的代码不加css样式穿透的代码 与 加css样式穿透的代码 的差别参考 前言 略 css样式穿透方法 使用 /deep/ 进行css样式穿透 不加css样式穿透的代码 <style>div {background-color: #ddd;} </style>…

用这个技术管理备用电源!同事下巴都惊掉了!

在当今社会&#xff0c;电力供应的可靠性对各个行业的正常运行至关重要。而蓄电池作为备用电源的重要组成部分&#xff0c;其性能和状态的稳定管理成为保障电力系统稳定性的关键环节。 因此&#xff0c;为了有效监测和管理蓄电池&#xff0c;蓄电池监控系统应运而生。 客户案例…

智能机器人与旋量代数(12)

Chapt 4. 旋量代数在机器人学中的应用 4.1 串联机器人正运动学的指数积(PoE, Product of Exponetial)公式 4.1.1 回顾&#xff1a;机器人正运动学的Denavit-Hartenberg (D-H)参数公式 D-H 建模法: D-H 建模方法是由 Denavit 和 Hartenberg (ASME, 1955) 提出的一种建模方法&…

如何高效挖掘Web漏洞?

简介 SRC漏洞平台&#xff1a;安全应急响应中心&#xff08;SRC, Security Response Center&#xff09;&#xff0c;是企业用于对外接收来自用户发现并报告的产品安全漏洞的站点。说白了&#xff0c;就是连接白帽子和企业的平台&#xff0c;你去合法提交漏洞给他们&#xff0…

Leetcode—24. 两两交换链表中的节点【中等】

2023每日刷题&#xff08;八十七&#xff09; Leetcode—24. 两两交换链表中的节点 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x),…

Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

目录 一.redis的发布订阅 1、什么 是发布和订阅 2、Redis的发布和订阅 3、发布订阅的代码实现 二.Redis事务 1.事务简介 1、在事务执行之前 如果监听的key的值有变化就不能执行 2、在事务执行之前 如果监听的key的值没有变化就能执行 3、Exec之前就出现错误 4、Exec之…

Centos7 两种方式安装 MySQL5.7 步骤 yum 、本地 tar 文件

一、使用 yum 源方式安装 1、卸载系统自带 mariadb MariaDB Server 是最流行的开源 关系型数据库 之一。它由 MySQL 的原始开发者制作&#xff0c;并保证保持开源。 在 CentOS 7 中默认安装有 MariaDB 可忽略&#xff0c;安装完成之后可以直接覆盖掉 MariaDB。 查看并卸载系统…

【极数系列】Flink项目入门搭建(03)

【极数系列】Flink项目入门搭建&#xff08;03&#xff09; 引言 gitee地址&#xff1a;https://gitee.com/shawsongyue/aurora.git 源码直接下载可运行&#xff0c;模块&#xff1a;aurora_flink Flink 版本&#xff1a;1.18.0 Jdk 版本&#xff1a;11 1.创建mavenx项目 2.…

清越 peropure·AI 国内版ChatGP新功能介绍

当OpenAI发布ChatGPT的时候,没有人会意识到,新一代人工智能浪潮将给人类社会带来一场眩晕式变革。其中以ChatGPT为代表的AIGC技术加速成为AI领域的热门发展方向,推动着AI时代的前行发展。面对技术浪潮,清越科技(PeroPure)立足多样化生活场景、精准把握用户实际需求,持续精确Fin…

SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1. 分页获取预约数据代码2.保存预约信息代码3.修改订单状态代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的充电桩管理系统。首先&…

网络安全的使命:守护数字世界的稳定和信任

在数字化时代&#xff0c;网络安全的角色不仅仅是技术系统的守护者&#xff0c;更是数字社会的信任保卫者。网络安全的使命是保护、维护和巩固数字世界的稳定性、可靠性以及人们对互联网的信任。本文将深入探讨网络安全是如何履行这一使命的。 第一部分&#xff1a;信息资产的…

怎么给wordpress网站底部页脚添加备案号和链接?

以前“WordPress后台 >> 常规”最底部是有一个ICP备案号的&#xff0c;我们只需要填写备案号并保存更改即可让WordPress自带主题底部显示ICP备案号&#xff0c;但是现在新版本的WordPress已经没有了这个ICP备案号选项&#xff0c;而且也无法直接添加公安联网备案号&#…

Typecho后台无法登录显示503 service unavailable问题及处理

一、Typecho 我的博客地址&#xff1a;https://www.aomanhao.top 使用老薛主机动态Typecho博客框架handsome主题的搭配&#xff0c;文章内容可以异地网页更新&#xff0c;可以听后台背景音乐&#xff0c;很好的满足我的痛点需求&#xff0c;博客部署在云端服务器访问响应较快…

单调栈笔记

单调栈 1.每日温度2.下一个更大元素 I3.下一个更大的元素4.接雨水5.柱状图中最大的矩形 单调栈正如其名字&#xff0c;用一个栈&#xff08;能够实现栈性质的数据结构就行&#xff09;来存储元素&#xff0c;存储在栈中的元素保持单调性&#xff08;单调递增或者是单调递减&…

信息检索与数据挖掘 | (十)线性回归与逻辑回归

文章目录 &#x1f4da;线性回归算法流程&#x1f4da;Bias and variance&#x1f4da;过拟合&欠拟合&#x1f4da;逻辑回归算法流程 &#x1f4da;线性回归算法流程 ybwx 使用loss function L来评估函数的好坏 从而我们要选择使L最小的模型参数w,b 使用梯度下降的方法…

JAVA 学习 面试(六)数据类型与方法

数据类型 基本数据类型 为什么float3.4报错 3.4 默认是浮点double类型的&#xff0c;如果赋值给float是向下转型&#xff0c;会出现精度缺失&#xff0c;&#xff0c;需要强制转换 Switch支持的数据类型&#xff1f; byte、short、int、char 、 enum 、 String 基本类型与包…

trino-435: trino接入TIDB数据源

文章目录 一、TIDB介绍二、TIDB源接入流程三、遇到的错误1、数据源注册:2、查询表数据一、TIDB介绍 二、TIDB源接入流程 三、遇到的错误 1、数据源注册: http://localhost:8080/v1/catalog/register?name=tidb_test {"connector.name":"tidb",&quo…

SpringBoot整合QQ邮箱发送验证码

一、QQ开启SMTP 打开QQ邮箱&#xff0c;点击设置&#xff0c;进入账号&#xff0c;往下滑后&#xff0c;看见服务状态后&#xff0c;点击管理服务 进入管理服务后&#xff0c;打开服务&#xff0c;然后获取授权码 二 、导入依赖 <!-- 邮箱--><dependency>&…

php低版本(7.4)配置过程中遇到的问题及基本解决手段

目前php不支持较低版本的安装&#xff0c;如果安装低版本必须借助第三方库shivammathur //将第三方仓库加入brewbrew tap shivammathur/php //安装PHPbrew install shivammathur/php/php7.4 可能出现的问题 像这样突然中止然后报错&#xff0c;一般是网络问题&#xff0c;或…

Random Sprays Retinex 传统的图像增强算法RSR

文章目录 前言1、Random Sprays Retinex 概况2、Random Sprays Retinex 具体实现2.1、喷雾的生成2.2、径向密度函数的确定2.3、像素的选择2.4、亮度的计算2.5、参数的调整 3、Random Sprays Retinex 算法效果的表现4、Random Sprays Retinex 现存的问题 前言 Random Spray Reti…