00:00
现代I'M系统中聊天消息的同步和存储方案探讨。本文主要涉及I'M即时通讯系统中的消息系统架构,探讨一种适用于带用户量的消息同步以及存储系统的架构,实现能够支持消息系统中的高级特性多端同步以及消息漫游,在性能和规模上能够做到全量消息、云端存储、百万TPS以及毫秒级延迟的消息同步能力。一架构设计。传统架构下,消息是先同步后存储,现代架构下消息是先存储后同步。以上是传统架构和现代架构的一个简单的对比。现代架构上整个消息的同步和存储流程并没有变复杂太多,但是其能实现多端同步以及消息漫游。现代架构中最核心的就是两个消息库,消息同步库和消息存储库是消息同步和存储最核心的基础。
01:00
2TIMELINE模型。Timeline模型会帮助我们简化对消息同步和存储模型的理解,而消息库的设计和实现也是围绕timeline的特性和需求来展开。Timeline可以简单理解为是一个消息队列,它有一些特性,每个消息拥有一个顺序IDSID,新的消息永远在尾部添加,可根据SID随机定位到具体的某条消息进行读取,也可以任意读取某个给定范围内的所有消息。消息漫游也是基于time line和消息同步唯一的区别是,消息漫游要求服务端能够对timeline内的所有数据进行持久化。四消息同步模型基于timeline的消息存储模型。消息存储要求每个绘画都对应一个独立的timeline。如图例子所示,A与BCD均发生了会画,每个绘画对应一个独立的timeline,每个timeline内曾有这个会话中的所有消息,服务端会对每个time line进行持久化。服务端能够对所有会话timeline中的全量消息进行持久化,也就拥有了消息漫游的能力。
02:09
4消息同步模型。读扩散和写扩散两种不同同步模式下对应的不同的time LA模型按图中的示例作为消息接收者,其与BCD发生了会话,每个会话中的新的消息都需要同步到了的某个端。读扩散消息存储模型中,每个会话的time案中保存了这个会画的全量消息。读扩散的消息同步模式下,每个会画中产生的新的消息只需要写一次到其用于存储的timeline中,接收端从这个time中拉取新的消息。优点是消息只需要写一次,相比写扩散的模式能够大大降低消息写入次数,特别是在群消息这种场景下。但其缺点也比较明显,接收端去同步消息的逻辑会相对复杂和低效。写扩散的消息同步模式需要有一个额外的timeline来专门用于消息同步,通常是每个接收端都会拥有一个独立的同步timeline,用于存放需要向这个接收端同步的所有消息。写扩散同步模式的优点是。
03:12
在接收端,消息同步逻辑会非常简单,只需要从其同步timeline中读取一次即可,大大降低了消息同步所需的读的压力。其缺点就是消息写入会被放大,特别是针对全这种场景。五典型架构设计典型的消息系统架构中包含几个重要组件端,消息服务器、消息队列、消息处理、消息存储和索引库。消息同步库对在线的设备,可以由消息服务器主动推送至在线设备端,对离线设备,登录后会主动向服务端同步消息,每个设备会在本地保留有最新一条消息的顺序ID,向服务端同步该顺序ID后的所有消息。6消息库设计。基于timeline的消息库设计中,消息同步库用于存储所有用于消息同步的timeline,每个timeline对应一个接收端,主要用作写扩散模式的消息同步。消息存储库用于存储所有绘画的time line, 每个time line包含了一个绘画中的所有消息。这个库主要用于消息漫游时拉取某个绘画的所有历史消息,也用于读扩散模式的消息同步。
04:23
7数据库选型。消息系统最核心的两个库是消息同步库和消息存储库,两个库对数据库有不同的要求。总结下来,对数据库的要求有如下几点,一、表结构设计能够满足timeline模型的功能要求,二、能够支持高并发写和范围读,规模在10万级TPS 3、能够保存海量数据百TB级,4、能够为数据定义生命周期。
我来说两句