资讯详情

phodal大神帮你理清物联网开发架构

c1577a8a8654f4f99d04b91df86e6fb4.jpeg

作者 | phodal

责编 | 唐门教主

微信公众ID | csdn_iot

随 JavaScript 随着语言的普及和物联网领域的兴起,我们可以看到它们结合的可能性,但也发现它特别适合物联网的发展。因此,本文将主要从以下三个方面进行介绍:

  1. 物联网架构典型,语言问题多样;

  2. 只使用 JavaScript 语言物联网架构;

  3. 详解基于 JavaScript 不同层次的语言物联网结构。

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

1

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

2

目前的物联网应用程序需要做的是控制和数据处理。指令由用户逐层发送到终端,直到硬件终端由设备执行。数据是逐层报告,直到可视化。

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

图 1 互联网架构

图 2 典型的物联网架构

客户端的数据 A 发送到服务端,客户端 B 然后从服务端获取 A 这样,数据就完成了一个回路。物联网架构有点麻烦,多了一个层次,多了一个步骤。

硬件层上的微控制器通过直接连接收集各种数据,如温度、湿度等。由于微控制器的成本、环境条件等因素,它可能无法直接连接到互联网。因此,需要连接到一些额外的网络设备。

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

3

使用多种语言的物联网

多年前,作者制作了一个不复杂的物联网系统:

  1. 使用 Python 里的 Django 作为 Web 服务框架,Django REST Framework 创建 RESTful API;

  2. 使用手机作为控制器 Java 写一个 Android 应用;

  3. 使用 Raspberry Pi 作为硬件端的协调层,用于连接网络,并传输控制信号给硬件;

  4. 使用硬件端 Arduino 作为控制器,写起码很简单;

  5. 还使用了 ZigBee 模块 XBee 及 I2C 不同的连接 Arduino 模块介质;

  6. 最后,需要在网页上制作图表来显示实时数据。

因此,我们需要使用它 Python、Java、javascript、C、Arduino 五种语言。如果要写相应的, iOS 还需要应用 Objective-C。对于其他物联网项目来说,这也是一场灾难。

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

不考虑系统本身的合作,找到这么多工程师并不容易。如果我们只能使用一种语言,它将大大提高开发效率和开发人员的问题。

4

JavaScript 这几年语言特别流行,流行的原因有很多,比如:

  1. 使用 WebView 开发 UI 因此,效率更高 WebView 随处可见;

  2. 基于事件驱动的编程模型;

  3. JavaScript 易用(这是优缺点);

  4. 也因此,React、Unity 开发者可以使用框架提供更多的可能性 JavaScript 开发游戏、VR 应用等等。

所以,只用 JavaScript,我们可以设计什么样的物联网系统?

5

如上所述,几年前很难找到一种语言来完成一个包含客户端和服务端的系统。而随着客户端(浏览器、移动设备)性能的提升、Node.js 这种语言出现了,即 JavaScript。它不仅可以让我们只用一种语言来降低开发成本,还可以快速开发这样的系统。其余的问题是,如何在不同层次上选择合适的框架来实现快速发展。

如图 3 所示,我们可以看到不同层次的可选 JavaScript 方案。其中,有些只是为了证明 JavaScript 它是可行的;有些可以在开发效率和运行速率之间达到最佳平衡。选择这些方案可以让我们更快地实现它们 JavaScript 物联网应用开发。

图 3 基于纯 JavaScript 物联网参考架构

6

对于服务层来说,自主开发的物联网服务端主要是基于 node.js 方案。然而,我们发现越来越多的应用正在使用中 Serverless 该架构不仅可以快速推出可用的原型,还可以在未来轻松添加业务功能。

图 4 物联网服务层

图 4 物联网服务层有三种方案:

  1. 独立开发:即遵循传统的服务端开发模式,定义所需的功能;

  2. 使用云服务:直接使用成熟的物联网云服务,它们集成了云中所需的各种功能;

  3. Serverless:Server 可视为云服务上的自主开发,集两者之便。

