物联网技术概览

物联网 (IoT) 是一组庞杂的技术和使用场景,它没有明确的单一定义。物联网可以被视为使用嵌入在物理环境中的网络连接设备来改进现有流程或启用以前无法实现的新场景。

这些设备(或者“物”)连接到网络后,可以提供它们使用传感器从环境中收集的信息,或允许其他系统通过执行器连接并作用于现实世界。它们可以是您熟悉的通用对象的联网版本,也可以是功能尚未实现的新建和专用设备。它们可能是您个人拥有并随身携带的或留在家中的设备,也可能嵌入工厂设备或您所居住城市的一部分结构中。每个设备都能够将来自现实世界的有价值信息转换为数字数据,从而提高用户与产品、服务或应用交互方式的可见性。

物联网在不同行业有很多具体的使用场景和隐藏的商机,可以说在许多方面,物联网才刚刚起步。在这些使用场景中,物联网面临着一系列共同的挑战和模式。与其他以云为中心的技术应用相比,物联网项目具有额外的维度,因而增加了它们的复杂性,包括:

  • 多样化的硬件
  • 多样化的设备操作系统和软件
  • 不同的网络网关要求

本指南介绍了您可以在 Google Cloud 上组合使用的元素,以便在 Google Cloud 上构建强大、可维护的端到端物联网解决方案。

顶级组件概览

在这里,我们将系统划分为三个基本组件,即设备、网关和云:

三个组件:设备、网关和云。

设备包括直接与现实世界交互的硬件和软件。这些设备连接到网络以相互通信或与集中式的应用通信,它们支持直接或间接地连接到互联网。

网关可以帮助未直接连接到互联网的设备访问云服务。虽然网关这个术语在网络中代表特定功能,但它也可以代表一组或一个集群的设备进行数据处理的一类设备。来自每个设备的数据被发送到 Google Cloud 后,会在其中进行处理,并与来自其他设备的数据相结合,也可能与其他业务交易数据相结合。

信息类型

每个设备可以提供或使用各种类型的信息。每种形式的信息最好由不同的后端系统处理,并且每个系统应该根据数据速率、数量和首选 API 进行专项化。本部分列出并描述了物联网场景中常见的信息类别。

设备元数据

元数据包含有关设备的信息。大多数元数据是不可变的或很少进行更改。元数据字段的示例包括:

  • 标识符 (ID) - 标识唯一的设备。设备 ID 不会在已部署设备的有效期内发生变化。
  • 类或类型
  • 型号
  • 修订版本
  • 制造日期
  • 硬件序列号

状态信息

状态信息描述设备的当前状态,而不是环境。该信息可以被读取/写入。状态信息可以更新,但间隔较长。

遥测

设备收集的数据称为遥测,这些数据是物联网设备为应用提供的视觉与听觉信息。遥测是关于环境的只读数据,通常通过传感器收集。

每个遥测源都会产生一个通道。遥测数据可能会在设备或云端以有状态的变量形式保留。

虽然每个设备可能每分钟只发送一个数据点,但当您拥有大量设备时,您可能很快就需要应用大数据策略和模式。

命令

命令是设备执行的操作。命令通常对实现中的可用选择具有限制性。这些特征包括:

  • 命令不容易表示为状态数据。

  • 命令通常不是幂等的,这意味着每个重复的消息通常会导致不同的结果。与消息传递系统一样,命令功能的实现可确定分发的语义,例如“至少一次”或“恰好一次”。命令机制可以包括返回值,或者可能依赖于通过单独的返回消息进行的确认,或者通过状态数据反映预期的变化。

  • 命令可能具有有限的时间相关性,因此它们应包括生存时间 (TTL) 或其他失效值。

命令示例包括:

  • 向右旋转 360 度。
  • 运行自清洁循环。
  • 将费率提高 10%。

操作信息

与设备操作最相关的数据是操作信息,而不是业务应用。操作信息可能包括 CPU 工作温度和电池状态等。这种数据可能没有长期的分析价值,但可以用于短期分析,可以帮助您维护运行状态,例如响应损耗并纠正更新后软件性能下降的问题。

操作信息可以作为遥测或状态数据进行传输。

设备

