【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作

news2025/1/22 8:05:04

目录

1.今年的创作路线

2.先说第一条线

2.1.由日志引出的海量文本数据存储和分析问题

2.2.监控以及监控的可视化

2.3.数据量级再往上走牵扯出了大数据

2.4.由大数据牵扯出的JAVA线程高级内容

3.第二条线,也是2025要继续的主线


1.今年的创作路线

今年的写作内容并不是碎片化的想到什么写什么,而是有起承转合关系的。为了方便大家阅读先抛出总结,总共两条线:

1.由海量日志存储引出ES、mongoDB、监控、可视化,大数据内容,在大数据里引出了JAVA线程相关内容。

2.用了小半年把上面那一套大数据的内容写完,然后转头决定写一个系列,如何用面向对象的思维来规范软件的开发周期,力求做到做出能很方便应对需求变动的代码。也就是从需求建模、UI设计、对象设计,到最后的编码,一套可靠的DDD落地打法。

2.先说第一条线

2.1.由日志引出的海量文本数据存储和分析问题

在23年的最后一篇文章里,我聊了一下分布式链路追踪技术:

分布式链路追踪技术其实就是基于日志来完成的,这个时候就引出了日志的存储问题,日志的存储问题其实就是一个海量文本型数据的存储问题,于是在24年开头,就引出了关于ES的系列文章:

一说到ES就不得不提另一个有名的文本数据库——MongoDB,于是写完ES的系列,马上就写了MongDB,顺势对比了一下二者各自的特点和各自的适用场景:

在对比的文章里我比对了各自的特点得出:

聊完日志的存储问题后,我们找到了合适的方法来存储日志,那么自然就会想到日志的分析问题,数据我们存储好了,需要进行数据的可视化,我决定用docker来搭建测试环境,于是先写了一下docker的快速使用手册,然后选择es的配套组件ELK全家桶来实现日志的可视化:

使用logstath对日志进行清洗,用kibana自带的快速配置的数据大屏来实现日志数据的可视化。

到这里日志的从存储到二次开发,可视化就完成了,但是既然都聊到日志的可视化了,自然就要聊一下其它的可视化。除了日志信息是需要采集的,业务系统的一些指标也是需要进行收集和进行可视化的,也就是监控问题。

2.2.监控以及监控的可视化

监控问题自然要从JAVA EE的标准,最原始的监控系统JMX开始聊,于是我从JMX到spring actutaor,结再到Prometheus聊了一下监控的问题,以及如何结合grafana快速搭建监控的数据大屏:

日志和监控加上可视化其实就完成了一个完善的业务系统运行情况的监测,能搭建出这样一套基本上能第一时间定位到线上生产问题。

2.3.数据量级再往上走牵扯出了大数据

一开始是为了存储海量日志数据牵扯出前面的内容,前面的内容确实能扛住很大的数据量,完成大量数据的存储和分析,但是如果数据量级再往上走,该怎么办喃?说的直白一点,ES和MongeDB能抗住的数据量级在几个GB到几TB之间,再大的话,其数据的操作就有点吃力了。既然一开始想的是海量数据的存储和分析问题,那么就再往上走直接推演到极限,数据量起步就是TB级别,这时候就要引入大数据技术了。

数据的使用无非要解决存储和计算两个问题,大数据无非就是要用合理的架构来解决海量数据的存储和计算问题。

大数据最核心的概念是Google的三驾马车:

GFS、bigtable、mapreduce。

这三驾马车就是大数据存储和计算的基础理念,可以说一切大数据技术都是基于三驾马车的思想演变出来的。于是我先去理了一下三驾马车的论文以及其经典的一些衍生。

首先是海量数据的存储问题——GFS:

GFS提出了大数据存储的核心打法:

1.将数据分块来将数据切小,从而使得数据可以被分布式的进行存储。

2.分布式存储后,利用一个目录来记录同一个数据分出来的块儿被存在哪些服务器上。

3.将数据复制成多分副本,以应对切块后数据可能存在的丢失问题。

4.在读写上做出一些约束,充分拉高数据的读写。

聊完GFS当然应该就要聊到Hadoop,Hadoop中的核心组件,分布式文件系统——HDFS,其实就是基于GFS的核心打法来实现的。

聊完分布式文件系统就要考虑数据操作的易用性,也就是用GFS作为底座,在上面封装出一个数据库出来便于用类SQL的方式对数据进行便捷的操作,于是写了分部式数据库bigtable以及基于其打法落地的经典分布式数据库——HBase:

