分布式消息通道广泛应用在很多公司,尤其是在移动App和服务端需要上传、推送大量的数据和消息时。比如打车App每天要上传大量的位置信息,服务端也有很多订单要及时推送给司机;此外,由于司机是在高速移动过程中,所以网络连接的稳定性也不是很好这类场景给消息通道的高可用设计带来很大的挑战。
一个典型的移动Ap的消息通道的设计架构图,这种设计比较适合上传数据量大,并且高速移动导致网络不太稳定的链路。
链路1是Client和整个服务端的长连接链路,一般采用私有协议的TCP请求。如果是第一次请求还会通过2做链接认证,认证通过后会把该Client和接入集群的某个服务器做个KV对,并记录到路由表里这可以方便下发消息时找到该链接。经过链路4,上行消息处理集群会将TCP请求转成普通的HTTP请求,再调用后端业务执行具体的业务逻辑,或者只是上传一个数据而已,不做任何响应。如果业务有数据需要下发,会经过链路6,把消息推送到消息下发处理集群,由它把消息推送给Client。
消息下发集群公査向链接路表,确足当前Cent的链按在言,再通该服务器把消息推送下去。这里常见的问题是当前Client的网络不可达,导致消息无法推送。在这种情况下,消息下发处理集群会保持该消息,并定时尝试再推送;如果Client重新建立连接,连接的服务器也会随之变化,那么消息下发集群会去查询链接路由表再重新连接新的KV对。
链路9是为了处理Client端的一些同步请求而设计的。例如Client需要发送一个HTTP请求并且期望能返回结果,这时Client中的业务层可能直接请求HTTP,再经过ClientI中的网络模块转成私有TCP协议,在上行长链请求集群转成HTP请求,调用后端业务并将HTTP的response转成消息发送到消息下发处理集群,异步下发给Client,到达Client再转成业务的HTTPresponse。这种设计的主要考虑是当HTTP响应返回时,如果长链已经断掉,该响应就没法再推送回去。因此,这种上行同步请求而下行异步推送是一种更高可用的设计。
从整体架构上看,只有接入集群是有状态的,其他集群都是无状态的,这也保证了网站设计集群的扩展性。如果接入点在全国有多个点,并且这些点与服务端有专线网络服务,接人集群还可以做到就近接入。
>>> 查看《分布式网站消息通道服务的设计》更多相关资讯 <<<
本文地址:http://www.phpweb.com.cn/news/html/4459.html