1.用户角度的聊天系统

如果我们站在一个使用者的角度从直观体验上来看,一个简单的聊天系统大概由以下元素组成:用户账户,账号关系,联系人列表,消息,聊天会话。

这个应该不难理解

1.聊天的参与需要用户,所以需要有一个用户账号,用来给用户提供唯一标识,以及头像,昵称等可供设置的选项。

2.账号和账号之间通过某些方式(比如加好友,互粉等)构成账号间的关系链

3.你的好友列表或者聊天对象的列表,我们称为联系人的列表,其中你可以选择一个联系人进行聊天互动等操作。

4.在聊天互动这个环节产生了消息。

5.同时你和对方之间的聊天消息记录组成了一个聊天会话,在会话里能看到你们之间所有的互动消息

2.开发者眼中的聊天系统

从一个IM系统开发者的角度看,聊天系统大概由这几个部分组成:客户端,接入服务,业务处理服务,存储服务和外部接口服务

1.客户端:客户端一般是用户用于收发消息的终端设备,内置的客户端程序和服务端进行网络通信,用来承载用户的互动请求和消息接收功能。我们可以把客户端想象为邮局业务的前台,它负责把你的信收走,放到传输管道中。

2.接入服务:可以认为是服务端的门户,为客户端提供消息收发的入口。发送的消息先由客户端通过网络给到接入服务,然后再由接入服务递交到业务层进行处理。

我们可以把接入服务想象成一个信件管道,联通了邮局的前台和信件分拨中心。但是实际上,接入服务的作用很大,不仅仅只有保持连接和消息传递功能。

当服务端有消息需要推送给客户端时,也是将经过业务层处理的消息先递交给接入层,再由接入层通过网络发送到客户端。

此外,在很多基于私有通信协议的IM系统实现中,接入服务还提供协议的编解码工作,编解码实际主要是为了节省网络流量,系统会针对传输的内容进行紧凑的编码(比如 protobuf),为了让业务处理时不需要关心这些业务无关的编解码工作,一般由接入层来处理。

另外, 还有session维护的工作很多时候也由接入服务来实现,session的作用是标识哪个用户在哪个tcp连接,用户后续的消息推送能够知道,如何找到接收人对应的连接来发送。

另外,接入服务还负责最终消息的推送执行,也就是通过网络连接把最终的消息从服务器传输送达到用户的设备上。

3.业务处理层:是真正的消息业务逻辑处理层,比如消息的存储,未读数变更,更新最近联系人等,这些内容都是业务处理的范畴。是整个IM系统的中枢大脑,负责各种复杂业务逻辑的处理。就好比你的信到达分拨中心后,分拨中心可能需要给接收人发条短信告知一下,或者分拨中心发现接收人告知过要拒绝接收这个发送者的任何信件,因此会在这里直接把信件退回给发信人。

4.存储服务:账号信息,关系链,以及消息本身,都需要进行持久化存储。

5.外部接口服务:第三方平台的离线消息推送

3.IM系统都有哪些特性

1、实时性

2.可靠性:不丢消息,消息不重复

3.一致性

4.安全性

Q:为什么接入服务和业务处理服务要独立拆分呢?

A:1、接入服务作为消息收发的出入口,必须是一个高可用的服务,保持足够的稳定性是一个必要条件。

试想一下,如果连接服务总处于不稳定状态,老是出现连不上或者频繁断连的情况,一定会大大影响聊天的流畅性和用户体验。而业务处理服务由于随着产品需求迭代,变更非常频繁,随时有新业务需要上线重启。如果消息收发接入和业务逻辑处理都在一起,势必会让接入模块随着业务逻辑的变更上线而频繁启停,导致已通过网络接入的客户端经常性地断连,重置,重连。

这种连接层的不稳定性会导致消息下推不及时,消息发送流畅性差,甚至会导致消息发送失败,从而降低用户消息收发的体验。

所以,将“只负责网络通道维持,不参与业务逻辑,不需要频繁变更的接入层”抽离出来,不管业务逻辑如何调整变化,都不需要接入层进行变更,这样能保证连接层的稳定性,从而整体上提升消息收发的用户体验

2.从业务开发人员的角度看,接入服务和业务处理进行拆分有助于提升业务开发效率,降低业务开发门槛。

简而言之就是,业务人员只需要关心业务处理就好。

Q:消息存储的作用:

1.会话一方用户不在线,上线时进行消息推送

2..内容审查,监管,电子证据,法律要求

3.数据分析,舆情分析

