官方介绍:Neuron 2.0 系统架构设计介绍 | EMQ

 官方文档:产品概览 | Neuron 文档

一、neuron总体架构

产品的定位为数据的收集和转发,和其他第三方应用程序关联,需要轻量化,聚焦数据收集转发和协同,架构以消息的路由转发为核心设计,所有的跟外部交互的(驱动协议,mqtt,第三方应用)都以消息路由的方式链接起来,很灵活,可以把任意一个接收的消息(南向)传递给任意一个订阅这个消息的设备或第三方(北向),就像这张图的样子,是以Msg Router为核心,其他所有的插件等都是适配器,适配器负责把驱动信息转成消息,并由路由转发给其他的北向应用,除此之外,还有neuron manager负责所有框架的管理工作,还负责提供对接Dashboard,为其提供对应服务(API接口),还有提供CLI命令行的方式进行系统信息查看,所有的driver和第三方应用等都是以插件的方式对接adapter上,都是相应的动态库(.so文件),支持热更新(比如一个driver(.so文件)有bug,可以不需要关掉设备即在设备运行时,替换对应的driver)

二、数据流的汇聚和分散

多个南向设备(协议驱动)采集的数据可以都转发到同一个北向应用(MQTT,第三方应用)

一个南向设备(驱动协议)的数据可以将数据转发给多个北向(MQTT,第三方应用)等

综合起来就是可以实现多对多的关系,就是刚才讲的消息的任意转发处理。

三、层次结构图

从这个层次结构图来看,系统实际上是以NNG这个库为核心库,并以此为底层库来设计的。

NNG是一个高性能的,能充分利用多核的acter模型的一个异步并发库,完全开放源码的一个库,好处是很轻量,编译出来的库文件比较小,本身没有依赖第三方库,依赖简单,容易移植,本身也很强,有各种传输接口和传出协议的支持,对一些网络接口和进程间通信,线程间通信都有现成的程序支持。

NNG:https://nng.nanomsg.org/man/v1.5.2/index.html

CSDN介绍:nng 概述_octopusHu的博客-CSDN博客

回到层次结构图中,像一些Dashboard,Driver,MQTT这些东西都是作为扩展产品来做,好处是核心框架层尽量的小,尽量简单,应对各种复杂的需求,根据用户需求来控制系统大小,可伸缩。需求小,库小,需求大,插件多,库相对就多一些,SDK可以自定义协议驱动

最上层是围绕配合网关系统做一些服务,不放在一起。

四、例子Neuron和kuiper的协同工作

通过nng框架的sub和pub模式进行neuron数据采集和ekuiper流处理的协作,处理后的数据可以发送给neuron或者第三方应用。

五、Massage Router设计

这个机制就是,由plugin采集数据,通过adapter转换内部标准消息送给路由控制,消息派发会查找一个表,记录着数据的流向,就是哪个需要对应的数据,就给发过去,实现一开始讲的多对多,一对多,多对一的功能,性能非常高,创建actor非常快,消息转换非常快。

六、manager设计

Manager本身设计,重要的是消息转换管理, 管理各种消息,另一个是插件管理,管理所有插件,状态管理和配置管理,登录管理,webserver和命令行交互,licence manager管理商业化的东西,就是现在开发的各种插件。

七、apapter和plugin设计

Forward Actor插件会和plugin交互,通过接口发送消息给用户实现的插件或内置插件,插件内可以有独立的线程做一些发送接收,插件接收到新的数据的时候会调用adapter提供的callback函数把接收到的数据发送给backward actor插件,之后会转成内部标准的消息,之后转发,这是完整的插件交互流程。

右边的结构是adapter插件和plugin,actor之间的关系。

八、Message数据转换的设计

这个就是刚才提到的数据转换的设计,有一个统一的一个数据类型格式,用来传输我们接收到的数据流,在adapter接收数据后,通过data canverter数据转换器转换成对应的统一的数据类型,之后通过router转发到另一个adapter,之后又通过数据转换器转换成标准的第三方通信的数据结构,完成数据转发。

好处:内部的数据结构不会因为插件驱动的变化而对系统本身去做修改,每加一个驱动就需要加载一个新的适配器,可以去很自然的去支持多种数据结构。

九、Neuron的plugin的两种工作模式

1.一体的,neuron和插件会是在一个进程中运行,插件可能是一个独立线程再跑

2.用户自己写的或者私有的驱动,没有源码,作为独立进程跑,只能是插件代理,用来链接双方数据交互,感知到的还是插件,不感知对应应用程序

十、SDK设计

提供一些抽象的比较好的函数,功能比较好的一些函数开放出来,用来协助用户开发,形成实例,之后可以加载成plugin,之后neuron通过plugin manager把这个libplugin加载出来,之后用户可以动态管理对应插件库。

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。