microservices - 将 IoT 应用程序从单体转换为微服务
问题描述
我有一个由连接到 Arduino、1 个云和 1 个手机的 3 个传感器(温度、湿度、摄像头)组成的系统。我开发了一个整体物联网应用程序,它需要在这三个不同的位置(Arduino、云移动)执行不同的任务。所有这些传感器都有共同的任务,即:数据检测、数据传输(在 Arduino 上执行)、数据保存、数据分析和数据通知(在云端)、数据可视化(在移动端)。
这里的问题我知道一个微服务是独立的,它有它的数据库。如何将我必须使用的这个应用程序转换为使用微服务架构的应用程序?第一个想法是将每个任务表示为微服务。
起初,我将每个任务视为一个组件,我想将每个任务表示为一个微服务,但它们是相互关联的。我的意思是上一个任务的输出是当前任务的输入,所以我不能这样,因为它们不是独立的。数据收集微服务的另一件事应该放在 Arduino 上,数据应该发送到云端存储在数据库中,所以这里我们有一个远程数据库。对于数据收集,我和你有同样的想法,因为有不同的东西(传感器),所以会有不同的微服务,比如(温度数据收集,相机数据收集......)。
解决方案
首先让我澄清一个困惑:当我们说微服务是独立的时,我们如何设计一个微服务,其中前一个任务的输出作为下一个任务的输入。
首先,当我们说微服务时,它意味着它是可独立部署和管理的,但就像在任何系统中一样,微服务也存在依赖关系。您可以阅读有关反应微服务的信息。
因此,您可以拥有相互依赖的微服务,但我们希望这些依赖关系最小化。
现在让我们了解我们在做微服务时想要采用的好处(这将有助于回答您的问题):
可独立部署的组件(可提高部署速度) - 与任何大型应用程序一样,存在相对独立的组件,那么如果我想更改一个组件中的某些内容,我应该确信另一个组件不会受到影响。在单片机中,因为所有都是一体的,所以二进制影响会很大。
独立可扩展 - 作为差异。组件需要差异。规模我们可以有差异。数据库类型和机器要求。
并且微服务架构带来了各种各样的开销(这里不能详细介绍,请在线阅读这些内容)
现在我们将讨论方法
由于数据收集独立于对其进行的分析方式和类型。我会在云上有一个 DataCollectionService(从所有传感器收集数据,如果这些数据完全独立,我们会为 diff.sensors 创建 diff.)。
DataAnalysis 作为单独的服务(需要知道如何收集数据,例如使用 mqtt 、 webscoket 、定期或分批或其他方式)。该服务需要数据并将对其采取行动。
通知服务
Arduino 上的 DataSendClient :一些将数据发送到数据收集服务的客户端。
推荐阅读
- scopus - 是否可以将隶属关系历史与研究人员在给定机构任职的年份配对,因为它出现在 scopus 网站上?
- android - MPAndroidChart -LineChart:如何在宽度中心制作最后一个绘图点
- javascript - 当数据不同时,通过按钮将数据发送到 SQL
- node.js - 在 x86_64-conda_cos6-linux-gnu 找不到开放端口
- c# - 尝试使用 map/zip 使 Mongo FluentAggregation 更加类型安全
- javascript - 在 Vue.js 中捕获动态 URL 变化
- cypress - 将 safe-area-inset-* env 添加到 cypress 测试运行
- c++ - 打印时c ++中的二维向量问题
- google-sheets - 是否可以使用正则表达式来获取在 QUERY 函数(范围)中使用的工作表名称
- c# - 如何将 devart.Pgsqlarray 转换为 c# 列表