IM——基本系统架构相关推荐

  1. 系统架构升级要不要上微服务?历“久”弥新微服务——你真的需要升级微服务架构吗

    在 <微服务架构设计模式> 一书中,作者总结了关于微服务的一些"重点",原文如下: 中国企业和开发者对微服务架构的热情让我印象深刻.但如同我给所有客户的忠告一样,我想对 ...

  2. 商品详细信息的代码html_电商网站的商品详情页系统架构

    小型电商网站的商品详情页系统架构 小型电商网站的页面展示采用页面全量静态化的思想.数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入 Nginx 服务器.用户浏 ...

  3. 大型网站采用什么系统架构保证性能稳定性

    from http://www.bobd.cn/design/web/Theory/200904/31145.html 千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用 ...

  4. 系统架构的过程 浮现式设计

    系统架构如果设计之初就设计错了,那么必然是南辕北辙. 很多人做系统设计总是东一下,西一下,杂乱无章,想到那是那,然后系统的边界很大,总会有疏漏. 那么系统架构应该怎么设计呢? 首先来说分层 系统分为三 ...

  5. centos5.6 (64bit)编译安装vsftpd-2.3.4的配置(两种用户登录)[连载之电子商务系统架构]...

    centos5.6 (64bit)编译安装vsftpd-2.3.4的配置(两种用户登录) 出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者:Ji ...

  6. 说说大型高并发高负载网站的系统架构【转】

    我在CERNET做过拨号接入平台的搭建,而后在Yahoo&3721从事过搜索引擎前端开发,又在MOP处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大 ...

  7. 型网站的架构设计问题----大型高并发高负载网站的系统架构

    随着中国大型IT企业信息化速度的加快,大部分应用的数据量和访问量都急剧增加,大型企业网站正面临性能和高数据访问量的压力,而且对存储.安全以及信息检索等等方面都提出了更高的要求-- 本文中,我想通过几个 ...

  8. 17张图揭密支付宝系统架构

    支付宝的系统架构图,仅供参考.不管是不是支付行业,都值得我们参考,学习. image image image image image image image image image image ima ...

  9. 转:秒杀系统架构分析与实战

    原文出处: 陶邦仁   欢迎分享原创到伯乐头条 0 系列目录 秒杀系统架构 秒杀系统架构分析与实战 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单: ...

  10. 高性能网站性能优化与系统架构(ZT)

    转载请保留出处:俊麟 Michael's blog (http://space.itpub.net/7311285/viewspace-97) 我在CERNET做过拨号接入平台的搭建,而后在Yahoo ...

最新文章

  1. load-store/register-memory/register-plus-memory比较
  2. Ant在MyEclipse中的配置总结
  3. 程序员or产品经理┃同是职场脱发人,光头何苦为难光头!
  4. arXiv热文解读 | 不懂Photoshop如何P图?交给深度学习吧
  5. 多线程threading初识,线程等待
  6. 【个人感悟】效率,天道酬勤
  7. 统计方格区域内正方形和长方形的个数(洛谷P1548题题解,Java语言描述)
  8. 使用计算机在什么上传输,MODEM的作用是使计算机数据能在什么上传输
  9. 开发板添加上 Web 界面+openwrt luci界面修改
  10. 简述osi参考模型各层主要功能_简述OSI参考模型定义及各层的主要功能
  11. git 上传本地项目到githut中
  12. ATmega16 单片机 AVR单片机 自动计价电子秤
  13. 浪潮服务器SSD盘咋查看信息,浪潮存储为你揭秘:保障SSD数据可靠性的“黑科技”...
  14. Pre-trained Adversarial Perturbations-对抗机器学习论文
  15. vscode替换全局搜索快捷键
  16. android图片资源加密解密,Android Glide实现图片加密解密 自定义格式
  17. Tensorflow模型各部分自定义方式
  18. ts 之 Pick 和 Omit
  19. MDL---Material Design Lite框架推荐
  20. React Native 实现chat 即时聊天(第1天)

热门文章

  1. 赶鸭子;角谷定理;java实现
  2. 老板带头反内卷,阿尔卑斯滑雪团建。。。别错过这一波上车机会
  3. java 分割_Java 根据多个连续的符号分割字符串
  4. Gitee (码云)操作
  5. 我的嵌入式linux开发步骤
  6. 软件测试周刊(第49期):什么是大众?大众就是那些一年读书不超过五本的人。
  7. 机房环境监控需要注意的事项
  8. [ UICompatibilityInputViewController ] WillAppear 崩溃处理
  9. linux 那些事儿系列
  10. 编码01--极性编码详解(极性码、单极性码、双极性码产生原理)