首页 > 解决方案 > 将 IoT 应用程序从单体转换为微服务

问题描述

我有一个由连接到 Arduino、1 个云和 1 个手机的 3 个传感器(温度、湿度、摄像头)组成的系统。我开发了一个整体物联网应用程序,它需要在这三个不同的位置(Arduino、云移动)执行不同的任务。所有这些传感器都有共同的任务,即:数据检测、数据传输(在 Arduino 上执行)、数据保存、数据分析和数据通知(在云端)、数据可视化(在移动端)。

这里的问题我知道一个微服务是独立的,它有它的数据库。如何将我必须使用的这个应用程序转换为使用微服务架构的应用程序?第一个想法是将每个任务表示为微服务。

起初,我将每个任务视为一个组件,我想将每个任务表示为一个微服务,但它们是相互关联的。我的意思是上一个任务的输出是当前任务的输入,所以我不能这样,因为它们不是独立的。数据收集微服务的另一件事应该放在 Arduino 上,数据应该发送到云端存储在数据库中,所以这里我们有一个远程数据库。对于数据收集,我和你有同样的想法,因为有不同的东西(传感器),所以会有不同的微服务,比如(温度数据收集,相机数据收集......)。

标签: microservicesiot

解决方案


首先让我澄清一个困惑:当我们说微服务是独立的时,我们如何设计一个微服务,其中前一个任务的输出作为下一个任务的输入。

首先,当我们说微服务时,它意味着它是可独立部署和管理的,但就像在任何系统中一样,微服务也存在依赖关系。您可以阅读有关反应微服务的信息。

因此,您可以拥有相互依赖的微服务,但我们希望这些依赖关系最小化。

现在让我们了解我们在做微服务时想要采用的好处(这将有助于回答您的问题):

  1. 可独立部署的组件(可提高部署速度) - 与任何大型应用程序一样,存在相对独立的组件,那么如果我想更改一个组件中的某些内容,我应该确信另一个组件不会受到影响。在单片机中,因为所有都是一体的,所以二进制影响会很大。

  2. 独立可扩展 - 作为差异。组件需要差异。规模我们可以有差异。数据库类型和机器要求。

并且微服务架构带来了各种各样的开销(这里不能详细介绍,请在线阅读这些内容)

现在我们将讨论方法

  1. 由于数据收集独立于对其进行的分析方式和类型。我会在云上有一个 DataCollectionService(从所有传感器收集数据,如果这些数据完全独立,我们会为 diff.sensors 创建 diff.)。

  2. DataAnalysis 作为单独的服务(需要知道如何收集数据,例如使用 mqtt 、 webscoket 、定期或分批或其他方式)。该服务需要数据并将对其采取行动。

  3. 通知服务

  4. Arduino 上的 DataSendClient :一些将数据发送到数据收集服务的客户端。


推荐阅读