物联网开发最佳实践

标签: 物联网 开发 最佳实践 | 发表时间:2015-10-10 15:20 | 作者:
出处:http://www.iteye.com
假设您已经决定开发一个 IoT 产品。首先,您可以了解许多从移动开发演变而来的实践。具体地讲,考虑以下这些实践:

  • 从服务中分离 API
  • 迭代式地设计解决方案的原型
  • 预测连接问题
化身 (avatar)、服务和解耦的 API

如果您创建过任何类型的 Web 应用程序,那么您可能已经熟悉服务的概念。服务是应用程序提供的能力,是一个系统的传统视图,比如天气数据服务。

使用此服务的是化身,它们是连接 Internet 的 “事物”(可以是软件或实体的智慧事物)。然后,这些化身与此服务的一部分或整个服务进行交互。每个化身独立地与该服务交互,它们联合在一起会让服务变得很强大。

我们以天气数据服务为例。化身可以是一个用户网站或一个显示当前天气读数的移动应用程序。化身也可以是一个连网的气象站,它每分钟都向天气服务报告数据,共享当前温度、湿度和风速。

因为当前一代移动服务非常强大(Google 和具体的 Google Now、Facebook、Twitter,以及其他一些用户应用程序),所以这些服务可通过各种各样的方式来访问,比如桌面应用程序、移动网站、特定的应用程序、第三方应用程序,甚至浏览器插件。每个化身都可以根据需要使用尽可能多或尽可能少的服务,以满足它们一个服务所在的上下文场景的需要。因此,可以将一个 “转发此链接” 按钮(一个服务)嵌入在任何网页(一个化身)上,或者从 Android 上的主屏幕(一个化身)查看一个搜索结果列表(另一个服务)。

促成此方法的关键是设计拥有容易访问的 API 的服务,使每个化身都可有效地根据上下文与之交互。

此方法在硬件领域的一个不错的现代示例是 FitBit。FitBit 拥有一个产品线,它们旨在让健康情况变得更加可度量。尽管某些产品(例如计步器与楼梯跟踪器)之间存在着区别,但核心服务是相同的。这些产品聚合来自传感器的与活动相关的数据,并将聚合的数据提供给用户,使其能根据自己的健康情况制定明智的决策。

从服务角度讲,FitBit 提供了以下服务:
  • 跟踪活动数据(类型、持续时间、消耗的卡路里、发生的时间和心率)
  • 跟踪睡眠数据(睡眠和清醒的持续时间)
  • 跟踪卡路里和水的摄入
  • 跟踪体重数据
  • 向系统中报告数据

从化身的角度讲,不同的化身在 FitBit 设备上表现出不同的行为:
  • 身体健康跟踪器记录信息并将其传回给服务
  • 一个移动应用程序提供聚合的数据的基本视图
  • 一个 Web 应用程序提供更详细的历史趋势视图
  • 第三方系统可将数据推送到该平台中(比如摄食量)
  • 第三方系统可以读取聚合数据(比如步数),将它们添加到自己的服务中

可以看到,解耦服务和生成优秀的 API 为 FitBit 提供了以下这些好处:
  • 服务可以通过不同的化身来表达,从而在不同的位置(您手腕上、口袋里、桌面上)提供值
  • 第三方系统可以通过自己的服务向 FitBit 添加额外的值。
  • 随着移动领域的碎片化(因为更多的公司在与 Apple 竞争),FitBit 可以通过针对任何需要化身的设备(甚至是 Windows Phone)的应用程序来快速且轻松地应对。

这种解耦方法越来越常见,因为应用程序必须同时提供移动和桌面 Web 体验。如果以类似方式设置您的 IoT 服务,随着市场机会的出现,您可以将它用于新的方向。

IoT 产品需要软件和硬件原型

任何构建物理产品的人都知道,您将会从非常简单的原型着手,根据反馈和它们在真实世界中的性能来不断地改进它们。IoT 产品更加复杂,还需要设计软件和网络元素的原型。