聊完数据的存储和查询,自然就要聊数据的计算了,也就是大数据里的另一个核心——计算引擎。计算引擎的技术底座是Google三驾马车的其中一架——MapReduce。其核心思想就是:任务去找数据将任务分发到数据所在地,就地计算,然后将结果汇总。后面的诸如Spark之类的计算引擎也是对mapreduce的优化,但其核心都是计算和汇总两步:

2.4.由大数据牵扯出的JAVA线程高级内容

大数据并不会直接牵扯出多线程的问题,只是聊到大数据的计算引擎就不得不聊流计算引擎。mapreduce、spark之类的都叫做批处理引擎,其核心理念是:

任务去找数据。

适合的场景是数据已经存在了,在数据上进行计算,但是有些时候数据是实时产生的,并不是已经提前准备好了,这种数据叫流数据,这类数据产生的量大,但不会被存储,只需要一个计算结果,流计算引擎用来处理流数据,核心理念是:

数据去找任务。

因为流数据里面是数据去找任务,数据量很大也就意味着任务是要并发被执行的,要有极为高效的调度和编排才行,这就需要对JAVA线程的编排很熟悉才行,于是引入了JAVA线程的各种高级编排和并发编程的内容:


聊完JAVA并发的高级内容后,我们进正式进入了流计算的内容,在这部分里面我们可以看到对JAVA线程编排的极致性能追求,我们会对JAVA的多线程有更高更深的认识:

3.第二条线,也是2025要继续的主线

终于聊到最后一条线了。在2024年博主完成了上面第一条线的内容后,开始回过头来进行另一个维度的思考。前面第一条线是在组件和技术上面追求技术选型的合适和性能的极致。上面是在追求深,接下来是追求广了。在软件中,除了合适的技术选项,还有一方面是值得我们注意的就是:

合理的工作流程。

在实际的开发过程中变化是永恒的,需求经常变动,有没有一种落地打法可以尽量的轻松一点去应对变化,而不至于狼狈?其实是有的:

利用真正的面向对象的方法进行真正合适的建模。

其实软件的本质是对现实世界的虚拟仿真,我们在建立逻辑关系的时候只要合理其实后期的改动影响就是局部的,如何进行这种逻辑关系的建立?这需要一套完整的打法,涉及:

1.从需求建模开始就要采用合适的描述方式描述好系统

2.基于需求建模建立出合理的领域模型,即概念间的关系

3.画出合理的原型

4.基于领域建模和原型设计好对象关系

于是博主开始进行DDD落地打法的探讨,已经创作一部分,2025年会继续深耕该系列:

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

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

相关文章

【深度学习项目】语义分割-DeepLab网络(DeepLabV3介绍、基于Pytorch实现DeepLabV3网络)

文章目录 介绍深度学习语义分割的关键特点主要架构和技术数据集和评价指标总结 DeepLabDeepLab 的核心技术DeepLab 的发展历史DeepLab V3网络结构获取多尺度信息架构Cascade ModelASPP ModelMulti-GridPytorch官方实现的DeepLab V3该项目主要是来自pytorch官方torchvision模块中…

Python Pyside6 加Sqlite3 写一个 通用 进销存 系统 初型

图: 说明: 进销存管理系统说明文档 功能模块 1. 首页 显示关键业务数据商品总数供应商总数本月采购金额本月销售金额显示预警信息库存不足预警待付款采购单待收款销售单2. 商品管理 商品信息维护商品编码(唯一标识)商品名称规格型号单位分类进货价销售价库存数量预警…

数字电子技术基础(十五)——MOS管的简单介绍

