适用于物联网的 DevOps:9 个成功秘诀
物联网的兴起使得设计工作重心从硬件转向了软件。这为物联网开发人员制造了机会,使他们能够实行强调快速迭代和部署的 DevOps 原则。
但是,将 DevOps 应用到物联网是一项极具挑战性的任务。直到最近,嵌入式开发人员都还仍然秉持以硬件为中心世界观。“他们出生的世界,是优化 RAM 的每个字节的世界,” Canonical 市场营销副总裁 Thibaut Rouffineau 说。这种方法基本上与 DevOps 加快交付速度的理念格格不入。
相比之下,当今的物联网开发人员通常具有 IT 软件背景,其中敏捷和 DevOps 等概念普遍存在。他们将硬件视为要管理的风险,而不是要优化的资产,但这种思想并不总是适用于嵌入式设计。
例如,如果服务器关闭,IT 解决方案是在另一台服务器上启动新的实例。问题便解决了。这种方法不能在物联网世界中轻松代入,因为在物联网世界中已部署硬件,无法快速更换。
为了将这些世界观融合在一起,Rouffineau 概述了适用于物联网设备构建商的 9 个实用的 DevOps 经验,无论背景为何,所有这些经验在某种程度上是相辅相成的。
1. 尽可能标准化
物联网 DevOps 的第一个规则是尽可能标准硬件。Rouffineau 举了一个好例子,就是采用英特尔® 凌动™ 处理器、已启用蓝牙的英特尔® NUC,它是可作为物联网设计基础的标准、紧凑的硬件平台。“它非常适合用于蓝牙热点、数字标牌和工业物联网网关,并且它的用途非常广泛,” Rouffineau 说道。IEI Integration Corp. 使用 NUC 作为其 TANK-801-BT 无风扇、嵌入式系统的基础(图 1)。
开发人员可在更优化的主板上节省 50 美元,但是这个钱不值得节省,Rouffineau 说。此外,NUC “具有很多扩展空间,可以运行未来应用程序。” 这种可扩展性至关重要,因为客户会遇到更先进的应用程序,会集成人工智能 (AI)。它也可以用作开发和生产平台。
标准硬件的原则也适用于软件。Rouffineau 建议使用标准、经过认证的现成操作系统,例如 Ubuntu。“当您可以简单化时,为何要复杂化?” 他说。拥有 Ubuntu 操作系统意味着只要该操作系统在使用中,就随时可以获得技术支持。
2. 使用合适的开发工具
根据 Canonical 研究,68% 的物联网专业人士都在努力雇佣具有合适物联网技能的员工。但是,根据 Rouffineau 的说法,问题在于他们要查找的技能范围如此广泛,从后端编码到硬件和商业头脑,要找到一个全才来完成所有工作绝无可能。
他说,最简单的解决方案是使用标准的 Linux 开发环境,因为这样可以更轻松地以形成一个具有所需多元化技能的团队。另外,当环境与设备上的操作系统相匹配时,开发和部署将更加轻松。这种兼容性简化了编码和调试工作,并可避免对全堆栈开发人员的需要,这种开发人员可能需要编写 node.js 以进行快速开发,然后用 C 语言编程以进行优化。
3. 重复使用代码
“重复使用代码是以全新的方式实现物联网的好处之一,对于 Linux 尤其如此,” Rouffineau 说道,并且引用了 Nextcloud 的私有云存储作为例子。
Nextcloud 想开发出其存储解决方案的小设备版本。通过重复使用其基于 Ubuntu 的云软件,该公司在短短三个月内就创造了 Raspberry Pi 解决方案。
4. 使用可复制的构建过程
Linux 的问题是,开发人员开始制作他们自己的映像,修改应用程序、共享库和设备驱动程序等变量。“现在您具有的映像取决于是谁构建映像,以及他们如何决定构建它,” Rouffineau 说道。
为了避免这种情况,Canonical 开发了 Ubuntu Core,它将软件包装在 “快照” 中(图 2)。这些软件包确保软件具有某些特性,例如:
- 它们是永久性的,因此它们是只读的。
- 可以对它们进行跟踪和进行身份验证,因此可从商店下载它们。
- 它们易于升级。
快照的好处之一是开发人员可以根据代码的来源拆分映像。例如,内核和设备可能来自芯片制造商或操作系统供应商,并会根据操作系统拆分,这又会转而根据顶层的应用程序软件包拆分。整个结构可以使用 Ubuntu Core 从命令行进行管理。
5. 自动化构建过程
“从 DevOps 的角度来看,这是我们想要达到的目标,” Rouffineau 说道,而不是每个构建一个命令行指令。为了实现此目标,将代码推送到为不同架构而构建的中心,再将代码分配到设备。
6. 自动分发代码
“在嵌入式空间中没有真正的好方法可用于使用通用机制来分发软件,” Rouffineau 说道。DevOps 解决了这个问题。通过使用 Ubuntu Core,此过程开始将更新放入快照中 - 并且只放入更新,而不是整个代码,以避免发送大文件(图 3)。
接下来,在目标设备上备份原始快照及其数据。如果在更新过程中出现错误,或者在测试升级时检测到某些内容,则只需回滚到原始数据和快照即可。
7. 构建安全性以便可以长期运行
自动分配对于设备安全而言尤其重要。Canonical 研究表明 57% 的受访者期望安全由服务提供商或设备制造商处理。
设备在最初部署时可能解决了当时的所有漏洞。但是一年之后,单单 Linux 内核中就会涌现多达 450 个其他漏洞。
“对于 DevOps 而言就不存在这个问题,因为它会通过实时打补丁来自动解决这个问题,” Rouffineau 说道。“为何不在这里应用相同的理念?” 所有安全补丁都可以使用 Ubuntu 自动部署,不必专人解决安全问题。
8. 加快构建、部署、测试周期
DevOps 流程可用于持续更新设备和解决过时问题。“您甚至可以针对您的一些关键客户对软件执行测试版测试,” Rouffineau 说道。通过使用 DevOps 最佳实践,设备可以在部署后继续发展,在将设备交付给客户很久之后都可以。
9. 如同 DevOp 那样试运行
“从服务的价值主张开始,然后随着客户需求的不断变化而不断发展、发展、再发展,” Rouffineau 说道,让产品日臻完美。以无人机为例,无人机硬件曾是 “比谁更差” 的竞争,但是通过添加软件服务,它们有了更好的价值主张(图 4)。
图 4:举例来说,使用 DevOps 方法允许无人机制造商从销售一次性硬件过渡到长期销售基于软件的服务。(资料来源:Canonical)
现在,无人机提供商可以长期销售软件服务,甚至鼓励第三方创建在无人机上运行的应用程序。或者他们转售来自无人机的数据,这些因素合力,使得提供商更有价值,并且不太可能被成本更低的硬件替换。
在这个全新的物联网 DevOps 世界中,可以从标准硬件出发,更快、更安全、更可靠地进入市场。最重要的是,您可以长期保留客户,取代一锤子硬件买卖。嵌入式开发人员需要在上面花点心思,不过这心思值得花。
要了解有关此主题的更多信息,请观看网络研讨会 “如 DevOp 那样构建物联网设备”。