考虑可能使用您的 IoT 产品的无数场景时,此挑战会被放大。它可能是一个传感器,但您如何与它交互?是否通过使用移动或 Web 应用程序?配置是否与报告不同?这些接口有多实用?问题清单似乎列不完。

由于移动环境可能导致上下文更改,从而影响服务实用性的性质,移动产品在应对此挑战上已有很长的历史。因此,移动开发通常会从基本的原型开始,随着原型不断完善来提供越来越多的真实功能。这个过程通常包含 4 个阶段:

1.创建一个简单的交互式 Web 应用程序,它使用一个开发框架来快速说明交互的核心方面。模拟服务对占位符内容的所有调用,以便足以模拟需要呈现信息和与之交互的方式。
2.随着原型的完善,开始集成服务的简单方面,以便能够确定响应是否合适,以及是否与上下文相关。
3.开始设计超越功能原型的接口,确保考虑了交互方法、引导需求和反馈
4.继续完善和集成功能,直到发布该产品
通过迭代式地设计 IoT 产品的原型,可以确保它具有实用价值,而且整合了您服务的正确方面。请注意,不是每个上下文都需要您服务的每个方面。查看一个现代移动银行应用程序,您会看到,除了帐户余额和一些支付/转账交互之外,通常无法自由使用整个银行平台。在移动银行使用的上下文中,用户通常只检查他们是否有足够的钱来就餐或快速支付账单。

除了设计 IoT 服务和化身的原型之外,还可以采用迭代方式设计您在产品中使用的硬件的原型:
1.从简单、现成的硬件开始。尽管每个人都认为 Arduino 是一个业余爱好者平台,但实际上它很便宜,而且使用效果很好,足够可靠地快速生成您可以交互的东西。只需几美元,您就可以确定您的想法是否有任何价值,无需投资创建自定义系统主板设计。
2.使用尽可能多的现成组件来完善原型。将它保持在一定的范围内,以便可以快速拆开重建它。这非常适合通过孔零组件(hole component)和可插拔的模块来设计系统板的原型。使用众所周知的组件,以便您可以设计原型,而不是迷失在实现细节中。
3.将您的关键组件与它们连接到的系统板分开。利用采用了标准协议(比如 I2C 和 SPI)的组件,这意味着您可以将 Arduino 更换为BeagleBone 或 Raspberry Pi。
4.在决定更换硬件之前,尽可能长时间地依靠现有硬件,然后再考虑更换它。
值得注意的是,您可以使用 Raspberry Pi、Arduino、ESP8266 或类似的组件作为 IoT 产品的核心。是的,您有一些很好的理由在需要时使用特定的芯片或系统板。但是,如果创建一个连接 Internet 的花园传感器,ATMEGA328(Arduino 的核心)或 ESP8266 将为您提供足够的自由空间。通过使用现成组件,您可以获得已有的规模优势,以及基本问题已解决的优势。

如今的硬件很容易实施逆向工程。在 IoT 产品中,价值在服务中,而不在各个化身中。因此,昂贵的、定制设计的硬件组件会提高化身的成本,而不会以有意义的方式增加服务的价值(而且可以拉低您产品的价格)。保持您的组件和控制器板模块化。然后,如果需要迁移到更强大或更昂贵的系统板上,您无需再次从头构建所有部分。

原型设计的最后一点是,确保您记录了使用和错误细节。此日志有助于理解系统内有用部分和无用部分,还有助于更快地调试功能,这在原型设计阶段是关键的需求。此日志可以一直保留到生产阶段,记下最终用户在此日志中遇到的明显的隐私问题,以及您需要适当解决的问题。

离线优先设计可以解决连接问题

许多生活在大城市(尤其是美国西部城市)的工程师都认为移动和 wifi 网络的普及是理所当然的。这种错误假设可能导致您的产品完全无用。现代移动和 Web 开发拥有一种称为 “离线优先” 的实践,它旨在构建将能在网络断开时尽可能正常运行的应用程序。所有特性都可能不可用,但断开连接和恢复连接需要是一种不会影响到最终用户的无缝流程。

