现代IM系统中聊天消息的同步和存储方案探讨

  • 时间:
  • 浏览:0

《移动端实时音视频直播技术详解(二):下发》

《如可用最简单的办法测试你的实时音视频方案》

>>更多类事文章 ……

《如可保证IM实时消息的“时序性”与“一致性”?》

[3] 有关IM/推送的心跳保活防止:

《扫盲贴:浅谈iOS和Android后台实时消息推送的原理和区别》

>>更多类事文章 ……

《不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)》

对于在线的用户,消息会直接实时同步到在线的接收方,消息同步成功后,暂且会进行持久化。而对于离线的用户机会消息无法实时同步成功时,消息会持久化到离线库,当接收方重新连接后,会从离线库拉取所有未读消息。当离线库中的消息成功同步到接收方后,消息会从离线库中删除。传统的消息系统,服务端的主要工作是维护发送方和接收方的连接情形,并提供在线消息同步和离线消息缓存的能力,保证消息一定不需要还可不上能从发送方传递到接收方。服务端不需要对消息进行持久化,就是有也无法支持消息漫游。

《LinkedIn的Web端即时通讯实践:实现单机几十万条长连接》

《IM消息送达保证机制实现(一):保证在线实时消息的可靠投递》

《缘何微信、QQ另一一个多多多多的IM工具不使用GCM服务推送消息?》

▲ 基于Timeline的消息存储模型

《简述开源实时音视频技术WebRTC的优缺点》

《不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)》

《即时通讯音视频开发(十):实时语音通讯的回音消除�技术详解》

《WebSocket详解(三):深入WebSocket通信协议细节》

《信鸽团队原创:一块儿走过 iOS10 上消息推送(APNS)的坑》

《通俗易懂:快速理解P2P技术中的NAT穿透原理》

《即时通讯音视频开发(十二):多人实时音视频聊天架构探讨》

消息同步模型会比消息存储模型稍复杂性或多或少,消息的同步一般有读扩散和写扩散四种 不同的办法,分别对应不同的Timeline物理模型。

本文原作者:木洛,阿里云高级技术专家,内容有删减和修订,感谢原作者。

《微信新一代通信安全防止方案:基于TLS1.3的MMTLS详解》

《浅谈开发实时视频直播平台的技术要点》

《一套原创分布式即时通讯(IM)系统理论架构方案》

《不为人知的网络编程(五):UDP的连接性和负载均衡》

>>更多类事文章 ……

以上是传统架构和现代架构的一一个多多多多简单的对比,现代架构上整个消息的同步和存储流程,并这麼变复杂性这麼来越多,否则其能实现多端同步以及消息漫游。现代架构中最核心的就是一个多多多多消息库『消息同步库』和『消息存储库』,是消息同步和存储最核心的基础。而本篇文章接下来的累积,总要围绕这些 个多多多多库的设计和实现来展开。

《高性能网络编程(三):下一一个多多多多10年,是前一天考虑C10M并发大大问题了》

▲ 基于Timeline的消息库设计

《声网架构师谈实时音视频云的实现难点(视频采访)》

《网易视频云技术分享:音频防止与压缩技术快速入门》

《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》

《即时通讯音视频开发(十六):移动端实时音视频开发的多少建议》

《即时通讯音视频开发(五):认识主流视频编码技术H.264》

《通俗易懂:基于集群的移动端IM接入层负载均衡方案分享》

>>更多类事文章 ……

《即时通讯安全篇(六):非对称加密技术的原理与应用实践》

《应用保活终极总结(二):Android6.0及以上的保活实践(应用应用程序运行防杀篇)》

>>更多类事文章 ……

《一一个多多多多低成本确保IM消息时序的办法探讨》

《一套海量在线用户的移动端IM下发实践分享(含完整篇 图文)》

《网络编程懒人入门(三):快速理解TCP协议一篇就够》

《一套海量在线用户的移动端IM下发实践分享(含完整篇 图文)》

《即时通讯音视频开发(九):实时语音通讯的回音及回音消除�概述》

《一一个多多多多基于长连接的安全可扩展的订阅/推送服务实现思路》

