前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个线上IM系统必要的组件

一个线上IM系统必要的组件

原创
作者头像
mariolu
发布2020-12-20 23:41:42
1.6K0
发布2020-12-20 23:41:42
举报

一个IM系统不仅用于微信qq等聊天软件后台,更是经常存在于业务后台架构。比如说直播语音房,电商客服系统等。那么本文来探究一个线上可用性高的IM系统需要考虑哪些因素,以及需要哪一些组件。

一、统一登入系统

用户接入后台服务器,需要进行登录向后台系统表明身份。这个统一登入系统做的事情是为登录成功的用户 分配会话认证,并派发一个socket。为了保持和用户的会话效率,需要维持一个长连接。在网络不稳定或者切换时,也可以充当与客户端重连的角色。这个重连机制一般采用退避算法。有些系统还会实现多通道tcp/udp的channel。这是因为利用udp效率比较高的问题。同时为了规避udp乱序问题,一般发送之后会维持一个已发送消息的队列,这个队列里面保存消息的seqid,这个seqid就是等收到udp回包时进行一一对应。

二、一致性LB负载均衡系统

这个系统是为了做流量的负载均衡,同时保证消息调度到后端同一机房的一致性。因为消息可能存储在机器,或者说这是有状态的服务。所以需要做消息的一致性。

三、消息合法性校验系统

这个系统检查 是否违反能发送这个消息的理由。比如说双方不是好友关系的可能不能发,消息有敏感词,消息的对方黑名单系统,消息的频次控制。同时对于实时消息可能会做些消息旁路,以便审核系统检查。

四、消息去重系统

这个系统会对网络上的消息包进行检测重复,这些重复可能是网络上tcp的一些不可靠因素或者重试发送带来的,检测重复的机制是保存历史的消息,同时为了减轻存储压力,一般会对这种存储做个有效期自然消亡。

五、消息存储系统

消息服务端存储一个主要动机是对方可能是离线状态,或者是对方上线,但是可能拉取不成功,需要重复拉取。所以这个消息存储有个队列,至少要等接收放完全拉取时,并回复ACK,才能从消息队列中删除消息。

对于不丢失高可靠的要求,消息存储可能还需要做双写。

六、从统一接入系统拉取消息

拉取消息是后台通知客户端过来拉取,客户端也是从统一接入系统拉取,这根客户端发送消息出去用的是同一个接入系统。

七、后台消息的路由

后台消息会对进行一些分类,以便做机房的流量管控,比如说按业务id、按话题等等。

八、消息分布式序列生成器

消息是唯一且递增的号段。每个消息需要从一个分布式号段生成器系统拿到一个seqid。这个号段一般也有个步长。这个号段也可以批发给取号业务方,号段的划分也简单归属进行机器的划分。

九、业务多功能模块

IM系统的接口不止包括拉实际消息,还有比如拉取未读消息数量等等。

十、离线push系统

在线消息通过接入系统发给用户,但是离线消息只能通过push通道传输,比如说apns,gpm/fpm,华为小米OV魅族的第三方push通道。

十一、统计消息模块

对消息进行监控,比如说已读取和未读取消息的状态等等。

十二、用户读消息偏移指针的记录模块

需要记录用户当前已读的seq,以便后面发送相应的未读消息给用户。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、统一登入系统
  • 二、一致性LB负载均衡系统
  • 三、消息合法性校验系统
  • 四、消息去重系统
  • 五、消息存储系统
  • 六、从统一接入系统拉取消息
  • 七、后台消息的路由
  • 八、消息分布式序列生成器
  • 九、业务多功能模块
  • 十、离线push系统
  • 十一、统计消息模块
  • 十二、用户读消息偏移指针的记录模块
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档