【IM】架构

678 阅读2分钟

这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战

一、前言

分层架构,要考虑什么问题?

  1. 可靠性:针对 IM 系统,重点消息可靠投递,消息不丢失。(超时、重传、确认)
  2. 可用性:能否提供 7 * 24 小时服务?
  3. 一致性:数据冗余必然引发一致性问题,如何解决?
  4. 扩展性:加机器能增加存储量、吞吐量嘛?
  5. 均衡性:同一个集群各个节点负载均衡嘛?

架构分层如下:

  • 应用层:IM 系统可以支持很多业务的,客服系统,销售系统,类似钉钉的企业内部的 IM 应用
  • API层:Android/iOS SDKH5 WebSocket
  • 接入层:连接建立、接收请求、返回响应等过程
  • 功能层:IM 系统是提供很多的功能:接收消息、推送消息、群聊、红包、离线消息、安全认证等等
  • 存储层:两种消息存储:即时消息和离线消息

im-分层.png

接入层

为什么 TCP 接入系统和 WebSocket 接入系统要分开开发和部署呢?

  • TCP 接入系统:主要是对接大量的C端用户,比如说电商 APP 每天会活跃百万用户,每天都有几十万的用户会来跟你的 TCP 接入系统进行连接,跟客服进行沟通。

TCP 接入系统面对的百万级甚至千万级的C端用户,负载很高的,所以部署大量的机器

  • WebSocket 接入系统主要是对接公司里的几十个,或者几百个客服而已,主要是客服会通过浏览器打开一个网页,网页通过 HTML5WebSocket API,跟你的 WebSocket 接入系统建立连接。

WebSocket 接入系统面对的可能仅仅是几百个公司内部的客服而已,负载很低,所以可能就不需要部署大量的机器

使用的协议和技术也不太一样,部署的机器需求也不太一样,所以开发需要分开开发。