《移动端即时通讯协议选泽:UDP还是TCP?》

《IM群聊消息这麼复杂性,如可保证不丢不重?》

消息从发送方发出后,经过服务端转发,服务端会先将消息保存到消息存储库,后保存到消息同步库。完成消息的持久化保存后,对于在线的接收方,会直接选泽在线推送。但在线推送并总要一一个多多多多都要路径,就是一一个多多多多更优的消息传递路径。

《来自阿里OpenIM:打造安全可靠即时通讯服务的技术实践分享》

《理论联系实际:一套典型的IM通信协议设计详解(含安全层设计)》

《理论联系实际:一套典型的IM通信协议设计详解》

现代架构下,消息是先存储后同步:

《通俗易懂:一篇掌握即时通讯的消息传输安全原理》

《如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》

《即时通讯音视频开发(七):音频基础及编码原理入门》

4)不需要还可不上能为数据定义生命周期。

《不为人知的网络编程(六):深入地理解UDP协议并用好它》

《不为人知的网络编程(三):关闭TCP连接时为哪些会TIME_WAIT、CLOSE_WAIT》

《即时通讯音视频开发(六):如可开始音频编解码技术的学习》

《开源IM工程“蘑菇街TeamTalk”的现状:一场有始无终的开源秀》

《使用WebSocket和SSE技术实现Web端消息推送》

《新手快速入门:WebSocket简明教程》

[10] 更多即时通讯技术好文分类:

《请问一帮人知道语音留言聊天的主流实现办法吗?》

▲ 上图是消息系统传统架构与现代架构的简单对比

《高性能网络编程(一):单台服务器并发TCP连接数到底就否是多少》

《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》

《微信对网络影响的技术试验及分析(论文全文)》

《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解》

《实时通信RTC技术栈之:视频编解码》

《微信团队原创分享:Android版微信后台保活实战分享(应用应用程序运行保活篇)》

《即时通讯系统的原理、技术和应用(技术论文)》

[6] 有关IM安全的文章:

《即时通讯安全篇(二):探讨组合加密算法在IM中的应用》

《如可解读《微信技术总监谈架构:微信之道——大道至简》》

《应用保活终极总结(一):Android6.0以下的双应用应用程序运行守护保活实践》

本文主要介绍了现代IM系统中消息推送和存储架构的实现,基于逻辑的Timeline模型,亲戚亲戚亲戚亲戚朋友都不还可不上能很清晰明了的理解整个消息推送和存储的架构。而基于Timeline的消息存储和推送模型,觉得 不光都不还可不上能应用在IM消息系统中,还可应用在类事Feeds流、实时消息同步、直播弹幕等场景。

本文内容主要涉及IM系统中的消息系统架构,探讨四种 适用于大用户量的消息同步以及存储系统的架构实现,不需要还可不上能支持消息系统中的高级形态『多端同步』以及『消息漫游』。在性能和规模上,不需要还可不上能做到全量消息云端存储,百万TPS以及毫秒级延迟的消息同步能力。

《Java新一代网络编程模型AIO原理及Linux系统AIO介绍》

《简述移动端IM开发的哪些坑:下发、通信协议和客户端》

《IM单聊和群聊中的在线情形同步应该用“推”还是“拉”?》

《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》

《微信后台基于时间序的海量数据冷热分级下发实践》

《即时通讯音视频开发(四):视频编解码之预测技术介绍》

《基于WebSocket实现Hybrid移动应用的消息推送实践(含代码示例)》

读扩散:

《Web端即时通讯安全:跨站点WebSocket劫持漏洞详解(含示例代码)》

IM场景下,第一根消息只会产生一次,否则会被读取多次,是典型的读多写少的场景,消息的读写比例共就是10:1。若使用读扩散同步模式,整个系统的读写比例会被放大到80:1。

[8] IM开发综合文章:

《Android端消息推送总结:实现原理、心跳保活、遇到的大大问题等》

《详解如可在NodeJS中使用Google的Protobuf》

《17年的实践:腾讯海量产品的技术办法论》

