软件设计不是CRUD(22):在流式数据处理系统中进行业务抽象落地——设计思考

(接上文《软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析》)

那么思考到这里我们就能做一些关于设计思路的总结:

  • 每一个独立的数据处理流,就是数据采集系统中的一个功能。这个功能具备一个静态的控制逻辑(当然控制逻辑也可以是动态的,本文不进行讨论)。只要某个IoT设备/设备网关的数据处理过程匹配控制逻辑本身,那么IoT设备/设备网关就可以通过这个数据处理流进行数据采集。

  • 为了让一个数据流能最大程度支持更多具体数据结构的数据采集工作,数据处理流都会进行模型抽象和行为抽象,以便让具体的IoT设备/设备网关可以实现具体的模型和具体的行为(业务逻辑)。

  • 这样一来,当新的IoT设备/设备网关需要进行数据采集时,首先可以寻找现有的各个数据处理流,是否匹配新的IoT设备/设备网关的数据结构。如果匹配,就可以在实现这个数据处理流的抽象模型和抽象行为,以便进行接入;如果没有,则再创建新的数据处理流(新的数据处理流也应该进行模型抽象和行为抽象)。

  • 而以上新数据类型的采集能力接入,完全不会影响其它数据处理流的工作,也不会影响同一数据处理流对其它数据类型的采集工作。只需要在完成具体模型和具体行为的实现后,通过诸如Jenkins这样的自动化部署工具重新发布数据处理流即可。

3、设计落地

3.1、整体设计思考

下图是数据采集系统的核心设计结构
在这里插入图片描述

  • 数据汇聚层的设计思考

数据汇聚层提供两种数据汇聚能力,一种能力是支撑下层IoT设备/设备网关主动发送数据的能力,数据汇聚层提供Kafka或者Logstash作为数据的接收组件,下层IoT设备/设备网关在主动发送数据时,不需要保证数据一定满足某种规范结构,只需要保证发送的数据是可以序列化的即可。数据发送者还需要保证不同类型的IoT设备/设备网关发送到不同的分组汇总,例如如果采用Kafka接受监控数据,那么不同的数据将被推送到不同的Kafka-Topic中。

数据汇聚层还提供了一个主动向下采集数据的代理程序,这个代理程序主要是服务于那些不能主动推送数据的IoT设备/集中设备,以便周期性从这些设备中取得监控数据。根据需要取得的数据不同、下层设备提供的接入方式不同,代理程序中又提供了很多种不同的数据抓取方式。例如如果下层设备支持Http协议,那么可以通过Selenium组件采集数据;如果下层设备只支持TCP/UDP传输层协议,那么可以通过Nessus/Nmap这种扫描组件进行数据采集……

代理程序完成采集后,数据将被推送到数据汇聚组件中。需要注意的是,除了在采集代理程序中设定了相关(完善)规则的数据以外,默认情况下代理程序采集到了什么样的数据,就会向数据汇聚组件中推送什么样的数据,并不会要求这些数据一定需要满足什么样的结构、格式。

  • 数据采集处理层的设计思考

数据采集处理层部署了一套Flink集群,这套Flink集群是数据采集系统进行数据收集、数据过滤、数据清洗、数据完善和数据落库操作的核心集群。这个Flink集群中各个独立的数据流都具有不同的工作逻辑,可以支持具有相同数据采集过程的一个或者多个IoT设备/设备网关。Flink集群中如何进行数据流设计,也是本文主要讨论的内容。

  • 数据层的设计思考

经过初步处理的,用于后续正式数据分析的数据,需要进行落库保存。由于主要是为数据分析服务,所以我们选择一种湖仓一体化的OLAP型数据库进行数据落库,技术选型为Starrocks。由于Starroks原生支持从Kafka中主动拉取数据进行存储,也支持通过诸如JDBC这样的外部连接进行数据操作,那么从Flink-Sink端存储数据到Starrock就至少有两种方式。方式一,从Flink-Sink推送数据到Kafka,然后在Starrocks中创建数据表,再设定从Kafka中特定的Topic中拉取数据,如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式技术学习——c51单片机——蜂鸣器

一、蜂鸣器介绍 蜂鸣器时一种将电信号转化成声音信号的器件,常用来产生设备的按键音,报警音等提示信号。 蜂鸣器分为有源蜂鸣器,无源蜂鸣器 。 有源蜂鸣器:内部自带震荡源,将正负极街上直流电压即可持续发声&#x…

通过摄像头检测步频

