简介: 序消息类场景是表格存储(Tablestore)主推的方向之一,因其数据存储结构在消息类数据存储上具有天然优势。为了方便用户基于Tablestore为消息类场景建模,Tablestore封装Timeline模型,旨在让用户更快捷的实现消息类场景需求。
序
消息类场景是表格存储(Tablestore)主推的方向之一,因其数据存储结构在消息类数据存储上具有天然优势。为了方便用户基于Tablestore为消息类场景建模,Tablestore封装Timeline模型,旨在让用户更快捷的实现消息类场景需求。在推出Timeline(v1、v2两个版本)模型以来,受到了大量用户关注。伴随模型推广与输出,Tablestore陆续发布了一系列专题文章,重点讨论介绍了IM场景的架构设计、模型概念以及Feed 流系统架构的设计方案,相信给很多用户提供了场景实现新思路。文章列表见《表格存储权威指南》。
但依然会有用户困惑,“框架、结构、模型等概念介绍了这么多,该如何基于Timeline模型,实现具体场景呢?”。
本文就是为了让用户更快速的上手,带用户基于Timeline2.0 模型,详细讲解如何实现一个简易的IM系统。并开源了相应的实现代码。源码链接
相关系列文章见:《现代IM系统中的消息系统架构 - 架构篇》、《现代IM系统中的消息系统架构 - 模型篇》
梗概
生活中最常见的即时聊天类软件如:钉钉、微信等,都可以描述为:实现了即时通讯能力的聊天工具。其中聊天会话可分为两大类,分别是:单聊、群聊(公众号类似单聊)。这里我们以钉钉(Ding Talk)的功能为参照,详细说明相应的功能基于Tablestore的Timeline模型如何实现。如:新消息提醒,未读消息数统计,查看会话中更久的聊天内容,群名模糊检索,关键字查询历史记录,以及多客户端同步等。让用户在实现方案上有更清晰的认识,对模型的抽象概念、接口有更好的理解。
下面会按照聊天系统的功能模块分段,分别介绍每一部分的功能、方案介绍、表设计以及实现代码等。功能模块主要分为:消息存储、关系维护、即时感知、多端同步。
功能模块
消息存储
消息系统中,消息存储是最基本的功能。对于消息存储(提供消息的读、写、持久化),一方面需要持久化写入,保证消息数据的不丢失,另一方面,适合用户的快速、高效查询。在IM场景中,写入方式通常是单行、批量写入,而读取需要按照消息队列范围读取。有时用户还有对于历史消息的模糊查询需求,这时就需要使用多维检索、全文检索的能力。
消息的存储都是基于Timeline模型,具体模型见文章《Tablestore发布Timeline 2.0模型》。样例中,消息数据的表结构见下图:
表设计:im_timeline_store_table
存储库
功能:会话窗口消息展示
存储库是聊天会话消息所对应的存储表,消息以会话分类存储,每个会话是一个消息队列。单个消息队列