使用Google Cloud Platform进行资产跟踪

使用Google Cloud Platform进行资产跟踪

资产跟踪是物联网解决方案的常见用例。当一家公司拥有的高价值资产可能会被错放或被盗时,给它们安装相对低价值的物联网设备来跟踪它们的一举一动才有意义。在本文中,我们将回顾一个假设的物联网问题,以及我们Leverege将如何使用GCP来创建解决方案。


问题


想象一个虚构的自行车租赁公司,名为Pedal Power,位于美国Ocean City风景如画的海滩社区。在过去,Pedal Power的老板Gary曾要求他的客户将驾照留在他的boardwalk出租屋,以确保他们会带着他的昂贵的自行车回来。大多数人都会准时归还自行车,并支付租车费用,没有发生任何意外,但是加里被几次从未归还的租客烧毁的事实确实使他的底线有所降低。此外,大洋城镇已决定在木板路的尽头建立一个无自行车区,并且只要有一位顾客在无自行车区被发现,就会对加里处以罚款。加里(Gary)警告客户有关这项新法律,但是有些人仍然进入禁止自行车区域,等到他收到邮件罚款时,这些客户早已不在了。


解决方案


硬件


加里受够了现状,他来到Leverege寻求帮助。在与Leverege的协商中,Gary考虑了几种可以在他的自行车上安装GPS跟踪设备的模型。基于易于安装和网络可用性,加里决定为他所有的自行车配备一个电池供电的可充电跟踪器,使用蜂窝通信。


摄取ingestion


把加里的追踪器数据输入GCP的第一步是摄取(ingestion)。Leverege编写了一个运行在GCP的Kubernetes引擎上的摄取服务器,这是一个非常可扩展且经济高效的计算基础设施,它将允许Gary只支付他所需的计算能力,但允许他扩展到一个非常大的设备消息量,以准备有一天他的业务进入其它地区或国家。


摄取服务将仅侦听通过标准HTTP REST接口传入的设备消息,并确保仅列入白名单的设备能够处理其数据。然后,设备消息将被解压缩并放置在默认队列中,以便使用Google Pub Sub处理。Pub Sub是一个消息队列服务,可以处理大量消息,并且具有容错能力。如果Leverege为处理和存储消息而创建的部分云服务暂时不可用,则消息将保留在队列中,并且不会丢失。Pub Sub还允许多个服务响应放置在单个队列中的事件,这在消息路由方面非常重要。


消息路由


物联网系统中的每种设备类型可能都有单独的数据路由需求。想象一下一个带有单独报告温度和压力传感器的系统,该传感器正在监视某些工业过程。我们可能想存储两种设备类型的数据,但是温度数据可能有压力传感器没有的特殊布线需求。 也许我们需要检查来自温度传感器的每个读数的值,以确保其不超过某个特定阈值,如果是,则触发警报。我们将要路由该设备类型的数据,以将过程与压力传感器的数据分开。因此,我们为每种设备类型创建预定义的消息路由,该消息路由包括Pub Sub主题的名称以及需要与数据一起传递的所有选项。消息路由可以并行或串行运行。


对于加里的自行车租赁店,我们目前只有一种设备类型,因此该系统的所有数据将遵循一条路线。


存储


此时,显而易见的事情是存储我们的数据。我们希望有一种可靠、快速的方法来存储加里的所有最新数据,以便在地图上轻松查看他所有未偿租金的自行车位置。为此,我们选择Google的Firebase数据库,它是一个简单但功能强大的键值存储,而且存储速度很快。在任何给定时间,加里设备的最新状态都将存储在Firebase中,使我们可以实时查看他的自行车位置。Firebase的收听功能(listening capabilities)还使我们能够在Gary的一辆自行车改变位置的第二秒内获得即时更新。


此外,我们希望获得有关Gary的每台设备的数据的长期历史视图,以便我们可以随时查看他的每辆自行车在哪里的跟踪记录。为此,我们使用Google的Big Query,这是一个基于SQL的大数据平台。借助Big Query,我们可以存储来自Gary的传感器的多年数据,并在几秒钟内进行查询。


我们创建了两个简单的数据写入服务,将它们添加到Kubernetes Engine中,并将Gary的所有数据路由到两个服务中,以便在它们到达时进行写入。


进一步的处理


至此,我们已经提取并存储了传感器数据。通过在网络应用程序上进行更多的工作,我们可以将所有东西存储在适当的位置,以在地图上存储和查看Gary的所有自行车,并在任何给定时间准确知道它们的位置。这太棒了。但现在是租车旺季,加里正忙着租自行车。他不想把所有的时间都花在盯着地图屏幕上,希望他的顾客没有骑车进入禁止骑车区,或者带着他的设备潜逃。


为了解决这些问题,我们会将Gary的数据路由到第三种来源,即Google Cloud Functions。Cloud Functions是一种简单、可扩展的功能,可作为服务解决方案。它们将允许Gary仅为当前规模下的几个函数调用支付费用,但却保留了从数千台设备大规模调用数百万个并行函数的可能性。Cloud Functions可以通过简单的HTTP请求触发,或者在这种情况下,可以收听Pub Sub主题。


Leverege的工程师与加里(Gary)一起在地图上开发“地理范围”或可以通过其经纬度边界识别的区域。他们在城镇的禁止骑行区域周围创建了一个地理围栏,并在自行车小屋周围20英里的范围内创建了第二个地理围栏。他们还编写了一个Cloud Function(云功能),该功能可检查每条设备的消息,以查看设备的位置是否落在非自行车区域内或20英里范围外,并立即发送Gary文本和电子邮件警报,以便他采取适当和及时的行动。另外,加里(Gary)选择了一种可以测量和传输速度的设备,因此他还会收到有关自行车以特定速度行驶的警报(可能是因为它们已被放置在车内并被拉走了)。


总结


通过使用谷歌云平台,Leverege能够创建一个坚固的、可伸缩的解决方案来满足Gary的需求。由于该解决方案在GCP上运行,它自动获得所有谷歌的最新安全性和性能更新,并具有良好的正常运行时间。加里现在可以确信,当他的一位顾客走进“禁止骑车区”时,他将不再需要支付账单。一旦他怀疑自己的一辆自行车失踪了,他就可以通知当地*。


他已经开始考虑进行硬件升级,这将使他可以在接近关闭时间时向所有自行车发送音频消息。他还与Leverege合作,开发了一种使用Google Cloud AutoML的机器学习算法,以根据客户的骑车行为模式来估算客户租自行车的时间。这将帮助Gary有效地确定库存中需要多少辆自行车,并将其估算提供给正在等待自行车的客户。


原文链接
上一篇:Oracle 存储过程的创建,及触发器调用存储过程


下一篇:dart系列之:实时通讯,在浏览器中使用WebSockets