软件设计不是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中拉取数据,如下图所示:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习笔记12:进阶篇(二),类的继承与组合

类的继承 我们在编写一系列的类的时候,会发现这些类很相似,但是又有各自的特点和行为。在编写这些类的时候,我们可以把相同的部分抽象成一个基类,然后根据其他不同的特点和行为,抽象出子类,继承这个基类。…

DY-48电压继电器 板前接线导轨安装 约瑟JOSEF

DY-40系列导轨式电压继电器是用于继电保护线路中,作为过电压保护或低电压闭锁的动作元件1。 电压继电器用于继电保护线路中,作为过电压保护或低电压闭锁的动作元件。其主要特点如下1: 动作范围:过电压继电器:1.212倍…

移植案例与原理 - build lite配置目录全梳理

命令行工具hb(HarmonyOS|OpenHarmony Build 编译构建系统的缩写)都很熟悉了。这是一个基于gn和ninja的构建系统,以支持OpenHarmony组件化开发为目标,提供以下基本功能: 支持按组件拼装产品并编译。 独立构建芯片解决方案厂商源码。 独立构建…

自杀行为的神经生物学认识

自杀行为的神经生物学认识 编译 李升伟 隐藏在自杀行为背后的大脑生化机制正引领人类对自杀的认识从黑暗步入光明。科学家希望未来这些机制能带来更好的治疗和预防策略。 基斯 • 范希林根(Cornelis Van Heeringen)第一次遇见瓦莱丽( Va…

oracle12c到19c adg搭建(二)oracle12c数据库软件安装

运行安装程序 不勾选 只安装软件 选择单实例安装 选择语言 企业版 确认目录 产品目录 用户组 开始安装 执行root脚本 [rooto12u19p software]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read,write permissions for gro…

操作系统笔记(自用随笔)

如有错误,欢迎指正!!!

Chromium 开发指南2024 Mac篇-Xcode安装(二)

1.引言 在开始编译和开发 Chromium 之前,确保开发环境的正确配置是至关重要的。对于 Mac 用户来说,Xcode 是不可或缺的工具,因为它不仅提供了必需的编译器和工具链,还包含了与 macOS 系统深度整合的开发资源。在本系列指南的第一…

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

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

HTB Editorial

Editorial User Nmap ┌──(kali㉿kali)-[~/…/machine/SeasonV/linux/Editorial] └─$ nmap -A 10.129.24.67 -T 4 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-16 21:54 EDT Nmap scan report for 10.129.2…

03-ES6新语法

1. ES6 函数 1.1 函数参数的扩展 1.1.1 默认参数 function fun(name,age17){console.log(name","age); } fn("张美丽",18); // "张美丽",18 fn("张美丽",""); // "张美丽" fn("张美丽"); // &…

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

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

Windows系统部署本地SQL_Server指引

Windows系统部署本地SQL_Server指引 此指引文档环境为Windows10系统,部署SQL_Server 2019为例,同系列系统软件安装步骤类似。 一、部署前准备; 下载好相关镜像文件;设备系统启动后,将不必要的软件停用,避…

全开源版人才招聘系统源码 小程序运营级平台源码 类似58同城招聘、智联招聘平台

在当今数字化时代,人才招聘与平台运营成为了企业发展的重要环节。分享一套功能全面、易于二次开发的人才招聘系统源码小程序运营级平台源码。这些源码基于类似58同城招聘、智联招聘等大型招聘平台的设计理念,旨在为企业提供高效、便捷的人才招聘与平台运…

HCIP认证笔记(填空)

1、为防止攻击者伪造BGP报文对设备进行攻击,可以通过配置GTSM功能检测IP报文中的TTL值的范围来对设备进行保护。如果某台设备配置了“peer x.x.x.x valid-ttl-hops 100",则被检测的报文的TTL值的有效范围为【(156),255】; 解析: peer {group-name | ipv4-address…

排序——快速排序

目录 思想 演示 代码实现 解释 优化 三数取中 小区间优化 补充 挖坑法 双指针法 非递归实现 思想 快速排序是一种二叉树结构的交换排序方法。 基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列&am…

[渗透测试学习] SolarLab-HackTheBox

SolarLab-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.16扫描结果如下 PORT STATE SERVICE VERSION 80/tcp open http nginx 1.24.0 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows n…

【漏洞复现】致远互联FE协作办公平台 ncsubjass SQL注入

0x01 产品简介 致远互联FE协作办公平台是一款为企业提供全方位协同办公解决方案的产品。它集成了多个功能模块,旨在帮助企业实现高效的团队协作、信息共享和文档管理。 0x02 漏洞概述 致远互联FE协作办公平台 ncsubjass.jsp接口处存在SQL注入漏洞,未经身份验证的…

1.4k star 项目 CMakeTutorial 阅读和点评

1.4k star 项目 CMakeTutorial 阅读和点评 文章目录 1.4k star 项目 CMakeTutorial 阅读和点评0. 概要1. CUDA 目录2. FindPackage 目录3. Installation 目录4. PackageManage 目录5. PythonExtension 目录6. ImportExternalProject 目录总结 0. 概要 在 github 搜索关键字 CM…

ORA-12560: TNS:协议适配器错误

项目场景: 由于最近一直没有连接oracle,然后之前windows也是正常可以启动oracle,正常连接。无论是SQL Developer还是SQL PLUS命令,都能正常连接和操作。 问题描述 这两天刚好用SQL Developer工具连接,然后报错&#…

vue中通过自定义指令实现一个可拖拽,缩放的弹窗

效果 功能描述 按住头部可拖拽鼠标放到边框,可缩放多层重叠丰富的插槽,易于扩展 示例 指令代码 export const dragDialog {inserted: function (el, { value, minWidth 400, minHeight 200 }) {// 让弹窗居中let dialogHeight el.clientHeight ?…