从移动角度讲,这些一般原则用于促进离线优先设计:
  • 假设网络可能在任何时刻消失 – 甚至(以及特别是)在传输中途消失。
  • 更频繁地使用简短的消息,而不是单条庞大的请求和响应。
  • 使用本地存储来缓冲需要通过网络传输的消息。存储在本地的消息可在离线时排队,或者可在发生故障时再次发送。
  • 确保应用程序评估了连接性,而不要期望用户已经知道连接情况。
  • 在幕后提供数据同步机制,比如首先执行系统状态更新,在以后再同步带版本的数据(使用户可以继续执行自己的任务)。

从 IoT 角度讲,上述许多情况都是存在的,但许多传感器设备都假设永远连接到 wifi。当然,如果您在人口密度很高的地方(比如香港等大城市中心的住宅建筑),可能有 50 – 100 个 wifi 网络在争用同一个信号空间(并相互干扰)。任何参加开发人员大会的人都知道,在 200 位开发人员都使用笔记本电脑、平板电脑和移动电话创建了热点时,wifi 有多可怕。我曾清楚地看到,由于噪音和争用,很多无线模块拒绝在大会上关联。

那么从 IoT 的角度讲,您从这些实践中学到了什么?考虑这些设计要点:

要进一步了解 MQTT,可以阅读 developerWorks 教程 “ 探索IBM Bluemix上的MQTT 和物联网服务”。
  • 假设网络随时可能中断。
  • 首先在本地编写,然后发送数据。
  • 在服务端,使用 RabbitMQ 等消息排队系统来处理您的消息。
  • 使用轻量型和弹性的消息协议,比如 CoAP 和 MQTT,而不是更重量型的 HTTP。

向服务中构建提醒系统,以便可以诊断某个节点何时断开网络一定时间。此提醒必须是仅供参考的,且不会干扰用户(可能因为设备的电池没电了而出现提醒)。

随着更多设备进入网络空间,网络可靠性无法保证,甚至在家庭网络环境中也是如此。您必须确保离线功能和网络恢复能力是 IoT 开发的关键组件。

结束语

在本文中,我介绍了将 API 与服务解耦,如何能帮助创建强大的 IoT 应用程序。另外,通过使用简单的、模块化的硬件,比如 Arduino 主板,您可以更轻松地开发 IoT 解决方案。最后,通过使用离线优先的移动开发概念,更容易确保您的 IoT 设备在网络上取得成功。您现在已经很好地了解了如何将移动开发最佳实践应用到物联网 (IoT) 开发中,让您的 IoT 更有可能取得成功。

本文转自: developerworks

感谢 mengyidan1988 投递这篇资讯

资讯来源: developerworks

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [物联网 开发 最佳实践] 推荐:

物联网开发最佳实践

- - ITeye资讯频道
假设您已经决定开发一个 IoT 产品. 首先,您可以了解许多从移动开发演变而来的实践. 具体地讲,考虑以下这些实践:. 迭代式地设计解决方案的原型. 化身 (avatar)、服务和解耦的 API. 如果您创建过任何类型的 Web 应用程序,那么您可能已经熟悉服务的概念. 服务是应用程序提供的能力,是一个系统的传统视图,比如天气数据服务.

[译] Android 开发最佳实践

- - IT瘾-dev
Android 开发最佳实践. 从 Futurice公司Android开发者中学到的经验. 遵循以下准则,避免重复发明轮子. 若你对开发iOS或Windows Phone 有兴趣, 请看. iOS Good Practices和. Windows client Good Practices这两篇文章.

Struts2、Spring、Hibernate 高效开发的最佳实践

- senyo - IBM developerWorks 中国 : 文档库
Struts2、Spring、Hibernate(SSH)是最常用的 Java EE Web 组件层的开发技术搭配,网络中和许多 IT 技术书籍中都有它们的开发教程,但是通常的教程都会让很多程序员陷入痛苦的配置与修改配置的过程. 本文利用 SSH 中的技术特性,利用 Java 反射技术,按照规约优于配置的原理,基于 SSH 设定编写了一个通用开发框架,这使得开发者可以专注于业务逻辑的开发,而不用随着业务增加而添加或修改任何配置,并且对于权限控制和日志记录也提供了方便的接口.

