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:424221
用户头像

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

关注

评论

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

爱奇艺奇秀直播的秒播体验优化实践

爱奇艺技术产品团队

直播 优化

Ubuntu Server 20.04搭建zookeeper集群

玏佾

zookeeper 群集安装 搭建 zk 集群部署

Linkflow CDP亮相GDMS全球数字营销峰会

Linkflow

CDP 用户画像 数字营销

Demo

Command

#架构实战营

模块八 - 设计消息队列存储消息数据的 MySQL 表格

华仔架构训练营

爱奇艺多语言台词机器翻译技术实践

爱奇艺技术产品团队

机器翻译 nlp 模型 BERT

边界防御·信息安全保密圈的 “丈八蛇矛”

郑州埃文科技

如何科学地系统地梳理出CDP的RFP?

Linkflow

Hive 原理实践

云祁

大数据 hive 7月日更

百度程序员推荐的书籍,今天免费送!

百度Geek说

深入浅出 Gitalk 留言插件

悟空聊架构

开源 网站 7月日更 网站建设 留言

隔壁工程师都馋哭了我的逆向工程IDA,说要给我搓背捏脚

网络安全学海

网络安全 信息安全 渗透测试 漏洞分析 逆向工程

hive的安装部署

大数据技术指南

hive 7月日更

2021世界人工智能大会开幕 百度飞桨荣获“SAIL之星”奖项

百度大脑

人工智能 飞桨

通过Linux实现更好的即时通讯传递

BeeWorks

阅读

网络攻防学习笔记 Day69

穿过生命散发芬芳

网络攻防 7月日更

生命科学领域新工具:北鲲云超算平台,梦启航的地方

北鲲云

pha挖矿系统源码开发

获客I3O6O643Z97

区块链+ PHA矿机挖矿 PHA质押挖矿

为什么公司应该效仿开源的文化

BeeWorks

2021年度“CCF-百度松果基金” 百度携手CCF为AI科研提供资金支持

百度大脑

人工智能 百度 松果基金

平安社区建设,潍坊智慧平安社区建设解决方案

GIS可视化框架:更便捷的地图数据可视化工具

鲸品堂

GIS 可视化 应用场景

Hive窗口函数保姆级教程

五分钟学大数据

hive 7月日更

对象存储手把手教二 | Bucket 跨区域容灾和用户数据复制

QingStor分布式存储

云原生 对象存储 分布式存储 云存储

突破AI工业化瓶颈,专业数据服务平台化是关键

澳鹏Appen

人工智能 机器学习 数据标注 训练数据 标注平台

自建开发工具系列-Webkit内存动量监控UI(一)

Tim

FrontEnd 调试工具 Webkit 工具UI

第一周作业-对比不同公司产品招聘JD

小夏

产品经理训练营 邱岳

图像直方图反向投影,Python OpenCV 取经之旅第 28 天

梦想橡皮擦

7月日更

从零开始学习3D可视化之摄像机

ThingJS数字孪生引擎

大前端 可视化 数字孪生

《面试八股文》之kafka21卷

moon聊技术

kafka 面试

bzz分币挖矿系统开发需求

获客I3O6O643Z97

区块链+ BZZ节点矿池 BZZ节点挖矿

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