Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
媒介
IM全称是『Instant Messaging』,中文名是即时通信。在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉、微信、QQ等以IM为核心功能的产品。当然今朝微信已经成长为一个生态型产品,但其核心功能照样IM。还有一些非以IM体系为核心的应用,最典范的如一些在线游戏、社交应用,IM也是其重要的功能模块。可以说,带有社交属性的应用,IM功能必定是必弗成少的。
IM体系中最核心的部分是消息体系,消息体系中最核心的功能是消息的同步和存储:
- 消息的同步:将消息完全的、快速的大年夜发送方传递到接收方,就是消息的同步。消息同步体系最重要的衡量指标就是消息传递的及时性、完全性以及能支撑的消息范围。大年夜功能上来说,一般至少要支撑在线和离线推送,高等的IM体系还支撑『多端同步』。
- 消息的存储:消息存储即消息的持久化保存,这里不是指消息在客户端本地的保存,而是指云端的保存,功能上对应的就是『消息漫游』。『消息漫游』的好处是可以实现账号在随便率性端上岸查看所有汗青消息,这也是高等IM体系特有的功能之一。
本篇文┞仿内容重要涉及IM体系中的消息体系架构,会介绍一种基于TableStore构建的消息同步以及存储体系的架构实现,可以或许支撑消息体系中的高等特点『多端同步』以及『消息漫游』。在机能和范围上,可以或许做到全量消息云端存储,百万TPS以及毫秒级延迟的消息同步才能。
本章重要会介绍基于TableStore的现代IM消息体系的架构设计,在具体介绍架构设计之前,会先介绍一种Timeline逻辑模型,来抽象和简化对IM消息同步和存储模型的懂得。懂得了Timeline模型后,会介绍若何基于此模型对消息的同步以及存储进行建模。基于Timeline模型,在实现消息同步和存储时还会有各方面的技巧衡量,例如若何对消息同步常见的读扩散和写扩散两种模型进行比较和选择,以及针对Timeline模型的特点若何来选择底层数据库。
消息存储模型
IM体系在互联网初期即存在,其基本技巧架构在这十几年的成长中更新迭代多次,大年夜早期的CS、P2P架构,到如今后台已经演变为一个复杂的分布式体系,涉及移动端、收集、安然和存储等技巧的方方面面。其支撑的范围也大年夜早期的少量日活,到如今微信这个巨擘最新颁布的达到9亿的日活的体量。
上图是消息体系传统架构与现代架构的简单比较。
传统架构下,消息是先同步后存储。对于在线的用户,消息会直接及时同步到在线的接收方,消息同步成功后,并不会进行持久化。而对于离线的用户或者消息无法及时同步成功时,消息会持久化到离线库,当接收方从新连接后,会大年夜离线库拉取所有未读消息。当离线库中的消息成功同步到接收方后,消息会大年夜离线库中删除。传统的消息体系,办事端的重要工作是保护发送方和接收方的连接状况,并供给在线消息同步和离线消息缓存的才能,包管消息必定可以或许大年夜发送方传递到接收方。办事端不会对消息进行持久化,所以也无法支撑消息漫游。
现代架构下,消息是先存储后同步。先存储后同步的好处是,如不雅接收方确认接收到了消息,那这条消息必定是已经在云端保存了。并且消息会有两个库来保存,一个是消息存储库,用于全量保存所有会话的消息,重要用于支撑消息漫游。另一个是消息同步库,重要用于接收方的多端同步。消息大年夜发送方发出后,经由办事端转发,办事端会先将消息保存到消息存储库,后保存到消息同步库。完成消息的持久化保存后,对于在线的接收方,会直接选择在线推送。但在线推送并不是一个必须路径,只是一个更优的消息传递路径。对于在线推送掉败或者离线的接收方,会有别的一个同一的消息同步方法。接收方会主动的向办事妒攀拉取所有未同步消息,但接收方何时来同步以及会在哪些妒攀来同步消息对办事妒攀来说是未知的,所以请求办事端必须保存所有须要同步到接收方的消息,这是消息同步库的重要感化。对于新的同步设备,会有消息漫游的需求,这是消息存储库的重要感化,在消息存储库中,可以拉取随便率性会话的全量汗青消息。
以上是传统架构和现代架构的一个简单的比较,现代架构上全部消息的同步和存储流程,并没羽蹦复杂太多,然则其能实现多端同步以及消息漫游。现代架构中最核心的就是两个消息库『消息同步库』和『消息存储库』,是消息同步和存储最核心的基本。而本篇文┞仿接下来的部分,都是环绕这两个库的设计和实现来展开。
Timeline模型
在分析『消息同步库』和『消息存储库』的设计和实现之前,在本章会先介绍一个逻辑模型-Timeline。Timeline模型会赞助我们简化对消息同步和存储模型的懂得,而消息库的设计和实现也是环绕Timeline的特点汉孟耋来展开。
如图是Timeline模型的一个抽象表述,Timeline可以简单懂得为是一个消息队列,但这个消息队列有如下特点:
- 每个消息拥有一个次序ID(SeqId),在队列后面的消息的SeqId必定比前面的消息的SeqId大年夜,也就是包管SeqId必定是增长的,然则不请求严格递增。
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践crond 守护过程是一个完成 cron 功能的后台办事。 没有时光运行敕令?应用 cron 的筹划义务意味着你不消熬>>>详细阅读
本文标题:现代IM系统中消息推送和存储架构的实现
地址:http://www.17bianji.com/lsqh/39173.html
1/2 1