您无法确定设备的具体组成部分,这是因为许多物理事物都是模块化的,这意味着您很难确定整个机器是否为一个设备,或者每个模块都是独立的设备。因此,针对这一问题,您需要从实际情况出发。在设计物联网项目时,您需要考虑设计中的各种抽象层次,并决定如何表示物理事物及其相互之间的关系。您的应用的特定要求将帮助您了解生成信息的事物是否应被视为设备,如果是,它应该拥有自己的 ID,如果不是,那么这个事物只是另一个设备的通道或状态详细信息。

例如,现有一个旨在监控酒店房间温度的项目。在每个房间可能有三个传感器,一个在门边的地板上,一个在天花板上,一个在床边。您可以通过将每个传感器表示为设备来对此设置建模:

{deviceID: "dh28dslkja", "location": "floor", "room": 128, "temp": 22 }
{deviceID: "8d3kiuhs8a", "location": "ceiling", "room": 128, "temp": 24 }
{deviceID: "kd8s8hh3o", "location": "bedside", "room": 128, "temp": 23 }

或者,您也可以将整个房间建模为一个设备。虽然您通常不会将房间视为设备,但在物联网中,设备抽象实际上是关于您对一个单元进行管理和记录的内容。因此,设备并不总是局限于你可以握在手中的单个小器件。通过这种方式,您可以将酒店房间建模为包含三个传感器的设备:

{deviceID: "dh28dslkja", "room": 128, "temp_floor": 22, "temp_ceiling": 24, "temp_bedside": 23, "average_temp":  23 }

根据目标,您可以从这两种数据表示方式中选择最适合您的方式。请注意第二个示例中的平均温度字段。这个值可能是酒店更希望采集的值。您需要考虑,每个传感器的元数据本身是否最有价值,或者单独的元数据是否更适用于整个房间?如果房间是套房,并且三个传感器分别位于浴室、大厅和卧室,那么又该如何建模?这些是您在决定如何建模数据时需要考虑的各种问题。请考虑使用联网应用的网域模型,因为其定义了构成设备的确切边界。

设备硬件

选择硬件的一般注意事项

选择硬件时,请考虑以下因素,因为它们会受硬件部署方式的影响:

  • 费用。鉴于所提供数据的价值,请考虑您可以为每台设备承担的费用。
  • I/O 角色。该设备可能是传感器、执行器或两种角色的某种组合。
  • 功率预算。该设备也许有可以使用的电源,或者位于电力稀缺的位置。可以考虑是否需要为该设备提供电池或太阳能。
  • 网络环境。您需要考虑设备是否可以作为 TCP/IP 路由直接连接到互联网。某些类型的连接(例如蜂窝网络),在高流量下可能费用昂贵。另外还要考虑网络的可靠性,以及可靠性对延时和吞吐量的影响。如果是无线设备,请考虑传输功率的范围和增加的能源费用。

功能性输入和输出

用于与物理世界交互的设备包含各种组件,或连接有外围设备,以实现传感器输入或执行器输出。您应基于功能要求为这些硬件 I/O 组件选择特定的硬件。如果您正在进行气体检测(例如一氧化碳 (CO)),传感器能够准确检测出的气体类型就很重要。例如,您需要检测的运动的灵敏度或复杂性将决定您选择何种类型的加速度计,或者您是否需要陀螺仪。当使用设备产生输出时,您必须考虑蜂鸣器发声的音量、需要的电机转速或者继电器需要传输的电流强度等要求。

除了根据环境性能确定的要求,这些 I/O 组件或外围设备的选择也可能与它们所关联的信息类型有关。例如,可以将步进电机设置为能够在设备状态数据中表示的特定方向,而麦克风可以根据频率稳定地对数据(这些数据最好作为遥测传输)进行采样。这些组件通过硬件接口连接到设备的逻辑系统。

设备平台

在构建物联网应用时,您可以使用多种类型的硬件。这种多样性源于多样的硬件平台。常见的平台包括单板计算机(如 BeagleboneRaspberry Pi),以及微控制器平台(如 Arduino 系列Particle 开发板和 Adafruit Feather)。

每个平台都允许您通过硬件接口连接多种类型的传感器和执行器模块。

这些平台连接模块的方式类似于通用计算中采用的分层方法。您不妨从日常生活中常见的计算机鼠标着手,思考外围设备、接口、驱动程序和应用各层,如下图所示。

