写点什么

一个简单的物联网设备接入网关高可用方案

用户头像
凸出
关注
发布于: 2020 年 07 月 20 日

分享一点物联网设备高可用分布式接入网关的实践和思考,欢迎拍砖。



背景



目前从事物联网方面的平台软件研发工作,负责设备接入网关的研发和维护。初期基于Netty构建了一个自定义协议的TCP长连接维持程序(gateway),数据通过Http上报到业务程序(app)处理和入库,接受app的Http请求来给设备发送控制命令。随着业务的发展,出现了以下问题:



  1. 需要升级gateway时,必须kill再启动,造成设备集体掉线,业务短时间不可用。所以我们总是半夜悄悄的干活。

  2. 系统内存爆掉后,出现单点故障。



故,我们考虑使用集群解决单点故障和灰度发布。



负载均衡



由于设备统一通过域名+固定端口与接入网关建立并保持长链接。我们买不起硬件负载均衡设备,所以采用nginx实现软负载均衡功能。借助nginx的stream模块,配置代码如下:



nginx.conf

http{
...
}
stream{
upstream gateway_proxy {
server 192.168.1.3:18081 weight=2;
server 192.168.1.4:18081 weight=1;
}
server {
listen 6060;
proxy_connect_timeout 5s;
proxy_timeout 10m;
proxy_pass gateway_proxy;
}
}



其中``weight``配置负载程序的分配权重。



命令下发



接入网关通过集群部署后,数据还可以通过Http正常上报,但app的命令下发就成了问题。怎么才能找到对应的channel把消息发送出去呢:



  1. 设备与gateway建立链接后,上报设备消息至app,携带接入网关信息(ip,端口)。

  2. 设备命令下发时,查询接入网关信息,然后再发出命令消息。



至此,一个简单的设备接入高可用方案已经介绍完了。



发布于: 2020 年 07 月 20 日阅读数: 120
用户头像

凸出

关注

技术凸出->架构凸出->业务凸出->腰椎凸出 2017.10.20 加入

还未添加个人简介

评论

发布
暂无评论
一个简单的物联网设备接入网关高可用方案