为什么 Linux 容器用于物联网?
孤立的应用程序故障
在远程连接 Internet 设备的世界中,停机时间尤其昂贵。与云实例不同,如果一个设备出现故障,您不能简单地启动另一个来替换它。该设备可能是无人机、汽车、某人家中的智能锁或油田中的传感器站。 物联网设备通常在物理上无法访问,因此手动重启并不容易。容器可以在出现问题时进行恢复。
这是如何运作的?它本质上是将设备的核心操作与应用层分离,确保应用故障不会影响设备在网络上通信的能力。
这个主机操作系统管理两个容器:一个运行主管,一个确保设备正常运行并可以连接到resin.io的代理,另一个运行用户应用程序,并带有自己的基本操作系统。在嵌入式开发中,主机操作系统与硬件看门狗接口,确保在低级软件出现任何问题时重新启动。最后,这使得高于该级别的任何问题都成为可以远程解决的应用程序问题。
高效更新
容器提供的另一个优势是能够更好地管理更新,包括降低停机频率和减少磁盘空间的使用。举个例子,让我们看看resinOS是如何处理更新的。
应用带有回退选项的更新的传统方法是 A/B 分区策略。这将驱动器一分为二,其中一半未使用。可以在空分区中下载和安装更新,而无需移除活动操作系统,也不会失去与网络的连接。如果在切换到更新的操作系统时出现任何问题,可以使用最新的工作版本重新启动设备,从而大大减少丢失到网络的机会。
使用resinOS,运行用户应用程序所需的大部分内容都打包在Docker容器中,并且可以在不停机的情况下进行更新。这减少了主机操作系统所需的更新频率。当确实需要进行主机操作系统更新时,仍然使用 A/B 分区策略,但主机操作系统的最小占用空间允许更新分区小得多。
灵活而熟悉的工作流程
容器在弥合云和嵌入式工作流之间的差距方面发挥着重要作用。Linux 是一种广泛使用且高度可定制的操作系统,Linux 容器提供了一组标准的核心功能,同时仍然让嵌入式开发人员可以自由选择他们已经熟悉的工具、库和配置。云开发人员期望这种灵活性,并将其扩展到嵌入式设备使更多的开发人员能够构建和支持物联网项目。通过在云和边缘设备之间调整底层技术,容器减少了支持混合工作流的开发人员和组织的摩擦。