之前分享了雾计算的特点和挑战和开源雾计算软件框架FogLAMP,本文来讲讲FogLAMP架构分析。
作者:与子同袍
首发:物联网前沿技术观察
1.总体架构
FogLAMP这个雾计算框架(实际上也可以看做边缘计算框架),广泛使用了几个软件开发中的设计范式:
- 采用了当前流行的微服务框架,解耦系统不同组件,使得系统容易开发和扩展和部署。
- 广泛使用插件架构,用于扩展系统的各种功能。
- 通过进程调度实现特定的任务。
FogLAMP的微服务主要包括:
- 核心服务:管理其他服务、对外的RESTful调用API、任务调度和监控。
- 南向服务:FogLAMP和南向设备之间的通信。
- 存储服务:系统配置和度量指标的持久化,采集到的设备数据进入历史数据库前的缓冲。
FogLAMP广泛使用插件组件,以增加实现的灵活性:
- 南向插件:开发人员遇到新的设备协议,可以开发针对该协议的南向数据采集插件。
- 北向插件:如果需要把数据存储到新的历史数据库或者第三方系统,可以根据北向插件接口开发新的北向插件。
- 数据存储插件:数据存储插件可以让用户使用不同的数据库来存储元数据和传感器数据。
- 身份验证提供者插件:可以根据实际部署环境的身份认证机制,比如LDAP,Active Directory等,开发不同的身份认证插件。
FogLAMP中广泛使用的另一个设计范式是通过任务进程调度来执行特定操作。FogLAMP核心包含一个调度程序,它可以根据时间调度或事件触发来执行任务进程。
进程调度管理的任务有:
- 把数据从FogLAMP发送到历史数据库。
- 周期性地从FogLAMP数据缓冲区清除数据。
- 采集统计指标进行历史数据分析。
- 定期执行FogLAMP环境的备份。
下图展示了FogLAMP的架构:
- 紫色的组件是插件。插件是使FogLAMP得以扩展的轻量级模块。有各种类型的插件:南向、北向、存储引擎、过滤器、事件规则和事件转发机制。插件可以用Python(用于快速开发)或C++(用于高性能)编写。
- 绿色的组件是微服务。值得注意的是,下图中的不同的微服务既可以全部部署到同一个操作系统环境内,也可以分布在多个计算节点之中。比如南向模块可以部署在stm32单片机上,核心模块和存储模块部署在嵌入式物联网网关内,而北向模块和事件通知模块则部署在雾计算节点上。这个就是微服务带来的好处了,可以把系统不同组件灵活部署到边缘层、雾层或者云端。
- 红色的组件是RESTful API,用于对外暴露微服务的各种能力,供管理界面或者用户界面调用。
2.FogLAMP核心微服务
核心微服务协调所有的FogLAMP操作。核心微服务只能运行一个实例。
核心微服务功能包括:
- 调度程序:调度程序用于启动不同任务进程。
- 配置管理:维护所有FogLAMP组件的配置信息。对所有FogLAMP组件进行软件更新。
- 监视程序:监视所有FogLAMP组件,如果发现问题(如微服务响应缓慢),尝试自我修复。
- REST接口:为所有组件的功能对外暴露外部管理和数据API。
- 备份及恢复:系统的备份和恢复功能。
- 审计日志:维护用于审计目的的系统更改日志。
- 证书存储:维护不同服务的安全证书,包括南向服务、北向服务和API的安全证书。
- 用户管理:维护系统管理员的身份验证和权限信息。
- 资产浏览:允许查询存储的资产数据。
3.存储微服务
存储微服务提供两个主要功能:
- 存储FogLAMP的配置信息和运行时状态。
- 设备数据的存储/缓冲。存储服务是插件式的,所以如果安装到硬件资源有限的环境上,可以选择嵌入式数据库SQLite这个存储插件;而在并发请求数量较多、占用空间较大的运行环境中,则有Postgresql存储插件。如果装在边缘设备上,则可以选择存储在内存临时文件/tmp中。
4.南向微服务
南向微服务提供FogLAMP与南向设备如传感器、执行器或PLC的双向通信。
南向微服务通常部署为始终运行的服务。
5.北向微服务
北向微服务在FogLAMP平台和位于本地或云中的大型系统之间提供数据和元数据的双向通信。
北向微服务通常被部署为一次性任务,周期性地发送已经过批量处理的数据。但它也可以部署为连续运行的服务。
6.过滤器
过滤器是用于修改经过FogLAMP的数据流的插件。
过滤器可以部署在数据入口(在南向微服务中),也可以部署在数据出口(在北向微服务中)。
通常,入口过滤器用于转换或丰富数据,出口过滤器用于减少流到北向管道和基础设施的流量,即通过压缩或减少流出的数据。
可以级联多个过滤器形成管道。管道一旦配置好,可以应用到多个南向或北向服务。
有了过滤器,就可以对数据进行实时计算。下面是过滤器的一些例子:
- 计算公式:对一个或多个被监控设备的数据项,计算任意数学公式。
- Python脚本:对一个或多个被监控设备的数据项,运行用户指定的python代码。
- 元数据:对数据应用标记,以记录它来自的设备/位置,或将数据加上产品组件的标签。
- 均方根/峰值:通过生成n个样本的均方根(均方根)来聚合振动数据。
- 快速傅里叶变换:对振动数据进行快速傅里叶变换(FFT)以发现异常振动。
- 死区:只发送更改了超过指定阈值的数据。
- 限流:为节省流量,降低服务器压力,把采集的数据缓存在本地而不发送。只有当发生故障时,才会发送之前缓存的数据。
7.事件引擎
事件引擎维护告警规则和告警规则触发时的动作。每个规则订阅所需的设备数据,并对其进行计算。如果触发了告警规则,则执行其关联的动作。
- 数据订阅:告警规则有两种类型,一种是根据单个数据点进行触发,另一种是根据指定时间窗口的最小值、最大值或平均值触发。
- 告警规则:最基本的告警规则计算值是否超过/低于指定的阈值。如果用了上面说的计算公式过滤器插件,那么就可以跨一个或多个被监控设备计算任意的数学公式。Python3.5插件可对一个或多个被监控设备,运行用户指定的Python脚本。
- 动作:当告警规则触发时,会自动执行动作对应的Python脚本:比如用来创建任意数据,或发送电子邮件/slack/hangout消息。
8.REST API接口
FogLAMP API接口有两大功能:
- 提供管理FogLAMP的管理接口;
- 提供外部与FogLAMP进行数据交互的接口。
9.用户管理界面
用户管理界面是FogLAMP自带的系统管理界面。当然,用户管理界面所有的功能都是通过调用REST API实现的,因此FogLAMP也可以通过脚本或其他管理工具进行管理。
管理南向服务插件
管理北向服务插件
用户管理界面包含如下功能:
- 健康检查:检查服务是否健康有响应。查看进出FogLAMP的数据。
- 设备和读数:显示设备和对应的采集到的数据。
- 南向服务管理:管理南向服务插件。
- 北向服务管理:管理北向服务插件。
- 告警通知:管理事件引擎的告警规则和告警通知机制。
- 证书存储:管理各种证书。
- 备份和恢复:备份/恢复FogLAMP。
- 日志:查看系统日志、通知日志、审计日志。
进出FogLAMP的数据统计
采集到的设备的实时数据
推荐阅读:
更多物联网,边缘计算相关技术干货请关注我的专栏物联网前沿技术观察
申请加入物联网技术研讨大佬微信群,请加微信号:iot1999。