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

news2024/10/1 1:20:20

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

先来说一下业务需求吧:

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

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

发送朋友圈的流程

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

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

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

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

在这里插入图片描述

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

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

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

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

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

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

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

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

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

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

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

相关文章

Springboot项目启动报错:Command line is too long问题解决

启动项目报错:Error running ‘xxxxxxxx’: Command line is too long. Shorten command line for ‘xxxxxxxx’ or also for Application default configuration 方法一 点击提示中的:default:然后在弹出窗口中选择:JAR xxxx xxx&#xff0…

搭建k8s集群实战(一)系统设置

1、架构及服务 Kubernetes作为容器集群系统,通过健康检查重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失效状态自动在其他Node拉起Pod,实现了应用层的高可用性。 …

手势识别MATLAB代码

手势识别是智能设备常用的需求, 下面我们用MATLAB来识别手部的形态: 主程序main.m clc;clear all;close all;%清除命令行和窗口 imimread(DSC05815.JPG); [skin,bwycbcr,w,h] hand_segmentation(im); im1bwycbcr; % se strel(ball,[1 1 1;1 1 1;1 1 1]); im1 imdilate(im…

HarmonyOS鸿蒙学习笔记(22)@Builder实战

Builder标签是一种更轻量的UI元素复用机制,下面通过一个简单的例子来具体说明: 比如如下布局效果:上面是一个轮播的Swiper,下面是一个Grid 布局代码如下: build() {Navigation() {Scroll() {Column({ space: CommonConstants.CO…

html+css浮动小练习

以下是代码&#xff1a; <!DOCTYPE html> <!-- 2024.1.23 --> <html lang"en"> <head><meta charset"UTF-8"><title>浮动布局练习</title><style>.leftfix{float: left;}.rightfix{float:right;}/* 问题…

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),…

如何进行H.265视频播放器EasyPlayer.js的中性化设置?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

HTML 入门手册(二)

目录 HTML 入门手册(一) 10-表单 11-input标签 11.1文本框 (text) 11.2密码框 (password) 11.3单选按钮 (radio) 11.4复选框 (checkbox) 11.5普通按钮 11.6提交按钮 (submit) 11.7重置按钮 (reset) 11.8隐藏域 (hidden) 11.9文件上传 (file) 11.10数字输入 (numbe…

Power Apps 向Power Automate传一个数组参数

Power Apps传Power Automate数组参数 背景Power Apps传参方法画布开发我们现在power apps中设置一个集合**ArrCollect**准备一个按钮 Power Automate接收总结画布流 背景 我们通常会从Power Apps界面传递参数给Flow中&#xff0c;但是很多时候仅仅是一个字符串类型的已经不适用…

超融合系统疑难故障定位与解决实践 3 例(含信创技术栈)

当 IT 系统出现故障&#xff0c;问题定位往往是运维人员最头疼的环节。尤其是超融合系统&#xff0c;由于整体涉及的技术栈比较复杂&#xff0c;且有越来越多的用户基于信创环境进行部署&#xff0c;非常考验厂商和技术人员的专业能力&#xff1a;厂商研发和售后工程师不仅应能…

web安全学习笔记【07】——非http\https抓包

#知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&flutter…

2024年了你还在用百度翻译?手把手教会你使用AI翻译!一键翻译网页和PDF文件!

一些结论 沉浸式翻译是一款免费的AI驱动的双语网页翻译扩展工具。 主要功能包括&#xff1a;一键网页翻译&#xff0c;PDF翻译&#xff0c;输入框翻译&#xff0c;鼠标悬停翻译等多种翻译场景。 目前核心功能均免费使用。 沉浸式翻译是什么&#xff1f; 沉浸式翻译是一款免费的…

低噪声放大器LNA 之 噪声系数

​ 一、噪声系数的定义 在定义噪声系数之前&#xff0c;先看一个放大器输入输出端信噪比&#xff08;信号功率与噪声功率之比&#xff0c;写作SNR&#xff09; 对比图&#xff1a; ​​从上图可用看出&#xff0c;从输入端到输出端&#xff0c;信号和噪声功率都得到了放大&…

5G网络变压器应用领域

5G网络变压器在多个应用领域发挥着重要作用。以下是一些主要的应用领域&#xff1a; 1. **通信基站&#xff1a;** 5G网络变压器在通信基站中扮演关键角色。它们用于转换电力&#xff0c;确保通信基站设备的正常运行。稳定的电力供应对于保障高速、高频率的5G通信至关重要。 …

计算机网络-以太网链路聚合简介

一、网络可靠性是什么&#xff1f; 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力。 实际工作中网络需要保证可靠性&#xff0c;实现冗余设计。会从三个层次实现&#xff1a; 链路冗余 单板冗余 整机设备冗余 网络的可靠性指当设备或者链路出现…

【操作系统】实验三 编译 Linux 内核

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

《WebKit 技术内幕》学习之十二(1):安全机制

第12章 安全机制 安全机制对于浏览器和渲染引擎来说至关重要。一个不考虑安全机制的HTML5规范体系肯定不会受到广泛地使用&#xff0c;同时一个不安全的浏览器也不会得到广大用户的青睐。本章介绍的安全机制分成两个不同的部分&#xff0c;第一个部分是网页的安全&#xff0c;…

EVRPD-44U电机保护器参数设置您了解了么?

EVRPD-44U电机保护器是一款用于电动机保护的设备&#xff0c;其产品参数设置如下&#xff1a; 额定电流&#xff1a;EVRPD-44U电机保护器的额定电流为5-80A&#xff0c;可以根据实际负载电流进行选择。启动时间&#xff1a;电机保护器的启动时间可以通过设置菜单进行修改&…

动态规划解决马尔可夫决策过程

马尔可夫决策过程是强化学习中的基本问题模型之一&#xff0c;而解决马尔可夫决策过程的方法我们统称为强化学习算法。 动态规划&#xff08; dynamic programming, DP &#xff09;具体指的是在某些复杂问题中&#xff0c;将问题转化为若干个子问题&#xff0c;并在求解每个子…

实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景 在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理&#xff0c;个人感觉word文档中由于包含大量样式信息&#xff0c;批处理时总感觉有顾虑。一者担心影响了文档的格式&#xff0c;误修改了文档的样式&#xff0c;那后果……