将一台设备或传感器连接到互联网不是件容易的事—在嵌入式系统设计中没什么事是容易的。不过,那些存在于网上(云端)、供客户使用的优秀分析工具能够扩展客户设备功能,而且还能增加便利性,并通过互联网实现计算成本的节省。然而,你必须搭建一种通道,以便让设备或传感器的数据到达云端的应用程序,使数据在那里得到分析和使用。对许多嵌入式系统设计团队来说,这是一个全新领域。本文将介绍Web服务在机器到机器(M2M)应用中的工作原理,并探讨在互联网上创建“设备云”所要完成的主要任务。
你在什么云上?
迄今为止,我们中的大多数人都被灌输过“云端”和“云计算”等术语。除了生成雨、雪和暴风雨等自然气候现象外,“云”的真正含义是什么?对这个问题的简单的回答是,不要太执迷于所谓的云术语;而应该认识到,软件应用程序、连接和存储可以存在于本地设备(如PC)或某个网络中的服务器上。各种基于Web的应用就是一些最佳例子,例如电子邮件和其它集中智能点(如映射)。云端计算的好处在于,云端通常是联网的,因此可以被连接扩展互联网的每个人所共享。扩展互联网这个术语意味着物体可以通过互联网连接到物体,而不仅是人到人。机器到机器(M2M)连接可通过设备云中的扩展互联网来实现。
驻留数据
共享数据是问题的根本。然而,这些数据需要驻留在可以得到正确消化的地方。为了将设备或传感器连接到互联网,你首先需要知道哪里可以“驻留”数据。大多数现代工具依赖于Web服务直接连接扩展互联网,因此你需要知道: Web服务是什么?如何使用Web服务?如何将Web服务应用到远端设备或传感器?
为了设计能与云端交互的嵌入式系统,你需要一组功能将设备连接到位于云端的应用程序。记住,设备可以是任何东西,从仪表或自动调温器到发动机或机器;也可以是固定的某些东西,如用于存储和分配的大箱子或大容器。另一方面,应用程序可以是用于处理数据的任何系统。它可以是智能手机上安装的移动应用程序、基于Web的仪表板类型入口程序、企业资源规划系统或专家系统。不管是哪种情况,挑战在于将有关设备或资产的重要信息传送给应用程序。为了实现这个目标,我们首先需要定义创建这条数据传送通道所必需的三大功能组件。
创建通道
首先你需要如图1所示的功能以便开始设计工作。
图1:一种设备云的系统架构。
1. 传感和连接。这个功能具有有限的智能,专门用于获取信息,包括无线电模块、简单逻辑以及与即时需求有关的传感技术。
2. 汇聚和转换。在将数据点通过大型网络(如互联网)发送出去之前,需要以一种有意义的方式,有效总结或汇聚这些数据点。这个功能的另外一个关键部分是,将信息放入通用表述性语言。因此,这个功能一般包括规则框架、协议转换和映射,一般还包括通往IP网络的一条通道。
3. 设备云。设备云是扩展互联网的组成部分,通常感知所有连接到远端站的设备。一般来说这是一个用作通道和数据存储的主机系统。设备云也汇聚来自所有远端站点的信息,其方式与汇聚和转换功能汇合各个设备的差异信息基本相同。
为了更好地理解这种环境,可以把云架构看作是一组的服务(如图2所示),其定义为:
图2:作为一组服务的云架构。
1. 基础设施即服务(IaaS)。在最底层的IaaS是云端的“基础”。它包括网络连接、物理服务器、防火墙、磁盘和路由器等。
2. 平台即服务(PaaS)。包括了形成场景通信链路和管理功能的所有软件,同时提供顶层赖以生存的环境。
3. 软件即服务(SaaS)。顶层是实际的应用程序,可以是网页、映射、分析或其它软件,也是最终智能处理工作实施的地方。通过这种方式,设备云可以提供使用通用语言的设备场景化表述,并帮助基于Web的应用程序完成实际的工作。
会说云语吗?
当然,我们需要一个通用词汇表,这是Web服务的目的。Web服务的典型定义是,一种在互联网协议骨干上使用XML、HTTP、SOAP、WSDL和UDDI开放标准集成Web应用程序的一种方法。为了简单化,Web服务利用互联网通用语言完成任务,以通用方式描述事件,使用常见动词收发信息(Put或Get),并通过请求或订阅使用某种方法实现一到多和多到一连接。
Web服务是如何工作的?用一种支持通信的语言开始——你已经知道了,然而,你可能不了解其中的真正含义。这是HTTP或超文本传输协议,是互联网客户端和服务器的语言,最重要的是,这是一种将互联网动词应用于名词的通用协议。听起来不错?我们在二年级就学习名词和动词了。
名词 互联网名词是被称为统一资源定位器(URL)或通用资源标识符(URI)的一类东西。当然,不仅是这些——你需要描述数据的低位和数据的高位。为了做到这一点,你将使用可以灵活编码信息的方法。目前有许多这些方法,但最常用的两种是可扩展标记语言(XML)和JavaScript对象符号(JSON)。这两种方法都能用于传送和存储数据,并且具有自描述性,这意味着你通常不需要魔术解码环来理解场景。这些东西的次序也不重要。表1显示了XML和JSON的两个常见的简单例子。
表1、XML和JSON事例比较。
需要注意的是,意思和场景在标签内传送,而内容是与标签有关的值。因为例子使用了有意义的场景标签,你可以省略一些信息,增加其它信息,将它们的顺序打乱,而不会改变单个元素的含义。
动词你需要将动词配搭名词。对动词而言,可以使用表述性状态转移(REST)。据维基百科介绍,REST“是一种用于分布式超媒体系统的软件架构,如WWW。”REST意味着你在使用通用动作组,其细节由场景进行处理。对于像HTTP那样的协议,我们一般讨论7个不同的动作或动词,其中4个完成设备云中的主要任务。这7个动词是:Get,Put,Post,Delete,Head,Trace和Connect。本文不打算对Head、Trace和Connect多作说明。我们真正需要关注最重要的4个:Get,Put,Post和Delete。下面介绍这些动词的含义。
每次你登录网站,你就是在做Get。这是一个获取或获得文件或集合描述的一个请求。当然,就像许多问题一样,它们通常会导致更多的问题,因此一次“get”经常招致另一个。Get是个动词,而URL加上所有插入的其它信息就是那个名词。下一个是Put。Put是Get的反义词,因此是将文件或集合上载或“put”到数据库的一个请求。Delete是魔术擦除器。毫无疑问,如果有些东西已经“放”在某个地方,我们可能想“取得”它的拷贝,但我们大多数时候还希望“删除”这些东西。最后是Post。这是一个比较复杂的动词。最好将Post认为是一个中间步骤或中继。比方说你想要知道一个问题的答案,但确实不知道去问谁。你无法做Get,因为你不知道要问什么。这是,你可以将所有信息打包并变成一个帖子(Post)。一旦“张贴”过后,所谓的专家过程将看到你的帖子并作出回应。你可以实时等待响应(同步),或离开这里并请求响应通知(异步)。
为了将这些动词应用到设备和应用程序,让我们假设你有一组连接着不同建筑物的温度传感器。每个传感器每个小时使用合适的连接、汇聚和转换功能将温度值发送到设备云中的数据库。在这种场景中,温度值被“放(put)”进云端。下一步假设应用程序根据时间和地点对各个温度进行分析和绘图。在这种场景中,应用程序将从与合适时间和地点名词相关的数据库中“获取(get)”这些值。进一步假设你只想将数据保持一个月,因此每天都有一个独立的进程对过时的温度值进行“删除”。最后,假设应用程序的一位用户想要实时的当前温度值,而不仅仅是最近几个小时。在这种情况下,应用程序将在指定地点“张贴(post)”一个获取当前值的请求,等待请求得到处理并返回结果。这些就是Web服务使用简单的名词和动词的工作过程,
总之,你会发现,利用合适的连接、汇聚和转换功能,可以很容易将设备信息成功连接远端应用程序。设备云和扩展互联网随后用作将数据桥接到应用程序的管道。所有这些事情都是使用相对简单的、与一组互联网名词紧密相关的互联网动词组合完成的,没有太大难度,只要记住REST和使用Post就可以了。