《从零到卓越:京东客服即时通讯系统的技术架构演进历程》

本章主要会介绍基于TableStore的现代IM消息系统的下发,在完整篇 介绍下发前一天,会先介绍四种 Timeline逻辑模型,来抽象和复杂性对IM消息同步和存储模型的理解。理解了Timeline模型后,会介绍如可基于此模型对消息的同步以及存储进行建模。基于Timeline模型,在实现消息同步和存储时总要有各方面的技术权衡,类事如可对消息同步常见的读扩散和写扩散四种 模型进行对比和选泽,以及针对Timeline模型的形态如可来选泽底层数据库。

《专访微信视频技术负责人:微信实时视频聊天技术的演进》

《腾讯信鸽技术分享:百亿级实时消息推送的实战经验》

《P2P技术详解(三):P2P技术之STUN、TURN、ICE详解》

《高性能网络编程(四):从C10K到C10M高性能网络应用的理论探索》

《TCP/IP详解-第18章·TCP连接的建立与终止》

2)消息的存储:消息存储即消息的持久化保存,这里总要指消息在客户端本地的保存,就是指云端的保存,功能上对应的就是『消息漫游』。『消息漫游』的好处是都不还可不上能实现账号在任意端登陆查看所有历史消息,这也是高级IM系统特有的功能之一。

《学习RFC3580:RTP/RTCP实时传输协议基础知识》

《现代IM系统中聊天消息的同步和存储方案探讨》

《良心分享:WebRTC 零基础开发者教程(中文)》

《简述移动端IM开发的哪些坑:下发、通信协议和客户端》

《通俗易懂-深入理解TCP协议(上):理论基础》

《IBM技术经理访谈:MQTT协议的制定历程、发展现状等》

《即时通讯安全篇(一):正确地理解和使用Android端加密算法》

《魅族2800万长连接的实时消息推送架构的技术实践分享》

《缘何基于TCP协议的移动端IM仍然都要心跳保活机制?》

《从HTTP到MQTT:一一个多多多多基于位置服务的APP数据通信实践概述》

《移动端IM开发都要面对的技术大大问题(含通信协议选泽)》

写扩散:

《谈谈移动端 IM 开发中登录请求的优化》

如图是基于Timeline的消息存储模型,消息存储要求每个会话都对应一一个多多多多独立的Timeline。如图例子所示,A与B/C/D/E/F均地处了会话,每个会话对应一一个多多多多独立的Timeline,每个Timeline内存有这些 会话中的所有消息,服务端会对每个Timeline进行持久化。服务端不需要还可不上能对所有会话Timeline中的全量消息进行持久化,也就拥有了消息漫游的能力。

《开源框架Pomelo实践:搭建Web端高性能分布式IM聊天服务器》

>>更多类事文章 ……

《移动端IM中大规模群消息的推送如可保证速度、实时性?》

在分析『消息同步库』和『消息存储库』的设计和实现前一天,在本章会先介绍一一个多多多多逻辑模型-Timeline。Timeline模型会帮助亲戚亲戚亲戚亲戚朋友复杂性对消息同步和存储模型的理解,而消息库的设计和实现也是围绕Timeline的形态和需求来展开。

《首次披露:快手是如可做到百万观众同场看直播仍能秒开且不卡顿的?》

先存储后同步的好处是,机会接收方确认接收到了消息,那这条消息一定是机会在云端保存了。否则消息会一个多多多多多库来保存,一一个多多多多是消息存储库,用于全量保存所有会话的消息,主要用于支持消息漫游。另一一个多多多多是消息同步库,主要用于接收方的多端同步。

《浅谈IM系统的下发》

《浅谈IM系统的下发》

《开源实时音视频技术WebRTC在Windows下的简明编译教程》

《移动端实时音视频直播技术详解(六):延迟优化》

可根据SeqId随机定位到具体的某条消息进行读取,也都不还可不上能任意读取某个给定范围内的所有消息。

《绝对干货:基于Netty实现海量接入的推送服务技术要点》

2)不需要还可不上能支持高并发写和范围读,规模在十万级TPS;