HTML5游戏开发的5条最佳实践

- - HTML5研究小组
HTML5很棒,因为它几乎无所不能——它并不是为某种特殊的应用设计的. 更重要的是,HTML5几乎是无处不在的. 它就在你的PC机上、你的手机上、你的平板设备上——它甚至可能就在你的厨房电器上. 正是由于HTML5具有丰富的功能并且无处不在,所以它给开发者带来了很多的灵感. 俗话说得好,“一旦开发者有了灵感,他们就开始编写游戏了.

文章: Hadoop MapReduce开发最佳实践(上篇)

- - InfoQ cn
本文是Hadoop最佳实践系列第二篇,上一篇为《 Hadoop管理员的十个最佳实践》. 百度技术沙龙第三十四期:机器学习之多媒体方向的思考(2013年1月12日 周六). 百度技术沙龙特约观察员火热招募中,2013,因为有你更精彩. GitHub运维专家Jesse Newland QCon分享Github ChatOps机器人与GitHub架构演进.

软件开发人员的最佳实践

- - CSDN博客综合推荐文章
        最近在一个网站上看到一篇写关于软件开发人员应该有的几项实践,感觉写的非常的好. 下面将列举下文章中提到的几个方面.         首先文章中提出,软件开发人员需要不断的练习,什么是练习,为什么要练习,练习意味着什么. 练习是一种习惯,练习是一个过程,练习并不意味着记住,练习需要不断的实践,练习需要专心致志的付出.

软件开发中的最佳实践是什么?

- - 博客园_新闻
英文原文: What Is a Best Practice in Software Development?. 刚才,我在 Pluralsight 网站发布了一个教程,标题为“ 促成商业交易的最佳实践”. (如果你想阅读、但没有 Pluralsight 账号,请注册右边侧栏中的邮件列表,我将给你发送一份免费的 30 天订阅).

DevOps最佳实践之应用开发和部署 (insights.thoughtworks.cn)

- - IT瘾-jianshu
本系列内容是我们在不同项目的维护过程中总结的关于DevOps/SRE方面的最佳实践,我们将致力于在项目上尽最大的努力来推行这些最佳实践. 我们希望这些最佳实践能对项目的稳定运营提供帮助,也希望刚接触DevOps/SRE的新人能通过学习这些最佳实践来提升自己在这方面的水平. 因为DevOps/SRE涉及到的方方面面比较多,一次性完成的工作量太大,所以我们决定分阶段来完成,这一次发布的是“应用开发和部署”这个部分的内容,后续我们将逐步发布“云平台与网络”,“操作系统和服务”,“用户与权限”,“监控与可视化”,“数据与备份”,“敏感数据”,“故障与应急响应”这几部分的内容.

Web 开发指南:前端开发编码标准及最佳实践

- - 博客园_梦想天空
  本文向大家推荐来自 isobar(全球顶级数字公司)的前端开发编码标准和最佳实践. 这份文档涵盖 HTML、CSS 和 JavaScript 编码标准,可访问性,性能优化,浏览器兼容和测试和搜索引擎优化支持等众多内容,下面是全文目录:. 60款很酷的 jQuery 幻灯片演示和下载. 12个很棒的学习 jQuery 的网站推荐.

拥抱 GitFlow,优化开发流程:团队协作的最佳实践

- - 掘金 架构
在软件开发领域,良好的团队协作和高效的版本控制流程对项目的成功至关重要. 在过去的几年里,GitFlow 成为了一种备受推崇的工作流模式,为团队提供了一种清晰而灵活的方式来管理代码库和开发过程. 无论是小型团队还是大规模项目,GitFlow 都被证明是优化团队协作和版本控制流程的理想选择. GitFlow 相比于传统的版本控制流程,如单一分支或简单分支管理,具有一些明显的优势.