目录 1 MOS的简单介绍 1.1 MOS简介 1.2 MOS管的基本结构 1.3 MOS管工作时的三个区域 1.4 MOSEF的结构的工作原理 1 MOS的简单介绍 1.1 MOS简介 绝缘栅型场效应管,简称MOS管,全称为金属-氧化物-半导体场效应晶体管(Metal-Oxide-Semic…

【BUUCTF】BUU XSS COURSE 11

进入题目页面如下&#xff0c;有吐槽和登录两个可注入点 根据题目可知是一道XSS 登陆界面没有注册&#xff0c;尝试简单的SQL注入也不行 回到吐槽界面&#xff0c;输入简单的xss代码 <script>alert(1)</script> 访问网址&#xff0c;发现回显不出来&#xff0c;猜…

Codeforces Round 903 (Div. 3) E. Block Sequence

题解&#xff1a; 想到从后向前DP f[i] 表示从 i ~ n 转化为“美观”所需要的最少的步骤 第一种转移方式&#xff1a;直接删除掉第i个元素&#xff0c;那么就是上一步 f[i 1] 加上 1;第二种转移方式&#xff1a;从第 i a[i] 1 个元素直接转移&#xff0c;不需要增加步数&a…

分布式系统通信解决方案:Netty 与 Protobuf 高效应用

分布式系统通信解决方案&#xff1a;Netty 与 Protobuf 高效应用 一、引言 在现代网络编程中&#xff0c;数据的编解码是系统设计的一个核心问题&#xff0c;特别是在高并发和低延迟的应用场景中&#xff0c;如何高效地序列化和传输数据对于系统的性能至关重要。随着分布式系…

【C++】模板(进阶)

本篇我们来介绍更多关于C模板的知识。模板初阶移步至&#xff1a;【C】模板&#xff08;初阶&#xff09; 1.非类型模板参数 1.1 非类型模板参数介绍 模板参数可以是类型形参&#xff0c;也可以是非类型形参。类型形参就是我们目前接触到的一些模板参数。 //类型模板参数 …

2025年入职/转行网络安全,该如何规划?网络安全职业规划

网络安全是一个日益增长的行业&#xff0c;对于打算进入或转行进入该领域的人来说&#xff0c;制定一个清晰且系统的职业规划非常重要。2025年&#xff0c;网络安全领域将继续发展并面临新的挑战&#xff0c;包括不断变化的技术、法规要求以及日益复杂的威胁环境。以下是一个关…

Golang Gin系列-4:Gin Framework入门教程

在本章中&#xff0c;我们将深入研究Gin&#xff0c;一个强大的Go语言web框架。我们将揭示制作一个简单的Gin应用程序的过程&#xff0c;揭示处理路由和请求的复杂性。此外&#xff0c;我们将探索基本中间件的实现&#xff0c;揭示精确定义路由和路由参数的技术。此外&#xff…

K8S-Pod的环境变量,重启策略,数据持久化,资源限制

1. Pod容器的三种重启策略 注意&#xff1a;k8s所谓的重启容器指的是重新创建容器 cat 07-restartPolicy.yaml apiVersion: v1 kind: Pod metadata:name: nginx-web-imagepullpolicy-always spec:nodeName: k8s233.oldboyedu.com## 当容器异常退出时&#xff0c;始终重启容器r…

常见Arthas命令与实践

Arthas 官网&#xff1a;https://arthas.aliyun.com/doc/&#xff0c;官方文档对 Arthas 的每个命令都做出了介绍和解释&#xff0c;并且还有在线教程&#xff0c;方便学习和熟悉命令。 Arthas Idea 的 IDEA 插件。 这是一款能快速生成 Arthas命令的插件&#xff0c;可快速生成…

Django学习笔记(安装和环境配置)-01

Django学习笔记(安装和环境配置)-01 一、创建python环境 1、可以通过安装Anaconda来创建一个python环境 # 创建一个虚拟python环境 conda create -n django python3.8 # 切换激活到创建的环境中 activate django2、安装django # 进入虚拟环境中安装django框架 pip install …

C# 委托和事件思维导图

思维导图 下载链接腾讯云盘 https://share.weiyun.com/fxBH9ESl

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化&#xff1a; 文件是存储数据的一种非常基本且重要的方式。通过文件&#xff0c;我们可 以将程序运行时产生的数据永久保存下来&#xff0c;以便将来使用。 跨平台兼容性&#xff1a; 文件是一种通用…

电脑如何访问手机文件?

手机和电脑已经深深融入了我们的日常生活&#xff0c;无时无刻不在为我们提供服务。除了电脑远程操控电脑外&#xff0c;我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么&#xff0c;如何使用电脑远程访问手机上的文件呢&#xff1f; 如何使用电脑访问手机文件…

stm32 L051 adc配置及代码实例解析

一 cude的设置&#xff1a; 1. 接口的基本设置&#xff1a; 2. 参数的设置&#xff1a; 二 代码的逻辑&#xff1a; 1. 上面的直接生成代码&#xff0c;然后使用下面源码即可读到adc的数据&#xff1a; void adc_battery_start(void) {uint32_t ADC_value 0;HAL_ADC_Start(&…

Vue3初学之Element Plus Dialog对话框,Message组件,MessageBox组件

Dialog的使用&#xff1a; 控制弹窗的显示和隐藏 <template><div><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible"title"提示"width"30%":before-close&qu…

C++实现矩阵Matrix类 实现基本运算

本系列文章致力于实现“手搓有限元&#xff0c;干翻Ansys的目标”&#xff0c;基本框架为前端显示使用QT实现交互&#xff0c;后端计算采用Visual Studio C。 目录 Matrix类 1、public function 1.1、构造函数与析构函数 1.2、获取矩阵数值 1.3、设置矩阵 1.4、矩阵转置…

数据库-多表关系

项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构。由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系。 多表关系&#xff1a; 一对多 ( 多对一 ) 一对一 多对多 多表关系 …