每个方案都有自己的特点,也适用于具有不同开发能力的项目。但要实现快速发展,理想的方法是采用 Serverless 架构模式。

7

由于保密、安全、可扩展、核心技术等原因不同,一定规模的公司将采用自主开发的方式。这种开发模式 Web 应用开发没有太大区别,都是在数据中进行的 CRUD 操作。和前后分离架构一样,使用 API 作为接口,支持不同的传输协议,如 MQTT、CoAP 等。

图 5 Lan 物联网架构

比如作者以前在 GitHub 上开源的 Lan(https://github.com/phodal/lan),以物联网服务端为例。 Node.js 与 MongoDB,其架构如图 5 所示。

  1. 用户信息采用传统的关系数据库存储;

  2. 采用 NoSQL 可以处理不同的传感器数据;

  3. 提供 UI 界面供管理人员管理用户;

  4. 协议提供 HTTP、CoAP、MQTT、WebSocket 等待支持,方便不同类型的适应。

此外,物联网系统用于存储 NoSQL 作为一种存储介质,它将有更大的优势。一般来说,物联网系统的数据远远超过读取场景。同时,由于设备种类繁多,不可能为每种设备创建表;或者考虑到大量设备的特点,建立一个通用表,但这种表可能在未来仍然不适用。

因此,对于物联网数据,选择等 mongodb 这一类的 NoSQL 数据库有一些优点:

  1. 灵活性。可以存储和处理任何结构数据的非结构化数据模型;

  2. 支持水平扩展。NoSQL 数据库的分布式存储架构带来了优异的水平扩展;

  3. 实数据分析。如 MongoDB 可以通过丰富的索引和查询支持,包括二次、地理空间和文本搜索索引,聚合框架和本地 MapReduce,可以针对传感器数据就地运行报告分析。

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

8

对于硬件团队来说,直接使用云服务是一种更简单、快速的搭建物联网系统的方法。而使用物联网云服务,就意味着:我们可以直接上硬件层的传感器数据,并在应用层获取、分析这些数据。这一类的服务,比较成熟的有 AWS IoT Things(如图 6 所示)、Azure IoT 等。

图 6 AWS IoT Things 参考架构

基于 AWS IoT Things,我们只需要在云端,定义好对应的数据处理规则,便可以在硬件端直接对接服务。不过值得注意的是,单一的云服务无法提供复杂的功能,这个时候就需要一些搭配额外的服务。

9

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

图 7 Serverless 物联网参考架构

从理论上来讲,这些服务提供的是一层 API 封装,它不会限制我们所使用的语言。使用 Serverless 服务,我们可以具备更好的快速开发能力,并且能使用同一种语言(JavaScript)来完成编程。

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

  1. 对设备进行鉴权;

  2. 转换、存储设备的数据;

  3. 广播通知其他监听此设备数据的服务;

  4. 后台查询数据;

  5. 分析数据(AI);

  6. 可视化数据。

只需要少量的编程,我们就可以完成服务端的开发。随后,专注于硬件层的开发,以及应用层的业务功能。

10

在应用层方面,已经有大量的地方使用到了 JavaScript。除了传统的桌面浏览器,还有更多的领域也可以用 JavaScript 来开发。比如移动应用,已经有基于 Cordova + WebView 的成熟方案,还有近两三年流行起来的 React Native,都可以让开发者使用 JavaScript 完成物联网移动应用的开发。又如微信小程序,可以直接用蓝牙来连接硬件设备,也是使用 JavaScript 来编程。

因此,就目前的 Web 趋势来看,在应用层,JavaScript 将是快速开始的主流选择。 

在日常中的应用中,我们可以发现物联网的应用层,经常作为协调装置来连接硬件,并上传应用的数据。诸如共享单车、智能手环应用等,它们既通过蓝牙来获取数据,又上传数据到服务端。与此同时,有相当多的应用是运行在桌面客户端上的。故而在这一层级的应用,可谓是种类繁多。

今天,开发人员在做移动端的技术选型时,都会优先考虑到跨平台能力(android、iOS)。而在这些跨平台框架里,混合应用框架 Cordova(WebView)和 react Native 是使用最为广泛的两个框架,且它们都是使用 JavaScript 作为核心开发语言。

Cordova 是使用 WebView 来渲染页面的。因此与 Reavt Native 相比,使用 Cordova 的最大优势是,可以复用已有的 Web 前端应用的逻辑,并且有大量的图表工具可以直接使用——这一点在物联网应用中特别重要。而在混合应用框架中,Ionic 是这个领域使用最多的 UI 框架。

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

但是如果只能蓝牙的交互,可以考虑 PWA 或微信小程序。运行在 Chrome 浏览器上的 PWA 应用,可以直接使用 Web Devices API,如 Bluetooth、NFC、USB,即在浏览器上直接调用原生接口,并实现对设备的控制。而诸如最近一年内流行的微信小程序,则也可以访问蓝牙、GPS、罗盘、加速度计等硬件接口,同时用户不存在安装成本,打开即用。

另外,诸如 Electron、NW.js 这样的框架,可以让开发者直接使用 WebView + Node.js 模块开发物联网桌面应用。它可以加速 UI 界面的开发,并轻松地美化 UI 界面。

11

在硬件层上,就当前而言,Arduino 是最合适的原型开发硬件,除此还有自带 Wi-Fi 的 ESP8266 开发板。尽管使用 JavaScript 的开发板数量较少,也没有 Arduino 这样的成熟生态,但是未来可期。在嵌入式领域,使用 JavaScript 编写的代码,具有移植性强、事件驱动、天生支持异步等特点。

令人遗憾的是,为了保持上面提到的那些 JavaScript 特性,当前的 JavaScript 开发板都需要处理性能比较高的处理器,这也导致了此类开发板在生产上存在较高的成本。不过,好在多数使用 JavaScript 作为开发语言的设备,都具有网络功能连接到互联网,直接作为物联网设备使用。

就目前而言,这一类的设备有 Tessel、Espruino、Ruff 等等,它们的处理器性能都相当不错,价格也相对较高一些。但是,它们可以直接使用 JavaScript,能为软件开发工程师屏蔽底层相关细节,及事件驱动、异步特性,带来更好的开发体验。 

幸运的是,Samsung 公司推出的开源物网框架 IoT.js,只需要 64KB RAM、200 KB ROM。在未来,或许它能解决一些制造成本上的问题。

12

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

图 8 物联网协调层

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

我们只需要一个运行嵌入式 linux 系统的开发板,就可以完成这样的工作。与此同时,主流的 ARM 开发板都提供相应的 Linux 移植,因此在这个层级,我们也只需要关注于业务的实现。

13

如上所述,物联网应用的架构与 Web 应用的架构区别并不是太大,只是在这上面做一系列的演进。除了上面提到的一系列快速实践框架,当前在 Web 开发中流行的一些开发思想,势必也会引导到物联网系统中:

  1. 微服务化;

  2. DevOps;

  3. 容器化。

物联网会吸引互联网的优秀开发思想,并演进出更优秀的架构。

作者:黄峰达,网名phodal,ThoughtWorks 软件开发工程师,CSDN 博客专家。长期活跃于 GitHub,专注于物联网和前端领域。出版著作《自己动手设计物联网》,以及《Growth:全栈增长工程师指南》等六本电子书,并译有《物联网实战指南》。

2017 年 7 月 1 日(星期六),「」物联网主题线上峰会将在 CSDN 学院召开,届时,黄峰达将与其他几位专家一起,从易于上手、高效的“物联网全栈开发”着手,基于 JavaScript、python,详勘物联网架构、技术栈、应用开发平台、安全等实战经验,希望通过一天的时间,帮助开发者快速掌握物联网全栈开发之道。

标签: wi型温度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台