内网穿透集群技术
场景分析
在嵌入式设备中,代码需要升级,部署环境差异化比较多的情况,会出现在实验室中没有观察到的现象。
这个即使异常情况。出现异常有两种解决方案:
- 第一现场排查,适用于问题非常严重时。
- 第二,设备返厂维护。
- 第三,通过远程操作解决问题。
上述三种方案中,第三者方案是最成本最低,速度最快的方法。对于嵌入式Linux系统来说,可以通过ssh
去登陆到目标设备。那么又由大多数嵌入式设备,是部署在内网环境中的,所以需要内网穿透技术。
特点
通过ssh登陆设备,是偶发性需求,大多数时间,是不需要这样做的。因此需要的是松散、临时性的、非实时的网络拓扑结构
临时性,意味着可以动态申请资源,也就是资源复用。
模型分类
- A方案:使用ssh协议转换,在服务节点将长连接的数据转换成ssh数据。
- B方案:使用辅助协同协议,临时申请一个端口给ssh连接使用。
本文描述的方案,即是B方案。
模式设计
通过ASMQ服务实现大量设备无耦合连接。使用daemon进程解析协议,触发ssh临时通道的建立。 下面以frp为例。
ASMQ选取
主要mq指标对比:
管理平台需要的指标:
管理平台对嵌入式设备的控制,不是硬件(如马达,流水线,机械臂)这里实时性要求极高的场景,而是ssh这种,只需要
最终结果可用的非实时性消息传递机制。因此ms级的响应时间是够用的。
在RocketMQ和kafka之间选择。 java语言相对是一种比较普遍的开发语言,在性能差不多的情况下,RocketMQ具备回溯机制
,也就是有更高的可控性/可靠性。因此在这四种ASMQ种,可以选择RocketMQ作为消息中间件,来构建设备管理平台。
在实际工作中,如果是已经出货很多的设备,java部署和环境配置比较麻烦。这里推荐一个c 版本写的消息队列组件:zeromq。有java、c++、python版本。
c++版本调试通过的demo
基于本设计模型的源码实现 github 下载链接.