找回密码
 立即注册
搜索
查看: 125|回复: 0

JavaScript与物联网结合:探索典型架构及多语言问题

[复制链接]

2万

主题

0

回帖

6万

积分

管理员

积分
61705
发表于 2024-12-5 17:56:21 | 显示全部楼层 |阅读模式
随着语言的流行和物联网领域的兴起,我们可以看到它们结合的可能性,也发现它特别适合物联网的发展。因此,在本文中,笔者主要从以下三个方面进行介绍:

典型的物联网架构以及多种语言带来的问题;仅使用语言的物联网架构;详细解释不同级别的基于语言的物联网架构。

那么,让我们首先看看典型的物联网架构是什么样的。

典型的物联网架构

我们甚至可以认为物联网只是互联网的延伸。与传统的C/S架构相比,它多了一个“数据采集层”,我们称之为传感器层、硬件层等。数据的输出不再只是用户,还来自各种联网设备。物联网不再局限于使用HTTP协议来传输数据,还将使用CoAP(受限应用协议)和MQTT(消息队列遥测传输)协议。

物联网的四个层次

当前物联网应用所需要做的就是控制和数据处理。指令从用户到终端一层层下发,直到硬件被设备执行。数据逐层报告,直至可视化。

因此,与互联网的架构(如图1和图2所示)相比,起点和终点是不同的:指令的终点和数据的起点成为硬件层,而不是最终的用户层。

图1 互联网架构

图2 典型物联网架构

客户端A向服务器发送数据,客户端B从服务器获取A的数据。这样就完成了一个循环。物联网架构就稍微麻烦一些。多一级就意味着多一步。

硬件层的微控制器通过直连的方式采集各种数据,如温度、湿度等。但由于单片机的成本和环境条件等因素,可能无法直接连接互联网。因此,它需要连接一些额外的网络设备来实现这一点。

这些联网设备将负责处理来自各种硬件设备的数据并将其上传到服务器。同时,它将提供无线(如蓝牙、红外)接口作为数据录入。因此,这一层需要有更好的数据处理能力,并且应该能够快速发展。由于这些设备主要做协调工作,所以我们习惯称它们为“协调层”。

物联网多种语言

很多年前,作者曾经做过一个简单的物联网系统:

使用Li作为Web服务框架和REST创建API;为了使用手机作为控制器,用Java编写一个应用程序;使用Pi作为硬件侧的协调层,连接网络并向硬件传输控制信号;在硬件方面使用作为控制器,编写代码非常简单;模块XBee和I2C也用作连接不同模块的媒介;最后需要在网页上制作一个图表来显示实时数据。

为此,我们需要使用五种语言,Java、、C、。而如果我们要编写相应的iOS应用程序,我们也需要使用-C。其他物联网项目也是如此,这是一场灾难。

在做这样一个物联网项目之前,我们需要找到六种不同类型的工程师:设计电路图的硬件工程师、懂硬件的嵌入式工程师、编写服务器端应用程序的工程师、编写Web前端的工程师、以及相应的和iOS工程师。

无论系统本身的协作如何,要找到这么多工程师都不容易。而如果我们只能使用一种语言,将会大大提高开发效率和解决开发者的问题。

语言中的物联网架构

近年来,语言变得特别流行。其受欢迎的原因有很多,例如:

开发UI效率更高,因此可以到处使用;它基于事件驱动的编程模型;容易上手(这是优点也是缺点);因此,React、Unity等框架为开发提供了更多的可能性,被开发者用来开发游戏、VR应用等。

那么,我们只能使用什么样的物联网系统来设计呢?

基于纯物联网架构

如上所述,几年前要找到一种语言能够完成包括客户端和服务器在内的系统是相当困难的。随着客户端(浏览器、移动设备)性能的提高以及Node.js的出现,就出现了这样一种语言,那就是。它不仅可以让我们只使用一种语言来降低开发成本,还可以让我们快速开发出这样一个系统。那么剩下的问题就是如何选择合适的框架来实现不同层次的快速发展。

如图 3 所示,我们可以看到不同级别可用的选项。其中,有些纯粹是为了证明可行;有些可以达到开发效率和运行速度之间的最佳平衡。选择这些解决方案使我们能够实现更快的物联网应用程序开发。