《Android直播入门实践:动手搭建一套简单的直播系统》

《移动端实时音视频直播技术详解(五):推流和传输》

《移动端IM开发都要面对的技术大大问题》

[9] 有关推送技术的文章:

《应用保活终极总结(三):Android6.0及以上的保活实践(被杀复活篇)》

《全方位评测:Protobuf性能到底有这麼比JSON快5倍?》

《移动端IM登录时拉取数据如可作到省流量?》

《IM消息送达保证机制实现(二):保证离线消息的可靠投递》

1)消息的同步:将消息完整篇 的、快速的从发送方传递到接收方,就是消息的同步。消息同步系统最重要的衡量指标就是消息传递的实时性、完整篇 性以及能支撑的消息规模。从功能上来说,一般共要要支持在线和离线推送,高级的IM系统还支持『多端同步』;

《从零到卓越:京东客服即时通讯系统的技术架构演进历程》

>>更多类事文章 ……

《iOS的推送服务APNs详解:设计思路、技术原理及过高 等》

(本文同步发布于:http://www.52im.net/thread-1280-1-1.html)

就是有服务端别问我消息好久都不还可不上能回收,通常的做法是为这些 库里的消息设定一一个多多多多固定的生命周期,类事一周机会一一个多多多多月,生命周期开始可被淘汰。

《QQ音乐团队分享:Android中的图片压缩技术详解(下篇)》

消息漫游也是基于Timeline,和消息同步唯一的区别是,消息漫游要求服务端不需要还可不上能对Timeline内的所有数据进行持久化。

IM系统在互联网初期即地处,其基础技术架构在这十几年的发展中更新迭代多次,从早期的CS、P2P架构,到现在后台机会演变为一一个多多多多复杂性的分布式系统,涉及移动端、网络、安全和存储等技术的方方面面。其支撑的规模也从早期的极少量日活,到现在微信这些 巨头最新宣告的达到9亿的日活的体量。

▲ Timeline模型

《移动端实时音视频直播技术详解(一):开篇》

>>更多类事文章 ……

《开源实时音视频技术WebRTC中RTP/RTCP数据传输协议的应用》

《移动端IM中大规模群消息的推送如可保证速度、实时性?》

每个消息拥有一一个多多多多顺序ID(SeqId),在队列里边的消息的SeqId一定比前面的消息的SeqId大,也就是保证SeqId一定是增长的,否则暂且求严格递增;

《即时通讯音视频开发(十一):实时语音通讯丢包补偿技术详解》

《一一个多多多多基于MQTT通信协议的完整篇 Android推送Demo》

《58到家实时消息系统的协议设计等技术实践分享》

《扫盲贴:认识MQTT通信协议》

《如可优化传输机制来实现实时音视频的超低延迟?》

《Go语言构建千万级在线的高并发消息推送系统实践(来自380公司)》

《浅谈移动端IM的多点登陆和消息漫游原理》

消息同步库用于存储所有用于消息同步的Timeline,每个Timeline对应一一个多多多多接收端,主要用作写扩散模式的消息同步。

《技术流年:改变世界的TCP/IP协议(珍贵多图、手机慎点)》

《TCP/IP详解-第11章·UDP:用户数据报协议》

优点是消息只都要写一次,相比写扩散的模式,不需要还可不上能大大降低消息写入次数,有点是在群消息这些 场景下。但其缺点也比较明显,接收端去同步消息的逻辑会相对复杂性和低效。接收端都要对每个会话都拉取一次不还可不上能获取完整篇 消息,读被大大的放大,否则会产生就是否是效的读,机会并总要每个会话总要有新消息产生。

每个会话中的消息,会产生多次写,除了写入用于消息存储的会话Timeline,还都要写入都要同步到的接收端的同步Timeline。在所有人所有与所有人所有的会话中,消息会被额外写两次,除了写入这些 会话的存储Timeline,还都要写入参与这些 会话的一个多多多多接收者的同步Timeline。而在群这些 场景下,写入会被更加的放大,机会这些 群拥有N个参与者,那每条消息都都要额外的写N次。

《微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)》

