将一台设备或感测器连接到网际网路不是件容易的事─在嵌入式系统设计中没什么事是容易的。不过,那些存在于网上(云端)、供客户使用的优秀分析工具能够扩展客户设备功能,而且还能增加便利性,并透过网际网路实现运算成本的节省。然而,你必须搭建一种通道,以便让设备或感测器的数据到达云端的应用程式,使数据在那裡得到分析和使用。对许多嵌入式系统设计团队来说,这是一个全新领域。本文将介绍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就可以了。
评论
查看更多