图3 基于纯物联网参考架构服务层

对于服务层,自研的物联网服务器主要采用基于Node.js的解决方案。然而,我们发现越来越多的应用程序正在使用一种架构,不仅可以快速推出可用的原型,而且将来还可以基于此原型轻松添加业务功能。

图4 物联网服务层

图4展示了我们见过的物联网服务层的三种解决方案:

自主开发:即遵循传统的服务器端开发模式,定义自己需要的功能;使用云服务:直接使用成熟的物联网云服务,将所需的各种功能集成在云端;可以看作是在云服务之上的独立开发结合了两者的便利性。

每个解决方案都有自己的特点,适合不同开发能力的项目。但如果想要实现快速开发,理想的方式是采用架构模式。自主开发

出于不同的原因,如保密性、安全性、可扩展性、核心技术等,达到一定规模的公司会采取自主开发的方式。这种开发方法与Web应用程序的开发方法没有太大区别。 CRUD 操作是对数据执行的。与前后端分离架构一样,它采用API作为接口,支持不同的传输协议,如MQTT、CoAP等。

图5 LAN物联网架构

比如作者开源的Lan()就是一个物联网服务器的简化例子。基于Node.js,其架构如图5所示。

使用传统的关系数据库来存储用户信息;使用NoSQL处理不同的传感器数据;提供UI界面供管理员管理用户;在协议上提供HTTP、CoAP、MQTT等支持,方便不同类型的适配。

另外,物联网系统采用NoSQL作为存储介质在存储方面将具有更大的优势。一般来说,物联网系统的数据写入场景是写入的数据远多于读取的数据。同时,由于设备种类繁多,不可能为每种类型的设备创建一个表;或者考虑到大量设备的特点建立一个通用表,但这样的表将来可能不适用。

因此,对于物联网数据,选择这样的NoSQL数据库具有以下优势:

灵活性。采用非结构化数据模型,可以存储和处理任意结构的数据;支持水平扩展。 NoSQL数据库的分布式存储架构带来了优秀的水平扩展能力;实时数据分析。例如,可以通过丰富的索引和查询支持(包括辅助索引、地理空间和文本搜索索引、聚合框架和本机索引)针对传感器数据就地运行报告分析。

然而,这样的系统不可避免地存在开发周期长的问题。如果需要快速验证,那么你应该考虑使用云服务来完成一些功能。

物联网云服务

对于硬件团队来说,直接使用云服务是构建物联网系统更简单、更快捷的方式。使用物联网云服务意味着我们可以直接在硬件层访问传感器数据,并在应用层获取和分析这些数据。此类服务包括相对成熟的AWS IoT(如图6)、Azure IoT等。

图 6 AWS IoT 参考架构

基于AWS IoT,我们只需要在云端定义相应的数据处理规则,然后就可以直接连接硬件侧的服务。但值得注意的是,单一云服务无法提供复杂的功能。这个时候就需要一些额外的服务。

该架构(如图 7 所示)是一种云服务,但它在可编程性和云服务之间做出了折衷。它是一种基于互联网的技术架构概念。应用逻辑并非全部在服务器端实现,而是采用FaaS(as a)架构,通过功能组合来实现应用逻辑。

图7 物联网参考架构

理论上,这些服务提供了一层API封装,并不限制我们使用的语言。使用服务,我们可以拥有更好的快速开发能力,可以使用同一种语言()来完成编程。

在这个过程中,开发者要做的就是:在不同的服务之间传递数据,并且每次只处理下一个服务所需的数据,类似于Pipe和架构模式。例如,典型的物联网应用的数据传输流程如下:

验证设备;转换并存储设备数据;向监控设备数据的其他服务广播通知;后台查询数据;分析数据(人工智能);可视化数据。

只需要少量的编程,我们就可以完成服务器的开发。然后,重点开发硬件层和应用层的业务功能。

应用层



在应用层方面,已经被大量使用。除了传统的桌面浏览器之外,还有很多可以开发的领域。比如移动应用,基于+已经有了成熟的解决方案,而近两三年流行的React就可以被开发者用来完成物联网移动应用的开发。再比如微信小程序,可以直接使用蓝牙连接硬件设备,也可以用它来进行编程。

因此,从目前的Web趋势来看,应用层将是快速启动的主流选择。

