随着科技发展,无论是工作还是生活即时通讯已成为了大家传输信息必不可少的工具。既然要承担传输消息的重任,传输的可靠性自然是即时通讯系统中是最为基础、也是最核心的部分之一,同时也是衡量通讯系统的质量的重要指标。那即时通讯系统是怎么传输消息的呢?那下面我们先来了解一即时通讯消息传输的模型吧。
常见的即时通讯消息传输的模型,如快递式系统模型和邮件服务模型。
什么是快递式系统模型呢?
快递式系统模型完全可以用生活中快递运输为例进行理解,把ClientA比作为寄件人,Server比作快递公司,ClientB比作收件人。
快递寄送每一个阶段其实都是相对独立的,比如说寄件人把快递给到快递公司,快递公司运送快递给收件人;如果快递收取、运送、派送等过程出现意外导致丢失,收件人将无法获取到快递,并且这种丢失是无法挽回的。
因此快递式系统模型的消息到达率难以有效保障,容易由中间环节、程序设计等问题导致消息丢失,RTX腾讯通采用的就是这种模型。
邮件服务是一种历史悠久的通讯系统,这种模型是建立在服务器持久保存数据的基础上。
作为发送方,整个邮件的发送过程是一个完整的事务,只有当服务器收到邮件内容并且保存到磁盘才会告诉发送方发送成功,发送方如果收不到成功的结果,就会在邮件客户端给予提醒,让用户选择重新进行发送;
作为接收方,邮件客户端会定期检查新邮件,将服务器的数据同步到到本地,标记出哪些是新邮件之后,向用户弹出新邮件提醒。
这种模式的优点在于,模型简单清晰,发送方和接收方各司其职,发送和接收的可靠性得以充分保障。
有度作为专业的企业级即时通讯平台,对于消息传输的可靠性方面自然也是极致追求的。为了保障消息传输的可靠性,在分析快递式系统模型和邮件服务模型利弊之后,参考邮件服务模型,结合消息服务器漫游,并将邮件轮询机制改造为新消息push(参考Mazilla Simple Push)通知,系统采用微服务模式设计,支持服务器集群式部署及扩展,多种措施并用,从而保障消息到达率。
简单来说,从以下几个方面去保障消息可靠性:
1.消息服务器漫游。消息是存储在服务器上的,消息接收方是可以二次获取的,比如说更换了设备登录,也是能正常的拉取和看到之前的聊天记录;
2.客户端发送保障机制。发送方向服务器发送新消息时,当客户端调用接口失败或超时会采用多次重试机制,只有消息落地成功,服务器才会回复发送方,消息发送成功,即使是发送失败,客户端也是有明确的提示;
3.Simple Push 模型与RESTFUL API结合服务。TCP长连接通道只负责极少量的数据通信(登录、事件通知),主要业务数据通过RESTFUL API(https连接,支持复用)。对于移动网络或不稳定的网络环境,轻量级的TCP通讯和短连接方式能够规避大部分的链路不可靠问题;
4.微服务模式设计。将业务相对独立的拆分为多个服务,可以分机部署,这种模式能够有效的实现故障隔离,提升整体服务的可靠性和可用性;
5.消息通知保障机制。当会话中有新消息产生,服务器通给接收方实时下发新消息通知,客户端接收到通知后,再从服务器拉取消息内容。服务器下发通知需要客户端确认,如果在无确认时,服务器会进行多次间断式重发通知;
6.客户端获取消息保障机制。客户端收到新消息通知时,获取消息时会自动补全完整的消息记录。在网络发生波动时,客户端会重新建立连接并立即拉取所有的未读会话;而且会自动校验该会话是存在消息空洞,如果存在,一同向服务器拉取补全。