技术干货丨MixIOT 数据入栈交换服务组件——入栈机(Dixie)
入栈机(Dixie):
Dixie是MixIOT体系中的数据入栈交换服务组件,简称入栈机。在MixIOT体系中,除了可以使用智物联的数据采集终端,也支持第三方的数据采集终端,而且不要求第三方的数据采集终端遵循MixIOT体系的数据报文规则。那么,这些第三方数据终端采集到的数据,怎么能够在MixIOT系统中进行数据处理呢?这就需要用到Dixie(入栈机)来帮忙了。
入栈机服务可以理解为MixIOT的前置翻译服务,可以把任何第三方数据采集终端上报的任何格式的数据,转换成符合MixIOT规范的数据格式。这样,经过入栈机的数据,实际上就变成了符合MixIOT规范的数据。
图1 入栈机的使用场景
图1就是一个比较典型的使用场景:通过第三方的OPC UA/DA数据采集终端,采集CNC数控加工中心的数据。这个OPC UA/DA数据采集终端所采集的数据,是按其他的标准来的,并不符合MixIOT体系的数据规范,那么,就需要先把这个数据报文给MixIOT Dixie,让入栈机把数据进行翻译,变成符合MixIOT体系规范的数据。
Dixie并不限于对接第三方的数据采集终端,而是可以对接任何形式的数据来源,包括来自其他平台的数据、ERP/MRP的数据、CRM的数据、MES的数据等。
Dixie的管理:
Dixie是MixIOT的一个标准组件。如果需要使用Dixie,需要在MixIOT Admin里面去创建Dixie项目。创建完成后,随时就可以把Dixie服务给启动起来,如图2所示。
Dixie的设置相对是比较复杂的,要真正弄清楚这些设置到底是怎么一回事,就需要对MixIOT系统有更加深入的了解。下面就来解释一下MixIOT是怎样接收数据的。
图2 入栈机项目的启动
Gards服务:
实际上,我们总在说的MixIOT系统,不管是如来方略云部署,还是如来方略柜部署,它都有一个专门用来接收数据的服务组件,叫Gards组件。是通用远程数据服务,这是一个基于MQTT协议的数据交换服务。Gards服务可以用来接收所有适配器和UFS传送过来的数据。
Gards有两个版本,分别是Gards Pagosa(单主机版本)和Gards Falconer(集群版本),在部署MixIOT的时候可以根据实际需要选择。一般来说,对系统整体可靠性要求很高的情况,可以部署Gards Falconer版本;对普通的工业物联网应用,Gards Pagosa一般都可以满足需要。
虽然Gards支持MQTTV3/5协议,但它只能接收符合MixIOT规范的MQTT数据,这是因为MixIOT系统把标准的MQTT服务做了一些扩充和改变,这个问题就不做详细描述了,大家可以参考智物联的其他公开技术资料,这些调整和改变是为了让服务更加高效可靠。
Gards服务除了接收来自适配器和UFS的数据(“数据上行”),也可以给适配器发送数据(“数据下行”),如图3所示。关于数据下行可以参考《反向控制》一章。
我们注意到,在Dixie的配置里面,需要配置Gards服务器。这是因为Dixie要知道,这些第三方的数据翻译好后,要把它们发到什么地方。
图3 Gards服务
一旦数据进入了Gards服务,后面就是执行标准的MixIOT数据处理流程了。
Garoute服务:
前面介绍了MixIOT系统中的Gards服务。对一个复杂的系统来说,比如数据终端有几十上百万个,甚至更多,那么一个Gards服务就很难应付了。所以,一个MixIOT系统允许同时存在多个GardsPagosa服务,或者一个GardsFalconer服务。当一个系统中存在多个Gards服务,那Dixie的数据该送去哪一个Gards呢?
如果我们把所有的数据都死命往一个Gards里送,就很可能导致这个Gards忙死,别的Gards闲死,让系统失去平衡而出现问题。Garoute就是用来解决这个问题的,Garoute实际上是Gards Route(通用远程数据服务路径)的意思,它可以告诉Dixie,什么数据往哪里送。这就是为什么我们在MIXIOT Admin的Dixie服务中,看到有Garoute这个选项。如果MixIOT里只有一个Gards的话,就可以不去管这个选项;而如果存在多个Gards的情况,这个选项就必须要指定,否则,那些翻译好的数据就不知去向了。
图4,就解释了Garoute和Gards之间的关系,Dixie首先需要向Garoute询问,这些数据发给谁,在得到回复后,就按回复的走。需要说明的是,Dixie并不是每次发生数据都要问Garoute这个数据发给谁,Dixie跟Garoute之间是一个通信管道,该切换到哪一个Gards,Garoute会随时通知,在没得到新的通知之前,还是会按之前指定的选项来发。
图4 Garoute和Gards
这里稍微解释一下,多个Gards Pagosa(单主机版本)和一个Gards Falconer(集群版本)是两回事,多个单机版本的Gards算多个Gards,Garoute需要去管理负载平衡;而集群版本的Gards虽然也是由多个Gards构成,但在逻辑上仍然只能算一个Gards。这有点像我们安装服务器的时候,用了两个硬盘做镜像一样,如果一个硬盘坏了,另一个硬盘还能接着工作,但容量还是一个硬盘。所以,集群Gards的能力并不会比单机版高。
Dixie模板和脚本:
MixIOT里面几乎所有的东西,都是由模板和脚本构成的。映射表、代码库等各类组件莫不如此。
Dixie也不例外,也有模板和脚本。Dixie模板是用来描述和解析那些来自第三方的数据是什么样子的,而Dixie脚本是用来告诉Dixie服务,这个样子的原始数据需要用什么方法变成MixIOT能接受的样子。
除了模板脚本和前面介绍的Gards、Garoute,还有不少其他的东西,比如源网关列表之类的,这些都是具体使用的细节了,有需要可以参考详细的使用手册。

