写点什么

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

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

关注

评论

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

优化mac储存空间的方法 解决苹果电脑不流畅卡顿

阿拉灯神丁

Mac 软件 存储空间 CleanMyMac X 激活码生成器 苹果软件

心诺安 x TapData:快速搭建云中数仓,助力电商企业实施“以用户为中心的”精细化运营

tapdata

数据库

Cockos Reaper for Mac(专业数字音频制作软件)v7.16激活版

iMac小白

新规:互联网政务应用安全管理规定将于7月1日正式执行

行云管家

互联网 政务

如何清理mac磁盘?快速清理小妙招在这里

阿拉灯神丁

软件 Mac 软件 电脑 CleanMyMac X

容器网络实现(中):为容器插上”网线“

EquatorCoco

php 容器 网络

实时数据驱动电站管理,EMQX 助力黑马高科光伏电站运维监控

EMQ映云科技

mqtt 光伏发电 emqx 新能源行业 mqtt broker

Flink⼤状态作业调优实践指南:Flink SQL 作业篇

Apache Flink

大数据 flink flink sql

【AI应用开发全流程】使用AscendCL开发板完成模型推理

华为云开发者联盟

华为云 开发板 昇腾 华为云开发者联盟 企业号2024年6月PK榜

即时通讯技术文集(第39期):推送技术合集(Part1) [共18篇]

JackJiang

即时通讯;IM;网络编程

Mock 工具使用 - 模拟弱网测试

霍格沃兹测试开发学社

OpenAI 发布的 GPT-4o是什么,有什么功能?

蓉蓉

openai gpt4o

Master-Worker 架构的灰度发布难题

阿里技术

架构 分布式 master Master-Worker Master-Worker 架构

堡垒机审计日志的定义以及作用概述

行云管家

数字化 堡垒机 IT信息

碳实践|如何快速掌握组织碳核算中范围3的计算方法

AMT企源

数字化转型 双碳 碳管理 碳核算

接口测试 Mock 工具使用 - 弱网测试

测吧(北京)科技有限公司

测试

Sip for mac(强大的屏幕取色软件)v3.5.1激活版

iMac小白

开源鸿蒙的到来,鸿蒙生态该如何走向?

Geek_2305a8

数据库市场或迎变局 天翼云TeleDB打造企业数据管理最优解

Geek_2d6073

揭秘业务系统数据安全三大核心问题:“谁在用”、“用什么”和“怎么用”

极盾科技

数据安全

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