IM系统框架

今天听乔斌讲了公司IM系统的整体框架以及各部分的特点,还有一歇需要注意的问题,趁着热乎总结纪录一下。

首先分几大模块,也可以理解为几层:Entry,Logic,Router,Das。

Entry是接入层,负责管理成千上万的连接,主要处理高并发,用到了epoll,并将接收到的数据包加入一个任务队列,交给下一层处理(类似于自己完成的web服务器中处理连接及任务的流程)。


Logic是业务层,主要关心各种业务,user msg friend这几方面的业务流程。它直接与Entry和Das直连,只关心业务处理,不关心数据收发,所以数据来了之后放入任务队列,Logic从队列中取出任务后,只对任务进行处理,处理完之后就将数据包传递给Router,由Router判断该传递给哪一台Entry服务器以回发数据包。


Router是路由层,负责对数据包在各层之间进行转发。 纪录了各个用户分别来自哪一台Entry服务器。那Entry是如何得知Router转给的数据包是对那一条消息的处理呢?这里会对每一条消息都有一个消息id,这个id由Entry生成之后,在整个系统的流程中都是存在的可以用来做校验判断是哪条消息的。至于每一个数据包是用来干什么的,那就是logic里面协议的活儿了。


Das是数据层,为业务层Logic提供了一系列操作数据库的接口,业务层只关心业务,同时也会关心数据是如何存储,但是不会关心Das接口是如何实现的,这两层实现了业务和数据的分离。之后如果数据库到达瓶颈,需要切换数据库,那就直接切另一套接口,不会影响其他层次。另外,这一层还听乔斌讲到了redis,这个在内存中存取,KV存储方式的一个东西,之后要好好了解一下。


等会会上图片。

再说一下系统主要解决的几个问题。

1.无状态。logic是无状态的,它不关心用户这一条消息在传输过程中的状态,只负责处理业务。目的是为了便于扩展,当要扩展logic服务器数量时,无状态的话,就不需要同步原始状态到新的服务器上面。 优化前的Router是有状态的,现在也优化为无状态的了,优化方法是将原来的状态直接KV存储到redis中,这样随着用户量增大服务器压力增大,Router扩展也不必同步状态,并且redis可以集群,不必担心内存不足。

2.异步。用户发来的消息,Logic在处理时肯定不能串行处理,这里要异步处理,用到了多线程和任务队列。

3.不丢包。这个问题的解决看图。图片中的疑问,如果b正好离线,服务器是可以通过长连接状态得知的,这时直接将消息存到数据库,b上线时自动拉离线获取离线消息。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值