将 IoT 应用程序从单体式服务转变为微服务式
Transform an IoT application from monolothic to microservices
我有一个系统,由连接到 Arduino 的 3 个传感器(温度、湿度、摄像头)、1 个云和 1 个移动设备组成 phone。我开发了一个整体式物联网应用程序,它具有需要在这三个不同位置(Arduino、云移动)执行的不同任务。所有这些传感器都有共同的任务:数据检测、数据传输(在 Arduino 上执行)、数据保存、数据分析和数据通知(在云端)、数据可视化(在移动设备上)。
这里的问题我知道微服务是独立的,它有自己的数据库。如何将我拥有的这个应用程序转换为使用微服务架构的应用程序?第一个想法是将每个任务表示为一个微服务。
起初,我将每个任务视为一个组件,我想将每个任务表示为一个微服务,但它们是相互关联的。我的意思是前一个任务的输出是当前任务的输入,所以我不能这样做,因为它们不是独立的。数据收集微服务的另一件事应该放在 Arduino 上,数据应该发送到云端存储在数据库中,所以这里我们有一个远程数据库。对于数据收集,我和你的想法一样,因为有不同的东西(传感器)所以会有不同的微服务,比如(温度数据收集,摄像头数据收集......)。
首先让我澄清一个困惑:当我们说微服务是独立的时,我们如何设计一个微服务,其中前一个任务的输出是下一个任务的输入。
首先,当我们说微服务时,它意味着它是可独立部署和管理的,但在任何系统中都存在依赖关系,微服务也相互依赖。您可以阅读有关 reactice 微服务的内容。
因此您可以拥有相互依赖的微服务,但我们希望这些依赖关系最小化。
现在让我们了解在进行微服务时我们想要采用的好处(这将有助于回答您的问题):
可独立部署的组件(可提高部署速度)- 与任何大型应用程序一样,存在彼此相对独立的组件,因此如果我想更改一个组件中的某些内容,我应该相信另一个不会受到影响。在单体中,因为所有的都是一个二进制影响会很大。
可独立扩展 - 作为差异。组件需要差异。规模我们可以有差异。数据库类型和机器要求。
微服务架构带来了各种各样的开销(这里无法详细介绍,请在线阅读这些内容)
现在我们将讨论方法
因为数据收集独立于对其进行分析的方式和类型。我会在云上有一个 DataCollectionService(从所有传感器收集数据,如果这些数据完全独立,我们会为差异传感器创建差异)。
DataAnalysis 作为单独的服务(用户需要知道数据是如何收集的,比如它是使用 mqtt 、 webscoket 、周期性的还是批量的等等)。此服务需要数据并将对其进行操作。
通知服务
Arduino 上的 DataSendClient:一些将数据发送到数据收集服务的客户端。
我有一个系统,由连接到 Arduino 的 3 个传感器(温度、湿度、摄像头)、1 个云和 1 个移动设备组成 phone。我开发了一个整体式物联网应用程序,它具有需要在这三个不同位置(Arduino、云移动)执行的不同任务。所有这些传感器都有共同的任务:数据检测、数据传输(在 Arduino 上执行)、数据保存、数据分析和数据通知(在云端)、数据可视化(在移动设备上)。
这里的问题我知道微服务是独立的,它有自己的数据库。如何将我拥有的这个应用程序转换为使用微服务架构的应用程序?第一个想法是将每个任务表示为一个微服务。
起初,我将每个任务视为一个组件,我想将每个任务表示为一个微服务,但它们是相互关联的。我的意思是前一个任务的输出是当前任务的输入,所以我不能这样做,因为它们不是独立的。数据收集微服务的另一件事应该放在 Arduino 上,数据应该发送到云端存储在数据库中,所以这里我们有一个远程数据库。对于数据收集,我和你的想法一样,因为有不同的东西(传感器)所以会有不同的微服务,比如(温度数据收集,摄像头数据收集......)。
首先让我澄清一个困惑:当我们说微服务是独立的时,我们如何设计一个微服务,其中前一个任务的输出是下一个任务的输入。
首先,当我们说微服务时,它意味着它是可独立部署和管理的,但在任何系统中都存在依赖关系,微服务也相互依赖。您可以阅读有关 reactice 微服务的内容。
因此您可以拥有相互依赖的微服务,但我们希望这些依赖关系最小化。
现在让我们了解在进行微服务时我们想要采用的好处(这将有助于回答您的问题):
可独立部署的组件(可提高部署速度)- 与任何大型应用程序一样,存在彼此相对独立的组件,因此如果我想更改一个组件中的某些内容,我应该相信另一个不会受到影响。在单体中,因为所有的都是一个二进制影响会很大。
可独立扩展 - 作为差异。组件需要差异。规模我们可以有差异。数据库类型和机器要求。
微服务架构带来了各种各样的开销(这里无法详细介绍,请在线阅读这些内容)
现在我们将讨论方法
因为数据收集独立于对其进行分析的方式和类型。我会在云上有一个 DataCollectionService(从所有传感器收集数据,如果这些数据完全独立,我们会为差异传感器创建差异)。
DataAnalysis 作为单独的服务(用户需要知道数据是如何收集的,比如它是使用 mqtt 、 webscoket 、周期性的还是批量的等等)。此服务需要数据并将对其进行操作。
通知服务
Arduino 上的 DataSendClient:一些将数据发送到数据收集服务的客户端。