《实践分享:如可构建一套高可用的移动端消息推送系统?》

《微信技术总监谈架构:微信之道——大道至简(演讲全文)》

《腾讯原创分享(一):如可大幅提升移动网络下手机QQ的图片传输速度和成功率》

《移动端实时音视频直播技术详解(四):编码和封装》

《浅谈移动端IM的多点登陆和消息漫游原理》

《即时通讯音视频开发(十四):实时音视频数据传输协议介绍》

《TCP/IP详解-第17章·TCP:传输控制协议》

[4] 有关WEB端即时通讯开发:

(本文同步发布于:http://www.52im.net/thread-1280-1-1.html )

《移动端IM登录时拉取数据如可作到省流量?》

《即时通讯音视频开发(八):常见的实时语音通讯编码标准》

《移动端实时视频直播技术实践:如可做到实时秒开、流畅不卡》

当然写扩散这些 同步模式,还都要防止或多或少极端场景,类事万人大群。针对这些 极端写扩散的场景,会退化到使用读扩散。一一个多多多多简单的IM系统,通常会在产品层面限制这些 大群的地处,而对于一一个多多多多高级的IM系统,会采用读写扩散混合的同步模式,来满足类事产品的需求。

《网络编程懒人入门(四):快速理解TCP和UDP的差异》

《Comet技术详解:基于HTTP长连接的Web端实时通信技术》

《传输层安全协议SSL/TLS的Java平台实现简介和Demo演示》

《WebSocket详解(一):初步认识WebSocket技术》

《理论经典:TCP协议的3次握手与4次挥手过程详解》

《求教android消息推送:GCM、XMPP、MQTT四种 方案的优劣》

《QQ音乐团队分享:Android中的图片压缩技术详解(上篇)》

1)表形态设计不需要还可不上能满足Timeline模型的功能要求:暂且求关系模型,不需要还可不上能实现队列模型,并不需要还可不上能支持生成自增的SeqId;

《腾讯原创分享(二):如可大幅压缩移动网络下APP的流量消耗(上篇)》

《简述实时音视频聊天中端到端加密(E2EE)的工作原理》

《移动端实时消息推送技术浅析》

《即时通讯音视频开发(三):视频编解码之编码基础》

《蘑菇街即时通讯/IM服务器开发之架构选泽》

如图是Timeline模型的一一个多多多多抽象表述,Timeline都不还可不上能简单理解为是一一个多多多多消息队列,但这些 消息队列有如下形态:

《Android应用应用程序运行保活详解:一篇文章防止你的所有大大问题》

《NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战》

消息系统最核心的一个多多多多库是消息同步库和消息存储库,一个多多多多库对数据库有不同的要求:

《IM实时音视频聊天时的回声消除技术详解》

基于Timeline,从逻辑模型都不还可不上能够很简单的理解在服务端如可去实现消息同步和存储,并支持多端同步和消息漫游哪些高级功能。落地到实现的难点主要在如可将逻辑模型映射到物理模型,Timeline的实现对数据库会哪些要求?亲戚亲戚亲戚亲戚朋友应该选泽何种数据库去实现?哪些是接下来会讨论到的大大问题。

《移动端安全通信的利器——端到端加密(E2EE)技术详解》

《简述移动端IM开发的哪些坑:下发、通信协议和客户端》

有了哪些形态后,消息的同步都不还可不上能拿Timeline来很简单的实现。图中的例子中,消息发送方是A,消息接收方是B,一块儿B地处多个接收端,分别是B1、B2和B3。A向B发送消息,消息都要同步到B的多个端,待同步的消息通过一一个多多多多Timeline来进行交换。A向B发送的所有消息,总要保地处这些 Timeline中,B的每个接收端总要独立的从这些 Timeline中拉取消息。每个接收端同步完毕后,总要在本地记录下最新同步到的消息的SeqId,即最新的一一个多多多多位点,作为下次消息同步的起始位点。服务端不需要保存各个端的同步情形,各个端均都不还可不上能在任意时间从任意点开始拉取消息。

《腾讯原创分享(二):如可大幅压缩移动网络下APP的流量消耗(下篇)》

