这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
一、前言
分层架构,要考虑什么问题?
- 可靠性:针对
IM
系统,重点消息可靠投递,消息不丢失。(超时、重传、确认) - 可用性:能否提供
7 * 24
小时服务? - 一致性:数据冗余必然引发一致性问题,如何解决?
- 扩展性:加机器能增加存储量、吞吐量嘛?
- 均衡性:同一个集群各个节点负载均衡嘛?
架构分层如下:
- 应用层:
IM
系统可以支持很多业务的,客服系统,销售系统,类似钉钉的企业内部的IM
应用 API
层:Android/iOS SDK
、H5 WebSocket
- 接入层:连接建立、接收请求、返回响应等过程
- 功能层:
IM
系统是提供很多的功能:接收消息、推送消息、群聊、红包、离线消息、安全认证等等 - 存储层:两种消息存储:即时消息和离线消息
接入层
为什么 TCP
接入系统和 WebSocket
接入系统要分开开发和部署呢?
TCP
接入系统:主要是对接大量的C端用户,比如说电商APP
每天会活跃百万用户,每天都有几十万的用户会来跟你的TCP
接入系统进行连接,跟客服进行沟通。
TCP
接入系统面对的百万级甚至千万级的C端用户,负载很高的,所以部署大量的机器
WebSocket
接入系统主要是对接公司里的几十个,或者几百个客服而已,主要是客服会通过浏览器打开一个网页,网页通过HTML5
的WebSocket API
,跟你的WebSocket
接入系统建立连接。
WebSocket
接入系统面对的可能仅仅是几百个公司内部的客服而已,负载很低,所以可能就不需要部署大量的机器
使用的协议和技术也不太一样,部署的机器需求也不太一样,所以开发需要分开开发。