通过摄像头识别运动频率,比如步频。 打开摄像头 循环读取视频帧 灰度转换 统计中间一行数值和 人在摄像头前运动,该数值会呈现周期变化 通过快速傅里叶转换,将和步频相似频率显示出来。 (尝试人脸检测,跟着人脸位置变…

深度学习(十)——神经网络:非线性激活

一、Padding Layers简介 nn.ZeroPad2d:在输入的tensor数据类型周围用0进行填充 nn.ConstantPad2d:在输入的tensor数据类型周围用常数进行填充 这个函数的主要作用是对输入的图像进行填充,但里面所有功能都能用nn.Conv2d实现。 二、Non-li…

一文读懂OpenGVLab带来的最新视觉预训练框架

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

为什么直接用 cv2.imwrite 保存 PIL 的图片会导致奇怪的颜色?

在处理图像保存时,使用不同的库可能会导致颜色显示上的差异。特别是 Image.fromarray(synthesis).save 和 cv2.imwrite(save_dir, image) 两种方法之间的区别,会导致保存的图像颜色不同。这篇博客将解释这些方法的区别,以及具体导致颜色差异的…

.NET周刊【6月第3期 2024-06-18】

国内文章 记一次 .NET某游戏币自助机后端 内存暴涨分析 https://www.cnblogs.com/huangxincheng/p/18243233 文章讨论了程序中非托管内存暴涨的问题。作者描述了友人发现内存问题并请他帮助分析的背景,利用WinDbg工具分析Linux平台上的内存泄漏情况。文章介绍了如…

Maven POM:掌握项目对象模型的艺术

Maven POM:掌握项目对象模型的艺术 1. 引言 Maven,作为一个强大的项目管理和构建自动化工具,已经成为了Java社区中不可或缺的一部分。在Maven的世界里,POM(Project Object Model,项目对象模型&#xff09…

N32G031 DMA

目录 N32G031 DMA概述 DMA主要特点 DMA总线架构 DMA使用场景 DMA配置和使用 优点: 缺点: N32G031 DMA概述 N32G031系列芯片基于32位ARM Cortex-M0微控制器,其内置了DMA(直接内存访问)控制器。DMA控制器允许数据…

潮玩宇宙大逃杀APP系统开发成品案例分享指南

这是一款多人游戏,玩家需要选择一个房间躲避杀手。满足人数后,杀手会随机挑选一个房间杀掉里面所有的参与者,其他房间的幸存者将平均瓜分被杀房间的元宝。玩家在选中房间后,倒计时结束前可以自由切换不同房间。 软件项目开发成品…

LabVIEW开发为什么沟通需求非常重要

在LabVIEW开发项目中,需求沟通是项目成功的基石。以下是需求沟通的重要性及其原因: 明确项目目标: 定义清晰的目标:通过与用户的沟通,可以明确项目的目标和范围,确保开发团队理解用户的实际需求&#xff0c…

【Android-Compose】流式布局FlowRow 不能居中对齐的一种解决办法

问题描述: 在安卓Compose 开发中使用LazyColumn 流式布局 FlowRow 有时候比延迟网格布局更灵活,但是也可能出现自动流向下一行之后,末尾处留下一些小空白。如图: 问题解决: 为了尽可能居中对齐,我们可…

专业技能篇---计算机网络篇

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么?二、Http的状态码有哪些?三、 HTTP与HTTPS有什么区别?四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别?六、GET与POST 前言 主…

dmhs同步因目的端表自增列报错解决方法

dmhs同步因目的端表自增列报错解决方法 1 dmhs copy 装载数据时报错 HY000 CODE:-27232 配置源端捕获器cpt 1 dmhs copy 装载数据时报错 HY000 CODE:-2723 ERR:Only if specified in the column list and SET IDENTITY INSERT is ON, then identity column could be assigned …

2023-2024年新能源汽车市场盘点与展望

本文全面盘点了2023年和2024年新能源汽车市场的新车型、价格走势、智能化趋势以及市场竞争格局,涵盖了各个价格级别和车型类别,为消费者提供购车参考和市场洞察。 文章目录 1.1 2023年新能源汽车市场总结1.2 2024年新能源汽车市场趋势1.3 新车型发布概览…

洛谷 P3379:最近公共祖先(LCA)← RMQ+欧拉序

【题目来源】https://www.luogu.com.cn/problem/P3379【题目描述】 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。【输入格式】 第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−…

PostgreSQL源码分析——INSERT

这里我们对INSERT语句进行分析, 只分析其宏观过程,具体细节后续再分析。我们就分析下面的语句的执行过程。 insert into t1 values(4,4);主流程 主流程如下: exec_simple_query --> pg_parse_query //语法解析--> raw_parser-->…

数据库面试题-ElasticSearch

数据库面试题-ElasticSearch 1、ElasticSearch是什么?2、谈谈ElasticSearch分词与倒排索引的原理?3、说说ElasticSearch分段存储的思想?4、说说你对ElasticSearch段合并的策略思想的认识?5、知道什么是文本相似度TF-IDF吗?6、说说ElasticSearch写索引的逻辑?7、说说Elast…

AI大模型的战场:通用大模型VS垂直大模型,谁会赢?

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

Clickhouse备份恢复_clickhouse-backup方式备份恢复的使用介绍

https://clickhouse.com/docs/zh/operations/backup https://github.com/Altinity/clickhouse-backup?tabreadme-ov-file#readmeclichouse-backup备份的总结 1、clichouse-backup备份的方式是物理备份 2、clichouse-backup只能在数据库本机运行备份,在远程异机去备…

联合类型和交叉类型

联合类型和交叉类型 在TypeScript中,除了基本的类型(如 number、string、boolean 等),我们还可以使用更加高级的类型来描述复杂的数据结构。其中,联合类型和交叉类型就是两个非常有用的高级类型。 联合类型(Union Types) 联合类型允许一个变量可以是多种类型中的任意一种。我…