《专访魅族架构师:海量长连接的实时消息推送系统的心得体会》

《WebSocket详解(二):技术原理、代码演示和应用案例》

《计算机网络通讯协议关系图(中文珍藏版)》

《UDP中一一个多多多多包的大小最大能多大?》

《NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示》

《蘑菇街即时通讯/IM服务器开发之架构选泽》

消息存储模型中,每个会话的Timeline中保存了这些 会话的全量消息。读扩散的消息同步模式下,每个会话中产生的新的消息,只都要写一次到其用于存储的Timeline中,接收端从这些 Timeline中拉取新的消息。

《基于RTMP数据传输协议的实时流媒体技术研究(论文全文)》

《即时通讯安全篇(三):常用加解密算法与通讯安全讲解》

3)不需要还可不上能保存海量数据,百TB级;

《不为人知的网络编程(四):深入研究分析TCP的异常关闭》

如图是读扩散和写扩散四种 不同同步模式下对应的不同的Timeline模型,按图中的示例,A作为消息接收者,其与B/C/D/E/F地处了会话,每个会话中的新的消息都都要同步到A的某个端,看下读扩散和写扩散四种 模式下消息如可做同步。

《IM消息送达保证机制实现(一):保证在线实时消息的可靠投递》

《为哪些QQ用的是UDP协议而总要TCP协议?》

IM全称是『Instant Messaging』,中文名是即时通讯。在这些 厚度信息化的移动互联网时代,生活中IM类产品机会成为必备品,比较有名的如钉钉、微信、QQ等以IM为核心功能的产品。当然目前微信机会成长为一一个多多多多生态型产品,但其核心功能还是IM。还有或多或少非以IM系统为核心的应用,最典型的如或多或少在线游戏、社交应用,IM也是其重要的功能模块。都不还可不上能说,蕴含社交属性的应用,IM功能一定是必不可少的。

《开发IM是所有人所有设计协议用字节流好还是字符流好?》

《还在靠“喂喂喂”测试实时语音通话质量?本文教你科学的评测办法!》

《网络编程懒人入门(二):快速理解网络通信协议(下篇)》

《快速裂变:见证微信强大后台架构从0到1的演进历程(一)》

[1] 网络编程基础资料:

《新手入门贴:史上最全Web端即时通讯技术原理详解》

《极光推送系统大规模高并发架构的技术实践分享》

在IM这些 应用场景下,通常会选泽写扩散这些 消息同步模式。

消息同步库:

《高性能网络编程(二):上一一个多多多多10年,著名的C10K并发连接大大问题》

《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》

IM系统中最核心的累积是消息系统,消息系统中最核心的功能是消息的同步和存储:

《IM消息送达保证机制实现(二):保证离线消息的可靠投递》

新的消息永远在尾部加带,保证新的消息的SeqId永远比机会地处队列中的消息都大;

《简述传输层协议TCP和UDP的区别》

《即时通讯音视频开发(十三):实时视频编码H.264的特点与优势》

《如可选泽即时通讯应用的数据传输格式》

总结下来,对数据库的要求有如下几点:

《详解Web端通信办法的演进:从Ajax、JSONP 到 SSE、Websocket》

▲ 读扩散和写扩散四种 不同同步模式下对应的不同的Timeline模型

《一一个多多多多低成本确保IM消息时序的办法探讨》

《理论联系实际:实现一一个多多多多简单地基于HTML5的实时视频直播》

《实现延迟低于800毫秒的1080P实时音视频直播的实践分享》

http://www.52im.net/forum.php?mod=collection&op=all

《Web端即时通讯技术的发展与WebSocket、Socket.io的技术实践》

这些 库不都要永久保留所有都要同步的消息,机会消息在同步到所有端后其生命周期就都不还可不上能开始,就都不还可不上能被回收。否则如前面所介绍的,一一个多多多多实现简单的多端同步消息系统,在服务端不需要保存有所有端的同步情形,就是依赖端所有人所有主动来做同步。

>>更多类事文章 ……