比较桌面设备和物联网组件的彩色图表。

在典型的操作系统(如 Linux 或 Windows)中,硬件输入由驱动程序解释,而驱动程序又依赖于操作系统的服务,并且可能是内核的一部分。为简单起见,下图省略了操作系统。

硬件接口

大多数硬件接口都是串行接口。 串行接口通常使用多条线来控制通过主数据线的二进制信息的流和计时。每种类型的硬件接口定义了外围设备和中央处理器之间通信的方法。

物联网硬件平台使用了许多通用接口。传感器和执行器模块可以支持一个或多个以下的接口:

  • USB。通用串行总线通常用于各种即插即用设备。
  • GPIO。通用输入/输出引脚直接连接到处理器。顾名思义,这些引脚由制造商提供,以实现制造商未设计的自定义使用场景。GPIO 引脚可以设计为承载数字或模拟信号,而数字引脚只有两种状态,即 HIGH 或 LOW。

    数字 GPIO 可以支持脉宽调制 (PWM)。 PWM 可让您迅速打开和关闭电源,而每个“on(开)”相位都是具有特定持续时间(或宽度)的脉冲。反映到设备中就是更低或更高的功率水平。例如,您可以使用 PWM 来改变 LED 的亮度;“on(开)”脉冲越宽,LED 就越亮。

    模拟引脚可以连接板载模数转换 (ADC) 电路。ADC 电路可以定期对连续的模拟波形(如模拟音频信号)进行采样,并为每个样本提供一个相对于系统电压且介于 0 到 1 之间的数字值。

    当您在代码中读取数字 I/O 引脚的值时,该值必须为 HIGH(高电平)或 LOW(低电平),其中任何给定时刻的模拟输入引脚可以是某个范围内的任何值。该范围取决于 ADC 的分辨率。例如,8 位 ADC 可以产生范围在 0 到 255 的数字值,而 10 位 ADC 可以产生更宽范围的值,从 0 到 1024。更多的值意味着更高的分辨率,因此以更可靠的数字表示任何给定的模拟信号。

    ADC 采样率决定了 ADC 可以再现的频率范围。采样率越高,数字数据中的最大频率就越高。例如,在忽略典型过滤和其他处理的情况下,以 44100 Hz 采样的音频信号产生频率响应高达 22050 Hz 的数字音频文件。位精度决定了信号幅度的分辨率。

  • I2C。内部集成电路串行总线使用一种协议,可以在总线上为多个模块分配一个离散地址。I2C 可以读为“I two C”,“I I C”或“I squared C”。

  • SPI。串行外设接口总线设备采用主从架构,具有单主机和全双工通信的特点。SPI 指定了以下四个逻辑信号:

    • SCLK:串行时钟,由主设备输出
    • MOSI:主输出从输入,由主设备输出
    • MISO:主输入从输出,由从设备输出
    • SS:从选择,是主机的低有效信号输出
  • UART。通用异步收/发器设备在处理器对数据操作的点处在串行和并行形式之间转换数据。当串行数据必须以并行方式布置在内存中时,需要使用 UART。

软件中的硬件抽象

操作系统会抽象出通用的计算资源,例如内存和文件 I/O。此外,操作系统还为不同的硬件接口提供非常低级别的支持。通常,这些抽象不易直接使用,并且操作系统通常不会为构建物联网解决方案时可能需要的各种传感器和执行器模块提供抽象。

您可以使用跨平台抽象硬件接口的库。这些库帮助您以更直接的方式使用设备(例如运动检测器)。使用库可以让您专注于收集模块为应用提供的信息,而不是直接使用硬件的低级详细信息。

一些库提供了在硬件接口之上以轻量级驱动程序的形式表示外围设备的抽象。这些库的示例包括 Johnny-Five JavaScript 框架、MRAA(支持多种语言)、EMBD Go 库、Arduino-wiringFirmata

计算环境

您的平台的计算环境会执行软件。基于硬件的功率和费用限制,处理器的能力各有不同。一些计算环境包括完整的系统芯片 (SOC),它可以支持嵌入式 Linux 操作系统。相反,基于微控制器的设备可能会受到更多限制,但您的应用代码可以直接在处理器上运行,而无需操作系统的支持。

