在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

每日一题:LeetCode-227. 基本计算器 II

Geek_4z9ami

Go 面试 算法 LeetCode

【第七在线】智能商品计划可以帮助鞋服企业做什么?

第七在线

HTTP 和 HTTPS 的比较

Liam

程序员 前端 https 后端 HTTP

PCB阻抗设计12问,轻松带你搞懂阻抗!

华秋电子

奋发向前展华章 秋光熠熠映朝阳 ——华秋2023年度关键词“发展”

华秋电子

每个程序员都应该知道的 8 大算法

不在线第一只蜗牛

c++ Python 算法

云上成本贵,用tidb

TiDB 社区干货传送门

7.x 实践

软件测试开发/全日制丨Python 常用第三方库 yaml 学习笔记

测试人

Python 软件测试 yaml 测试开发

XSKY SDS 产品率先获得 OceanBase V4 新版本认证

XSKY星辰天合

Kafka Streams概述

FunTester

工作会议:更适合中国宝宝体制的party

伤感汤姆布利柏

垂直领域大模型——文档图像大模型的思考与探索

陈橘又青

人工智能 文档识别 智能文字识别技术

企业数字化转型:1个核心、2种力量、3个关键点、4大转型、5大平台

天津汇柏科技有限公司

数字化转型

TiDB忘记了root密码?教你一招搞定

TiDB 社区干货传送门

7.x 实践

论文《TiDB:A Raft-based HTAP Database》阅读感悟

TiDB 社区干货传送门

TiKV 底层架构

Curve Code Camp·金秋篇顺利结营

OpenCurve

开源 网易 分布式文件存储 开源社区 开发者福利

如何为 TiDB 文档提交第一个 PR

TiDB 社区干货传送门

实践案例

澜起科技推出支持7200 MT/s速率的DDR5第四子代RCD芯片

财见

如何处理预防XSS漏洞攻击问题

德迅云安全杨德俊

CDN xss攻击 网站安全

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