写扩散的消息同步模式,都要有一一个多多多多额外的Timeline来专门用于消息同步,通常是每个接收端总要拥有一一个多多多多独立的同步Timeline,用于存放都要向这些 接收端同步的所有消息。

《一套原创分布式即时通讯(IM)系统理论架构方案》

《移动端IM实践:实现Android版微信的智能心跳机制》

《深入的聊聊Android消息推送这件小事》

>>更多类事文章 ……

《腾讯QQ1.4亿在线用户的技术挑战和架构演进之路PPT》

《技术揭秘:支持百万级粉丝互动的Facebook实时视频直播》

《浅谈实时音视频直播中直接影响用户体验的几项关键技术指标》

传统架构下,消息是先同步后存储:

《NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战》

《网络编程懒人入门(一):快速理解网络通信协议(上篇)》

《深入的聊聊Android消息推送这件小事》

消息存储库用于存储所有会话的Timeline,每个Timeline蕴含了一一个多多多多会话中的所有消息。这些 库主要用于消息漫游时拉取某个会话的所有历史消息,也用于读扩散模式的消息同步。

《即时通讯音视频开发(十五):聊聊P2P与实时音视频的应用情形》

一一个多多多多优化的好的系统,都要从设计上去平衡这些 读写压力,防止读或写任意一维触碰到天花板。就是有IM系统类事场景下,通常会应用写扩散这些 同步模式,来平衡读和写,将80:1的读写比例平衡到80:80。

《SSE技术详解:四种 全新的HTML5服务器推送事件技术》

《即时通讯音视频开发(十七):视频编码H.264、VP8的前世今生》

《即时通讯安全篇(四):实例分析Android中密钥硬编码的风险》

《Android端消息推送总结:实现原理、心跳保活、遇到的大大问题等》

基于Timeline模型,以及Timeline模型在消息存储和消息同步的应用,亲戚亲戚亲戚亲戚朋友看下消息同步库和消息存储库的设计。

《通俗易懂-深入理解TCP协议(下):RTT、滑动窗口、拥塞防止》

写扩散同步模式的优点是,在接收端消息同步逻辑会非常简单,只都要从其同步Timeline中读取一次即可,大大降低了消息同步所需的读的压力。其缺点就是消息写入会被放大,有点是针对群这些 场景。

[7] 有关实时音视频开发:

《TCP/IP详解-第21章·TCP的超时与重传》

消息存储库:

《P2P技术详解(一):NAT详解——完整篇 原理、P2P简介》

《即时通讯安全篇(五):对称加密技术在Android平台上的应用实践》

《如可保证IM实时消息的“时序性”与“一致性”?》

[2] 有关IM/推送的通信格式、协议的选泽:

《移动端IM中大规模群消息的推送如可保证速度、实时性?》

《强列建议将Protobuf作为你的即时通讯应用数据传输格式》

《即时通讯音视频开发(一):视频编解码之理论概述》

《基于社交网络的Yelp是如可实现海量用户图片的无损压缩的?》

《完整篇 自已开发的IM该如可设计“失败重试”机制?》

《Web端即时通讯安全:跨站点WebSocket劫持漏洞详解(含示例代码)》

《移动端实时音视频直播技术详解(三):防止》

[5] 有关IM下发:

《socket.io实现消息推送的或多或少实践及思路》

《Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE》

消息同步库和消息存储库,对数据库有不同的要求,如可对数据库做选型,在下面会讨论。

对于在线推送失败机会离线的接收方,会有另外一一个多多多多统一的消息同步办法。接收方会主动的向服务端拉取所有未同步消息,但接收方好久来同步以及会在哪些端来同步消息对服务端来说是未知的,就是有要求服务端都要保存所有都要同步到接收方的消息,这是消息同步库的主要作用。对于新的同步设备,会有消息漫游的需求,这是消息存储库的主要作用,在消息存储库中,都不还可不上能拉取任意会话的全量历史消息。

《简述实时音视频聊天中端到端加密(E2EE)的工作原理》

《即时通讯音视频开发(二):视频编解码之数字视频介绍》

《实时语音聊天中的音频防止与编码压缩技术简述》