这些计算环境是应用代码逻辑与平台物理硬件之间的桥梁。计算环境运行的软件可能在系统从只读内存 (ROM) 启动时完全加载。或者,环境可能来自分阶段启动的过程。 此过程从 ROM 加载一个称为 bootloader 的小程序,然后从板载闪存或连接的 SD 卡加载完整的操作系统。

在设备端处理

在从传感器收集数据之后,设备可以在将数据发送到云端之前对数据进行处理。多台设备可能在数据传送到云端之前处理数据,并且每台设备都可能执行一定程度的处理。

下图演示了处理任务。

数据处理工作流:转换、封装、验证、排序、增强、汇总和组合数据。

具体处理如下所示:

  • 将数据转换为另一种格式
  • 以安全的方式打包数据并将数据组合成实际的批量
  • 验证数据以确保它符合一组规则
  • 对数据进行排序以创建首选序列
  • 增强数据以使用其他相关信息来修饰核心值
  • 汇总数据以减少数据量并消除不需要或不想要的详细信息
  • 将数据组合成聚合值

基于设备的分析可以将多个处理任务组合在一起,以提供中间的、综合的解释,从而能够以更小的数据量传输更多信息。

设备管理

设备管理与其他 IT 资产管理类似,即其关键是设备的预配、操作和更新。这些问题适用于所有设备,包括网关。

预配

预配是设置新设备并使其可供使用的过程。预配包括:

  • 使用基本设备信息进行引导。设备信息至少包括 ID 和基本元数据。
  • 安全通信所需的凭据和身份验证。例如,可以向设备提供可以用于当前通信的令牌或密钥。此类凭据可能具有到期时间。
  • 授权设备。授权根据上面的身份验证凭据建立设备与应用或其他服务交互的权限。授权是指分配给设备 ID 和凭据使用特定资源的权限。
  • 设置网络连接。设备需要通过网络连接与其他服务通信并传输数据。
  • 注册设备。应用需要知道哪些设备是可用的。设备注册表会跟踪正在使用的设备,管理身份验证的云端,并将设备与特定数据和资源(例如遥测主题和状态存储)相关联。

操作

物联网系统的日常运作要求您收集有关正在发生的事情的正确信息。与任何 IT 硬件部署类似,通过信息中心和提醒机制记录的各种事件以及监控的关键状态指标可以帮助您保持事物的平稳运行。 为此,Google Cloud 提供了以下可用于日常操作的功能:

  • Cloud Logging 收集并存储日志。系统会记录关键设备生命周期事件以进行审核。例如,您可以将部分遥测事件中继到 Logging 中进行分析和报告。与构建自定义日志记录解决方案相比,使用 Logging 可以节省大量时间和精力。

无线更新

典型物联网部署一般具有庞大规模,这意味着在现场更新单个设备是不切实际的。由于设备已经通过设计实现某种形式的网络连接,因此通过在网络上推送更新可以使设备更新变得更加简单。在手机领域中,这称为无线 (OTA) 更新,这种方法同样也适用于物联网。支持无线更新的选项包括:

网关

网关管理使用不同协议的网络之间传输的流量,并负责协议转换和其他互操作的任务。有时,物联网网关设备用于提供设备和云之间的连接和转换。由于某些设备不包含互联网连接所需的网络栈,因此网关设备可以充当代理,从设备接收数据并将其打包以通过 TCP/IP 进行传输。

以下部署的设备可能需要专用网关设备:

  • 不具备可路由到互联网的连接,例如蓝牙设备。
  • 不具备传输层安全性 (TLS) 所需的处理能力,因此无法与 Google API 通信。
  • 不具备电力来执行所需的网络传输。

即使相关设备能够在没有网关的情况下进行通信,也可以使用网关设备。在此场景中,网关的价值体现在它能够在将数据发送到云端之前提供跨多个设备的数据处理功能。在这种情况下,直接输入将是其他设备,而不是单个传感器。以下任务可能会归类到网关设备的任务:

  • 压缩数据以最大化可通过单个链接发送到云端的数据量
  • 在与云端的连接不够稳定的情况下,将数据存储在本地数据库中,然后在连通时转发数据
  • 提供具有备用电池的实时时钟,用于为无法正确管理时间戳或保持良好同步的设备提供一致的时间戳
  • 执行 IPV6 到 IPV4 的转换
  • 从本地网络提取和上传与 IoT 数据相关并关联的其他基于平面文件的数据
  • 充当固件更新的本地缓存