在日常应用中,我们可以找到物联网的应用层,它往往作为连接硬件、上传应用数据的协调设备。比如共享单车、智能手环应用等,它们都是通过蓝牙获取数据,并将数据上传到服务器。同时,还有相当多的应用程序运行在桌面客户端上。因此,这个级别的应用有很多类型。

如今,开发者在选择移动技术时会优先考虑跨平台功能(iOS)。在这些跨平台框架中,混合应用框架(  )和React是使用最广泛的两个框架,并且它们都被用作核心开发语言。

它用于渲染页面。因此,与Reavt相比,使用它最大的优势就是可以复用现有Web前端应用的逻辑,并且有大量的图表工具可以直接使用——这一点在物联网中尤为重要应用程序。在混合应用程序框架中,Ionic 是该领域使用最多的 UI 框架。

React 使用原生组件来渲染 UI 组件,不仅可以解决被诟病的性能问题;同时还可以嵌入解决一些复杂的图表显示问题。

但如果只能通过蓝牙交互,可以考虑PWA或者微信小程序。运行在浏览器上的PWA应用可以直接使用Web API,例如NFC、USB,即直接调用浏览器上的原生接口并控制设备。例如,近一年流行的微信小程序也可以访问蓝牙、GPS、指南针、加速度计等硬件接口。同时,用户无需安装费用,开通后即可使用。

另外,NW.js等框架允许开发者直接使用+Node.js模块来开发物联网桌面应用。可以加快UI界面的开发速度,轻松美化UI界面。

硬件层

在硬件层,目前来看,它是最适合原型开发的硬件。此外,还有内置Wi-Fi的开发板。虽然使用的开发板数量较少,也没有如此成熟的生态系统,但未来是有希望的。在嵌入式领域,使用它编写的代码具有可移植性强、事件驱动、原生支持异步等特点。

不幸的是,为了保持上述功能,当前的开发板需要处理相对高性能的处理器,这也导致此类开发板的生产成本较高。不过,幸运的是,大多数用作开发语言的设备都具有连接互联网的网络功能,可以直接用作物联网设备。

目前,该类别的设备包括 、 、 、 Ruff 等。他们的处理器性能相当不错,价格也比较高。但它们可以直接使用,将软件开发工程师屏蔽底层细节、事件驱动、异步特性,带来更好的开发体验。

幸运的是,该公司的开源物联网框架IoT.js只需要64KB RAM和200KB ROM。未来或许可以解决一些制造成本问题。

协调层

当我们的硬件层无法直接连接互联网时,协调层就可以完成这样的功能。作为协调层设备,它应该能够连接一定数量的微控制器,接收它们的数据,并将其上传到服务器;它还应该能够与服务器进行通信,获取一些控制指令,并将这些指令按时发送给服务器。不同的控制器。所以,它需要有更好的处理能力,更多的RAM、ROM等。因此,在这个级别使用它不存在成本问题。我们只需要使用与服务器和应用层类似的知识即可快速将设备连接到网络中心。您还可以直接在本地 Linux 计算机上编写代码并在设备上无缝运行。

图8 物联网协调层

此类应用依靠Node.js引擎实现快速开发。它可以运行在带有嵌入式系统的开发板上,例如流行的Pi、路由器等。

我们只需要一块运行嵌入式Linux系统的开发板就可以完成这样的工作。同时主流的ARM开发板都提供了相应的Linux移植,所以在这个层面上,我们只需要关注业务实现即可。

概括

如上所述,物联网应用程序的架构与Web应用程序的架构没有太大区别。这只是一系列的演变。除了上面提到的一系列快速实践框架之外,目前Web开发中流行的一些开发思想也不可避免地会被引导到物联网系统中:

微服务;集装箱化。

物联网将会从互联网上吸引优秀的开发思路,演化出更好的架构。

作者:黄丰达,软件开发工程师,CSDN博客专家。长期活跃于、专注于物联网及前端领域。出版《自己设计物联网》《全栈增长工程师指南》等六本电子书,翻译《物联网实用指南》。

主编:唐门掌门,欢迎技术投稿、索稿、文章指正。请发送电子邮件至。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【智道时空】 ( 京ICP备20013102号-16 )

GMT+8, 2025-5-9 02:45 , Processed in 0.057820 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表