基于JavaScript 的边缘计算架构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于JavaScript的边缘计算架构

概念:

互联网的连接速率和连接可靠性,物联网传感器采集的数据无法完全依赖云端服务器来及时处理,因此有必要在传感器的附近配置小巧、省电、廉价、有限处理能力的智能末端系统,将那些时延敏感应用就近在这些末端系统解决,并及时反馈给用户,亦可降低云中心服务器处理和网络通信的负荷,这就是新近被提出的边缘计算(也有称之为雾计算)。

技术研究

从整个物联网系统来看,物联网智能末端系统一般处于整个物联网系统处理信息功能的最末端。它一头连接着采集器和传感器,或者有些采集器和传感器本身就在物联网智能末端系统的设备中;另一头则与云中心服务器交互,通常是提交数据,并获取云中心服务器的综合处理服务。末端系统以无人干涉的自动运行方式为主,配置和设定也应由云中心服务器为主来完成,降低末端系统的平台要求和操作难度;有些末端系统也备有操作界面给用户提供应用服务,比如联网的血压计———体质健康物联网智能末端系统。

末端系统采用工业嵌入式系统是完全可以实现的,缺点是通用性不足。鉴于Android 系统由智能手机开始,得益于其开源、可定制和广大用户熟悉使用的优势,已经渗入到很多智能应用领域,比如平板电脑、智能家电、户外智能屏幕、工业手持机、以及智能仪器等等。从灵活性、通用性、及易用性和操作界面角度出发,Android 系统更适宜构建物联网智能末端系统。为此谷歌也做出了积极回应,专门对Android 操作系统作了精简,并强化了物联网功能,开发出了适用于物联网应用的Brillo 操作系统。考虑到设备的普及性与运用的熟练性,本项目还是采用普通的Android 系统来作研究。

Android 中的应用通常是由Java 开发,打包成APK 安装包发布,通常APK 包安装后,功能就固定了,升级功能则需要重新安装升级包,或升级插件。这对于以自动运行为主的末端系统就不大合适了,尤其是一些安装在人员难以抵达其位置的末端系统。通过主动推送升级包来自动升级是个不错的解决办法,主动推送插件升级效果更好,不过这样的升级过程会影响末端系统的运行,还不够轻量。更值得关注的是Android 应用不论是窗口界面,还是后台服务、消息机制、数据库访问、以及推送升级机制等,都有其特定的框架结构,与运行在PC 和服务器端的应用很少有通用性,难以复用,必须单独开发与维护管理。这不论对物联网系统集成开发供应商,还是采集器和传感器专业开发供应商都会是个不小的负担。

架构设计

基于JavaScript 的Android 物联网智能末端系统,从技术上主要划分层两个层次:底层用JavaScript 封装了Android 设备的功能和服务作为基础,供上层调用;上层用HTML+JavaScript 实现末端系统各种应用模块,并集成为系统。

业务功能方面,末端系统主要包括采集、传输、存储、处理、展示、上传、迁移等功能。其中,采集与传输的基础通信功能,以及驱动Android 设备本身自带的智能传感器需要用Android 的JDK 来实现,还有自动触发的服务也需要JDK 来实现,因此将它们做在底层并用JavaScript 封装,便于上层调用。采集与传输的业务逻辑功能以及处理、展示、上传、迁移等对数据和代码的操作,都可以用HTML+JavaScript 实现,因此将它们做为上层,并划分出合理的层次模块,集成为系统。

如下图所示:

Android 设备对外连接方式主要有USB、蓝牙、WLAN/LAN(ZigBee、RS485、CAN 等连接方式都有成熟的转换模块,以可转化为前述的主要连接方式,会更易使用,成本也很低)。WebView的JavaScript 可以发出HTTP 请求,但无法开启HTTP 服务端,也不能发起或监听Socket 连接,更不能连接USB 和蓝牙,因此这些只有采用Android JDK 来实现,并与JavaScript 打通,交互调用,最后由JavaScript 封装。JavaScript 的封装应与Node.js 的对应模块保持一致,以便与PC 和Server 端的代码通用。底层“JavaScript 封装的基础”可以设计为固定的(除非有技术提高引起版本升级),统一成通用的标准接口,如查找设备(search)、连接设备(connect)、读取设备(read)、写入设备(write)、断开设备(disconnect)、启动服务(start)、关闭服务(stop)等。统一了底层的接口标准之后,在其支撑之上,各应用模块都可用JavaScript 或HTML+JavaScript(有界面时用HTML 搭建)实现。这些是广泛普及的技术,有利于物联网集成开发供应商和传感器专业开发供应商去开发、升级和集成物联网系统。