Google Cloud

在您的物联网项目启动并运行后,许多设备将生成大量数据。此时,您需要一种高效、可扩缩且经济实惠的方式来管理这些设备并处理所有信息并使其为您的项目服务。在存储、处理和分析数据(尤其是大数据)方面,云端具有无可比拟的优势。

下图显示了 Google Cloud 上物联网数据管理的各个阶段。

在云中构建和训练机器学习模型。

设备管理

IoT Core 设备管理器

IoT Core 可提供用于管理设备的全代管式服务。此服务包括 Google Cloud 资源层次结构内的注册、身份验证和授权,以及在云端存储设备元数据,以及将设备配置从服务发送到设备的功能。

提取

提取是将信息从设备导入 Google Cloud 服务的过程。Google Cloud 提供不同的提取服务,具体取决于数据是遥测还是有关设备和物联网基础架构的操作信息。

IoT Core MQTT

IoT Core 可为 IoT Core 代管的设备提供安全的 MQTT(消息队列遥测传输)代理。这种有效的二进制行业标准允许受约束的设备发送实时遥测,并使用配置管理功能立即接收从云端发送到设备的消息。 IoT Core MQTT 代理直接与 Pub/Sub 连接。

Pub/Sub

Pub/Sub 提供覆盖全球范围、持久的消息提取服务。通过为流或通道创建主题,您可以启用应用的不同组件以订阅特定的数据流,而无需在每个设备上构建特定于订阅者的通道。此外,Pub/Sub 还可以以原生方式连接到其他 Google Cloud 服务,帮助您连接提取、数据流水线和存储系统。

对于传入数据流和应用架构更改,Pub/Sub 可以像缓冲器和速率调节器一样工作。这是因为许多设备存储和重试发送遥测数据的能力有限。Pub/Sub 能够扩缩以处理在现实世界中大量设备响应事件时可能出现的数据峰值,并且可以缓冲这些峰值以便将其与监控数据的应用隔离开来。

Cloud Monitoring 和 Cloud Logging

前文的“操作”部分中所述,Cloud Monitoring 和 Cloud Logging 可提供许多操作方面的优势。这些服务会通过其提供的接口提取操作信息。

流水线处理任务

流水线在数据到达 Google Cloud 后对其进行管理,其方式类似于在工厂生产线上管理部件。这包括以下任务:

  • 转换数据。您可以将数据转换为另一种格式,例如,将捕获的设备信号电压转换为校准的单位温度测量值。
  • 汇总和计算数据。通过合并数据,您可以添加检查,例如跨多个设备平均分布数据,以避免对单个有问题的设备进行操作。如果单个设备离线,您可以确保拥有可操作的数据。通过向流水线添加计算,您可以将流式分析应用于仍处于处理流水线中的数据。
  • 丰富数据。您可以将设备生成的数据与关于设备的其他元数据或其他数据集(如天气或交通数据)进行合并,以便在后续分析中使用。
  • 移动数据。您可以将处理后的数据存储在一个或多个最终存储位置中。

Dataflow

Dataflow 以代管式服务的形式提供开放的 Apache Beam 编程模型,供您通过多种方式处理数据,包括批处理操作、ETL(提取、转换和加载)模式以及连续流式计算。Dataflow 特别适用于管理物联网场景所需的大容量数据处理流水线。此外,Dataflow 还可以使您的流水线与其他的 Google Cloud 服务无缝集成。

数据存储

来自现实世界的数据的格式和大小各不相同。 有鉴于此,Google Cloud 提供一系列存储解决方案,从非结构化数据 blob(如图片或视频流)到设备或事务的结构化实体存储空间,以及用于事件和遥测数据的高性能键值数据库。

在 IoT Core 中存储状态

某些设备状态可能直接通过连接的硬件显示。例如,当您检查数字 GPIO 引脚的状态时,可以根据引脚上电压的物理读数为 HIGH 或 LOW 进行判断。

应用层可能还存在其他的设备状态。例如,recording-audio 的状态可能是 truefalse,,具体状态与应用是通过麦克风进行采样还是将数据写入磁盘有关。在硬件级别,麦克风本身可能会保持打开的状态。

