feed留,单聊群聊,系统通知,状态同步,到底是推还是拉?

2023-11-30 15:18

本文主要是介绍feed留,单聊群聊,系统通知,状态同步,到底是推还是拉?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天抛一个话题,根据业务现象,一起讨论其后端实现是推还是拉?

一、feed流

可以理解为一个发布订阅业务,典型业务是微博(朋友圈)。你关注了姚晨的微博,姚晨发布了消息,你的主页能看到她最新发布的消息,这个场景是推送,还是拉取呢?

画外音:微博是弱关系,关注无需对方同意,粉丝可以无上限;朋友圈是强关系,好友需要对方同意,好友个数有上线。

如果推送,姚晨发布消息的时候,要把消息ID投递到所有粉丝的主页消息队列里,推送量巨大。

如果拉取,一来主页消息无法实时更新,二来每次刷新动作非常复杂:

  1. 拉取你关注人的list<user_id>

  2. 拉取这些人的消息list<msg_id>

  3. 对于这些人的这些消息进行rank处理,例如按照时间排序

  4. 还无法对主页进行缓存,因为只要有关注人发布消息,主页内容就会变化

  5. 还得考虑“不看谁的消息”,以及“消息不给谁看”

  6. ...

是不是觉得有点烦?如果你是架构师,你会怎么做?

二、聊天消息

聊天消息又分为单聊群聊,典型的业务是微信。和朋友小窗沟通是单聊,群内扯淡是群聊。

单聊,很容易想到是服务器推送,但浏览器里的聊天工具JS只能使用http式的request - response协议,又能不能保证消息的实时性呢?

群聊,一个群500个人,有人在线,有人离线,到底是推送,还是拉取呢?

如果是推送,1条消息将转变为500条消息,系统压力会异常之大。

如果是拉取,消息的实时性又该如何保障呢?

还有一个坑爹的需求,“钉钉”的群聊天消息“已读回执”,这个需求简单描述是:对于每一条你发出的每一群消息,你能够看到,多少人已读,多少人未读。这个群消息已读回执,猜猜看,又是怎么实现的呢?

三、系统通知

系统消息听上去比较泛,典型的业务是QQ的登录广告弹窗,以及登录后的右下角广告提示

  • QQ每天首次登录后的新闻弹窗

拉取?第二次登录却又没有。

  • QQ运行过程中的QQ弹窗广告

推送?一次推送几千万条,会不会系统抖动?

或许,真实的实现方式或许与我们想的并不一样。

四、状态同步

玩桌面QQ时,收到过“你的好友XXOO登录了”的弹窗提示么?这是一个好友登录/登出状态的客户端同步。同理,群有500人,每个群友的在线/不在线状态又是怎么实现同步的呢?

推送?那一个用户登录退出都要推送N个好友?M个群友?

拉取?如何保证好友状态,群友状态的实时性?

画外音:好友/群友状态一致性是非常复杂的,移动的时代,索性引入“一律在线”的概念,微信的好友就不存在所谓“头像亮”和“头像灰”的概念了,客户端状态同步这一块复杂性有所降低。

看到产品功能,思考后面的技术实现,其实是很有意思的一件事。

究竟是推,还是拉?大伙怎么看。

还有其他业务场景的疑惑,也欢迎评论提问,有价值的问题,5月份逐条解答。

画外音:自从有了群消息已读回执,我再也不能装作不在线,领导的消息没看到了。

这篇关于feed留,单聊群聊,系统通知,状态同步,到底是推还是拉?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437530

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、