一个简单的物联网设备接入网关高可用方案
分享一点物联网设备高可用分布式接入网关的实践和思考,欢迎拍砖。
背景
目前从事物联网方面的平台软件研发工作,负责设备接入网关的研发和维护。初期基于Netty构建了一个自定义协议的TCP长连接维持程序(gateway),数据通过Http上报到业务程序(app)处理和入库,接受app的Http请求来给设备发送控制命令。随着业务的发展,出现了以下问题:
需要升级gateway时,必须kill再启动,造成设备集体掉线,业务短时间不可用。所以我们总是半夜悄悄的干活。
系统内存爆掉后,出现单点故障。
故,我们考虑使用集群解决单点故障和灰度发布。
负载均衡
由于设备统一通过域名+固定端口与接入网关建立并保持长链接。我们买不起硬件负载均衡设备,所以采用nginx实现软负载均衡功能。借助nginx的stream模块,配置代码如下:
nginx.conf
其中``weight
``配置负载程序的分配权重。
命令下发
接入网关通过集群部署后,数据还可以通过Http正常上报,但app的命令下发就成了问题。怎么才能找到对应的channel把消息发送出去呢:
设备与gateway建立链接后,上报设备消息至app,携带接入网关信息(ip,端口)。
设备命令下发时,查询接入网关信息,然后再发出命令消息。
至此,一个简单的设备接入高可用方案已经介绍完了。
版权声明: 本文为 InfoQ 作者【凸出】的原创文章。
原文链接:【http://xie.infoq.cn/article/8ec7c9cbce6b52e2f8234ecd4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论