2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Facebook Messenger 弃用拉模式,改用基于推模式的快照 - 增量模型

  • 2014-10-24
  • 本文字数:1045 字

    阅读完需:约 3 分钟

Facebook Messenger 是 Facebook 官方发布的即时聊天应用,类似于手机短信应用,允许用户在手机上向 Facebook 上或者手机通讯录中的好友免费发送信息。去年开始,Facebook 尝试为 Messenger 构建“移动优先(Mobile First)”的用户体验。近日,Facebook 官方博客发表了一篇文章,介绍他们的新同步协议及效果。

客户端

在原先的协议中,Messenger 通过拉模式获取数据。当有新消息时,它首先会收到一条有新数据可用的通知。之后,它会向服务器发送一个复杂的HTTPS 查询请求,并接收一个很大的JSON 响应。

在新协议中,Facebook 改用一种基于推模式的快照- 增量模型。在这个模型中,客户端会首先检索一个消息快照,然后订阅增量更新。当有新消息时,客户端会接收到通过 MQTT 协议推送的增量更新。这样,它无需再次发起 HTTPS 请求,就可以快速展示最新的消息视图。

此外,他们认为,用 JSON 格式在线传递消息及增量更新不够高效,于是便用 Thrift 代替了 JSON。这使其网络有效负载降低了大约 50%。

服务器端

通常,消息数据都存储在旋转磁盘上。在拉模式中,在通知 Messenger 发送查询请求从磁盘读取数据之前,要先将数据写入磁盘。这样,同一个存储层既要存储实时消息又要存储完整的对话历史。这种方式无法满足新开发的同步协议。他们需要将同样的更新序列以用户为单位实时并行地发送到 Messenger 应用和存储层。

于是,他们开发了 Iris。这是一个消息更新的全序队列,它有两个单独的指针,分别指向最近发送给 Messenger 应用的更新和最近发送到传统存储层的更新。当消息成功发送到手机或磁盘时,相应的指针就会向前移动。当手机离线时,相应的指针就会停在原处,而新消息仍然可以进入队列,其它指针正常移动,反之亦然。这样,Messenger 应用和传统存储层就能以各自的速率进行同步,互不影响。

实际上,该队列基于时间实现了一个三层存储模型:

  • 最新消息从 Iris 的内存立即发送给 Messenger 应用和磁盘存储层
  • 一周内的消息存储在队列的后台存储中
  • 更早的对话历史和完整的收件箱快照则由传统磁盘存储层提供

另外,在综合考虑了扩展性、可靠性、速度和灵活性后,他们最终选择基于 MySQL 和闪存实现了 Iris 的后台存储,并使用了 MySQL 的半同步复制功能。

效果

新同步协议使非媒体数据减少了 40%。而通过减少网络阻塞,用户消息发送失败的情况减少了大约 20%。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-10-24 01:424269
用户头像

发布了 1008 篇内容, 共 447.3 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

【教程】任务管理(高级)打造完整的项目管理平台

NocoBase

开源 项目管理 低代码 教程 任务管理

如何成功养成一个TikTok账号?

Ogcloud

TikTok tiktok运营 TikTok养号 tiktok起号

出海电商的关键:原生IP的重要性解析

Ogcloud

海外原生IP 海外IP 海外直播IP 原生IP 海外IP代理

非凸科技荣获2024“创·在上海”国际创新创业大赛优胜企业奖

非凸科技

不愧是字节跳动,今年这薪资...属实羡慕了!

程序员高级码农

Java 程序员 java面试 字节 Java面试题

HarmonyOS NEXT基础入门

flfljh

2024年用户喜爱的Top5云电脑排名!没想到黑马是这家

三掌柜

测评对比

职场办公常用的5款AI软件,每一个都值得推荐!

职场工具箱

效率工具 办公软件 AI软件 AIGC AI生成PPT

鸿蒙Flutter性能调优之性能分析定界

flfljh

harmony_flutter_FlutterEngineGroup

flfljh

Topaz Video AI for Mac 强大的视频增强与修复工具

小玖_苹果Mac软件

OmniPlan Pro 4 for Mac:强大的项目管理工具

小玖_苹果Mac软件

Ableton Live 11 Suite for Mac 强大的音乐创作与表演工具

小玖_苹果Mac软件

观测云亮相 Doris Summit,展示流式聚合创新技术

观测云

数据库性能优化

从单一领域到系统级仿真与优化:Altair在消费电子产品设计中的应用

Altair RapidMiner

制造 仿真 altair Hypermesh jabra

鸿蒙Flutter怎样调试dart代码

flfljh

优化永不止步:TinyVue v3.20.0 正式发布,更美观的官网UI,更友好的文档搜索,更强大的主题配置能力~

OpenTiny社区

组件库 OpenTiny 前端开源

CosyVoice 2.0 支持双向流式语音合成;无问芯穹开源全模态理解端侧模型丨RTE 开发者日报

RTE开发者社区

被裁后,狂刷大牛分享的607页JUC源码分析笔记,立马拿蚂蚁offer

程序员高级码农

Java 源码 程序员 java面试 Java后端

Aseprite for Mac 专业的像素艺术与动画制作工具

小玖_苹果Mac软件

harmony_flutter_udid

flfljh

鸿蒙+next+封装轻量级缓存工具PreferencesUtil

flfljh

鸿蒙基础入门01

flfljh

江苏省推出人工智能通识课,和鲸Heywhale重磅上线课程+平台+资源一体化解决方案

ModelWhale

Python 人工智能 大数据 AI

Capture One Studio for Mac中文直装 专业RAW照片处理软件

小玖_苹果Mac软件

关键帧动画

flfljh

Bartender 5 for Mac智能管理菜单栏的神器

小玖_苹果Mac软件

快速记笔记软件SideNotes for mac 1.4.15激活版

小玖_苹果Mac软件

鸿蒙Flutter环境相关问题解决方法

flfljh

如何理解符号引用和直接引用?

王磊

Capture One 23 Pro for Mac专业RAW照片处理利器

小玖_苹果Mac软件

Facebook Messenger弃用拉模式,改用基于推模式的快照-增量模型_Meta_谢丽_InfoQ精选文章