图片来源:pexels.com
作者:梁鑫(资深架构师,多年云原生,微服务架构经验,开源SIA系列产品owner)
前言
今年开始,由于工作内容调整。开始负责美股港股产品的研发。之前的两篇文章,重构 - 在美股行情系统的实践和美股交易架构实践分享了行情系统的重构和交易系统的建设。按照计划,接下来要改造的是 APP 的信息推送了。
APP 信息推送
目前行情产品采用的是定时请求机制,通过 HTTP 请求每隔若干时间从后端服务拉取一次行情数据,在这个时间间隔内数据是不会发生任何变化的。但当我们打开竞品比较时,发现他们的行情数据是以肉眼不可捕捉的速度变化的。明显这不是定时请求能够达到的效果,一定是通过建立 TCP 长连接,把数据源源不断的从后端服务推送到了用户的手机上。
1
消息推送的方式选择
熟悉信息传输的朋友肯定发现这种需求不需要实时返回数据,是典型的异步传输。一般可以采用两种方式来处理。一种是后端服务直接采用 TCP 方式传输到客户的手机上。另一种就是选择合适的消息服务器,让后端服务和客户手机进行解耦。明显我们会选择后者。
MQTT 协议基本是手机端进行消息通信的标准做法,让我们先了解一下消息队列遥测传输协议,它是一种基于发布订阅的轻量级通讯协议,该协议构建于 TCP/IP 协议上,最大优点在于以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
2
选择何种 MQTT 产品
实现 MQTT 协议的消息产品不少,选择哪一款产品比较合适?我们的选择是 EMQ,为什么选择 EMQ 呢,我直接把 EMQ 官网描述照搬下来大家可以作为参考。
EMQ 设计目标是实现高可靠,并支持承载海量物联网终端的 MQTT 连接,支持在海量物联网设备间低延时消息路由:
稳定承载大规模的 MQTT 客户端连接,单服务器节点支持 50 万到 100 万连接。
分布式节点集群,快速低延时的消息路由,单集群支持 1000 万规模的路由。
消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。
完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持。
2.1
EMQ 的高可用方式
MQTT 服务器肯定需要支持高可用,我们是不能容忍单点故障的,但 EMQ 的高可用方式需要注意一个问题,EMQ 的集群需要一个 master 节点和若干个 slaver 节点,将 slaver 节点 join 到 master 节点组成集群,当 mater 节点宕机后需要 client 端进行重新连接才能正常 running。
EMQ 的高可用架构图如下:
3
使用 EMQ 服务需要考虑的三个问题
当我们把 EMQ 引入到我们的系统后,我们需要考虑三个潜在的问题。