更重要的是JavaScript 以及嵌入其代码中的HTML 是可以迁移的,甚至迁移到数据库中保存和管理。这样不同智能传感器的数据采集模块可以用函数形式封装;不同智能传感器的数据展示也可以做成页面的上的widget,用JavaScript 绘出,封装在函数里。这些都可由专业的传感器开发供应商来提供,同时开放保存在IndexedDB 中的数据格式,作为给集成开发供应商的接口,由集成商完成物联网系统集成。

上层“HTML+JavaScript 实现的应用模块集成”中的模块主要分成五大类:操作展示界面、数据处理、数据库、数据采集以及数据上传。数据库是上层里的中心,里面的数据可按下文所述的双层对象数据格式保存;操作展示界面由HTML 混合JavaScript构建,可以查看数据、展示结果、设置参数、控制采集和上传。其中,数据采集和数据上传可以由操作界面直接触发,也可以指令后台服务自动按参数规则进行。

(1)操作展示界面:操作展示界面用HTML+JavaScript 来实现,其中HTML 文件内只有些框架,具体内容由JavaScript 来生成,JavaScript 的模块可以由集成开发供应商提供,或委托给专业开发供应商,甚至也可由用户自己开发。

(2)数据采集。末端系统采集智能传感器数据的功能一般需要放在后台自动执行,不受APP 操作干扰,因此有必要用后台的服务来定时触发,或实时不间断运行。因此通过Activity 把Service 也与JavaScript 打通,触发交互,JavaScript 可启动和关闭Service,Service 则可触发JavaScript 驱动net 模块去采集数据。

(3)数据上传。将采集得的数据,按云端物联网服务器要求的格式,发送给云端物联网服务器,可以是自动传,或手动通过界面操作传。上传方式可以用WebService、消息队列、FTP 等。

(4)存储管理。采集的数据可以存储于文件,但是管理起来比较复杂,要管理好数据,最好存于数据库。Android 中有多种嵌入式数据库,如SharePreference、SQLite 等。但是,考虑到与PC和Server 端Web 的代码通用性,采用IndexedDB 来存储数据比较适合。

考虑到接收各种智能传感器的数据,数据格式可以采用分层的方式,上面层规定统一通用的数据格式,下面层再根据智能传感器的种类不同,分别确定不同的数据格式(这也是选用JSON格式的IndexedDB的原因之一),其最简单的数据格式如下:

DB_store_all:{

“type”“: db_exercise_amount”, // 数据库结构类型

“version”“: 1.0.0.0”, // 数据库结构版本

“id”:1, // 数据记录号

“Data”:{......} // 其他自定义的数据

}

这是用于存储采集数据的数据库存储对象(Object Store,相当于关系数据库的表)结构,上面一层规定的就3 个字段,其中类型和版本对下层数据”data”起标识作用,当需要分析其中数据时,可找到对应的分析和展示函数。这样,在新智能传感器接入时,数据库就不用去定义新结构,集成开发供应商也不用去开发专门的程序,而由专业开发供应商提供(在下文的“代码迁移”内容中有进一步说明)。这种集成设备的方式与用设备驱动的方式不同,其接合点在数据库的结构,而不在驱动接口函数,更适用于物联网快速扩展,连接更多的设备。因为即便短期内不能作综合分析,但至少可快速接上设备,采集、存储和展示数据。

(5)数据处理。主要是需要后台自动加工数据,用以满足展示界面使用需要,以及上传服务器对数据的要求。也包括对数据的自动清理等。

(6)代码迁移。这里的代码迁移不是不同平台移植代码,而是要传递分发代码。这种分发不是打补丁升级安装软件,而是需要某个功能时就去获取相应的函数模块,并存于数据库以备调用,不需要了,就从数据库中删去。

JavaScript 函数可保存于变量,并进一步以JSON 格式保存于数据库(这也是选择JavaScript 开发语言为基础骨干的原因之一),因此智能传感器专业开发供应商在供应智能传感器的同时,可以提供采集、处理、甚至展示用的JavaScript 函数模块。Android 物联网末端系统在接入智能传感器时,去下载对应的程序模块以匹配对应的智能传感器。当更换智能传感器时,则更换相应的程序模块。

相关文档
最新文档