从软件的角度来看,设备上运行的应用代码可以保留真实的来源。对于其他软件来说,读取设备的最后已知状态通常是很有价值的,甚至是必需的。鉴于物联网设备可能在低功耗睡眠模式下运行一段时间并且可能存在于特别不可靠的网络上,因此将一些设备的状态存储在云端通常是很有帮助的。这样,即使设备本身暂时离线,状态数据仍然可用。

设备可以报告最后的状态并将其存储在 IoT Core 中以供应用检索。通过 MQTT 或 HTTP 发送的状态信息会被永久存储在 IoT Core 中。因此,即使设备已断开连接或离线,也可以在云端查看这些状态信息。

在 Datastore 和 Firebase 中存储应用数据

当您需要向移动或 Web 应用提供状态或遥测数据时,您可以将已处理的数据或原始数据存储在结构化但无架构的数据库(例如 DatastoreFirebase Realtime Database)中,这些数据库可以网域或应用级对象的形式来表示物联网设备数据。

Cloud Functions 和 Dataflow 中的规则处理和流式分析

物联网事件和数据可以高速地发送到云端进行快速处理。对于许多物联网应用,将设备置于物理环境中是为了更快地访问数据。 例如,在运输过程中暴露于高温下的农产品可以被标记并立即处理。

快速处理此信息并针对其采取相应措施至关重要。Cloud Functions 可让您编写自定义逻辑,以便在您收到每个事件时对其应用自定义逻辑。这可用于触发提醒、过滤无效数据或调用其他 API。Cloud Functions 可以单独处理每个已发布的事件。

如果您需要使用更复杂的分析来处理数据和事件,包括时间窗口技术或从多个流汇聚数据,您可以应用 Dataflow 提供的强大分析工具进行流式和批量数据处理。

分析

对通过物联网数据源获得的数据进行分析通常是了解现实世界的最终目的。在处理流水线中对流数据进行分析之后,会汇总这些数据。随着时间的推移,这些数据成为了丰富的信息来源,方便您从中找出趋势。同时,这些数据也可以与其他数据组合,包括来自物联网设备之外的数据。

BigQuery 和 Datalab

BigQuery 提供了一个全代管式数据仓库,并且具有我们熟悉的 SQL 接口,可让您存储物联网数据以及其他任何企业分析和日志。BigQuery 的性能和费用意味着您可以长时间地保留有价值的数据,而无需仅仅为了节省磁盘空间而将这些数据删除。

Datalab 是一种用于大规模数据探索、分析和直观呈现的交互式工具。与其他数据结合后,物联网数据最终可用于多种使用场景。Datalab 可让您使用基于开源 Jupyter 项目的托管在线数据工作台环境,以交互方式探索、转换、分析和直观呈现您的数据。

机器学习

物联网数据本质上通常具有多维度和噪声。这些特性使得您难以利用传统分析技术来提取数据洞见。然而,这种复杂难辨的数据特性通常是深度神经网络最擅长的事情。TensorFlow 是一种领先的开源机器学习框架。在 Google Cloud 上,您可以通过 AI Platform 在分布式代管训练服务中应用 TensorFlow。

Cloud Bigtable 的时间序列信息中心

某些类型的数据需要根据已知的索引和维度快速划分,以更新核心可视化和界面。Cloud Bigtable 为 NoSQL 数据提供具有低延时和高吞吐量的数据库, 并且支持大规模可视化和查询,尤为适合已掌握相关答案,并且需要大量接收或传送数据的场景。

与 BigQuery 相比,因为 Cloud Bigtable 使用基于行的格式存储数据,所以更适合查询行或连续行的组。相反,BigQuery 更适合查询聚合数据。

Cloud Storage Nearline 的归档存储

现实世界会不间断地产生数据,而且这些数据不一定是结构化的。为此,Cloud Storage 提供了一个单一 API 以用于当前使用的对象存储和不经常使用的归档数据。只要您的物联网设备捕获媒体数据,Cloud Storage 就可以永久地且经济地存储几乎无限量的数据。

总结和后续步骤

构建物联网解决方案需要解决来自各种领域的挑战。有鉴于此,Google Cloud 提供了设备管理、基础架构规模、网络以及一系列可用于充分利用设备生成的数据的存储和分析产品。