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

目录
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年会继续深耕该系列:

相关文章:
【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作
目录 1.今年的创作路线 2.先说第一条线 2.1.由日志引出的海量文本数据存储和分析问题 2.2.监控以及监控的可视化 2.3.数据量级再往上走牵扯出了大数据 2.4.由大数据牵扯出的JAVA线程高级内容 3.第二条线,也是2025要继续的主线 1.今年的创作路线 今年的写作内…...
Dockerfile另一种使用普通用户启动的方式
基础镜像的Dockerfile # 使用 Debian 11.9 的最小化版本作为基础镜像 FROM debian:11.11# 维护者信息 LABEL maintainer"caibingsen" # 复制自定义的 sources.list 文件(如果有的话) COPY sources.list /etc/apt/sources.list # 创建…...
python的pushbullet库在设备之间发送通知链接文件
Pushbullet 是一个非常方便的 Python 库,可以帮助你在设备之间发送通知、链接、文件等。以下是 Pushbullet 的一些主要功能和使用方法: 功能 与你的 Pushbullet 账户关联的设备(需要下载对应的pushbullet手机APP、电脑客户端)之…...
STM32之FreeRTOS开发介绍(十九)
STM32F407 系列文章 - freertos(十九) 目录 前言 一、简述 二、开源网址 三、原理及功能特性 1.原理简介 2.功能介绍 1.任务调度 2.任务管理 3.中断管理 4.消息队列 3.特点说明 4.优缺点 四、参考书籍 五、实现方式 总结 前言 FreeRTOS是…...
用java配合redis 在springboot上实现令牌桶算法
令牌桶算法配合 Redis 在 Java 中的应用令牌桶算法是一种常用的限流算法,适用于控制请求的频率,防止系统过载。结合 Redis 使用可以实现高效的分布式限流。 一.、引入依赖首先,需要在 pom.xml 文件中引入 spring-boot-starter-data-re…...
DCGAN - 深度卷积生成对抗网络:基于卷积神经网络的GAN
深度卷积生成对抗网络(DCGAN,Deep Convolutional Generative Adversarial Network)是生成对抗网络(GAN)的一种扩展,它通过使用卷积神经网络(CNN)来实现生成器和判别器的构建。与标准…...
51c~SLAM~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12327374 #GSLAM 自动驾驶相关~~~ 一个通用的SLAM架构和基准 GSLAM:A General SLAM Framework and Benchmark 开源代码:https://github.com/zdzhaoyong/GSLAM SLAM技术最近取得了许多成功&am…...
优化使用 Flask 构建视频转 GIF 工具
优化使用 Flask 构建视频转 GIF 工具 优化后的项目概述 在优化后的版本中,我们将实现以下功能: 可设置每个 GIF 的帧率和大小:用户可以选择 GIF 的帧率和输出大小。改进的用户界面:使用更现代的设计使界面更美观、整洁。自定义…...
spring cloud如何实现负载均衡
在Spring Cloud中,实际上并没有直接支持lb:\\这样的URL前缀来自动解析为负载均衡的服务地址。lb:\\这样的表示可能是在某些特定框架、文档或示例中自定义的,但它并不是Spring Cloud官方API或规范的一部分。 Spring Cloud实现负载均衡的方式通常依赖于服…...
leetcode19-删除链表的第n结点
leetcode 19 思路 要删除倒数第n个元素,那么就要找到倒数第n1个元素,那么我们需要两个指针来记录,首先快指针需要先走n1步,然后快慢指针一起进行移动,直到快指针为null的时候,此时慢指针恰好走到倒数第n…...
软件测试—— 接口测试(HTTP和HTTPS)
软件测试—— 接口测试(HTTP和HTTPS) HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头(Request Headers)示例请求标头 响应标头(Response Header…...
3.1 Go函数调用过程
在 Go 语言中,函数调用的核心机制依赖于内存的栈区分配和指针操作,理解这一原理有助于掌握函数的执行过程。 1. 内存结构概述 在 Go 程序编译成可执行文件并启动后,操作系统会为其分配进程内存,进程内存主要分为以下区域&#x…...
TDengine 做 Apache SuperSet 数据源
Apache Superset 是一个现代的企业级商业智能(BI)Web 应用程序,主要用于数据探索和可视化。它由 Apache 软件基金会支持,是一个开源项目,它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面…...
08_游戏启动逻辑
1.GameRoot.cs 控制 服务层Svc.cs 和业务层Sys.cs 的初始化 创建脚本GameRoot.cs(游戏入口 已进入就初始化各个系统) 创建资源加载服务.cs Res 将服务层Svc设置成单例类所以需要挂载在GameRoot身上,这样就可以通过GameRoot来调各个服务 接…...
Ardupilot开源无人机之Geek SDK进展2024-2025
Ardupilot开源无人机之Geek SDK进展2024-2025 1. 源由2. 状态3. TODO3.1 【进行中】跟踪目标框3.2 【暂停】onnxruntime版本3.3 【完成】CUDA 11.8版本3.4 【完成】pytorch v2.5.1版本3.5 【未开始】Inference性能3.6 【未开始】特定目标集Training 4. Extra-Work4.1 【完成】C…...
在K8S中,如果后端NFS存储的IP发送变化如何解决?
在Kubernetes中,如果后端NFS存储的IP地址发生了变化,您需要更新与之相关的Peristent Volume(PV)或Persistent Volume Claim(PVC)以及StorageClass中关于NFS服务器IP的配置信息,确保K8S集群内的Pod能够正确连接到新的NFS存储位置。解决方案如下…...
模拟飞行入坑(五) P3D 多通道视角配置 viewgroup
背景: P3D进行多个屏幕显示的时候,如果使用英伟达自带的屏幕融合成一个屏,或者使用P3D单独拉伸窗口,会使得P3D的画面被整体拉伸,又或者,当使用Multichannel进行多个设备联动时,视角同步组合需要配置&#…...
【springboot集成knife4j】
SpringBoot集成knife4j Knife4j是为Java MVC框架集成Swagger生成API文档的一套增强解决方案,它基于Swagger原有的基础上进行了一些改进和增强,提供了更简洁的UI界面,同时支持更多的自用化配置。下面是在Spring Boot项目中集成Knife4j的基本步…...
GPUStack使用
1. 概述 官网:https://github.com/gpustack Open-source GPU cluster manager for running large language models(LLMs) https://github.com/gpustack/gpustack,Manage GPU clusters for running AI models GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。 官…...
如何选择一款助贷获客系统?
做助贷的销售们,一天打几百个电话,跑各种新媒体平台评论区偷流量,每天忙得昏天黑地,也没有多少客户。没有精准数据,助贷销售着急,公司也着急,每天让员工加班找客户,但是巧妇难为无米…...
PostgreSQL CASE语句深度解析:性能、类型与NULL安全实战指南
1. 为什么你必须真正吃透 PostgreSQL 的 CASE 语句——它远不止是 SQL 里的“if-else”翻译器在 PostgreSQL 实战中,我见过太多人把CASE当成一个语法糖:写几个WHEN...THEN,加个ELSE,再套个END,就以为搞定了。结果呢&am…...
AMLP:基于大语言模型的自动化机器学习势函数构建平台
1. 项目概述:当AI遇见原子模拟,AMLP如何重塑机器学习势函数构建在计算材料科学和化学物理领域,分子动力学模拟是我们窥探微观世界动态行为的“显微镜”。无论是研究新材料的相变过程,还是探索生物大分子的折叠机制,其核…...
UOS系统下WPS卸载不干净?手把手教你用命令行精准清理(附dpkg/apt组合拳)
UOS系统下WPS卸载不干净?手把手教你用命令行精准清理 在UOS系统日常使用中,WPS Office作为常用办公软件,有时因版本更新或功能调整需要彻底卸载。但不少用户发现,通过图形界面或简单命令卸载后,系统中仍残留配置文件、…...
串口通信粘包问题:成因深度解析与项目实战解决方案
在嵌入式开发、工业工控、上位机下位机交互项目中,串口(RS232/RS485)是最基础、最常用的通信方式。绝大多数开发者都遇到过这样的问题:串口接收的数据偶尔错乱、解析报错、数据拼接异常,单次接收的数据时而半包、时而多…...
Python基础语法:生成器 generator(yield)
一、简介根据指定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成出来,而是使用一个,再生成一个,好处是可以节约大量的内存。就像设计模式中的懒汉式。适合处理大数据或流数。生成器是一种特殊的迭代器…...
2026年一键生成论文工具对比实测:5款神器从选题到格式全流程护航
写论文的焦虑,是每个科研人和学生都心照不宣的“隐形压力”。选题无从下手,文献检索耗时费力,逻辑框架反复推翻,格式排版让人抓狂,查重降重更是像在和系统玩“猫鼠游戏”。2026年的AI工具早已不是过去那种“打字机”&a…...
终极免费音乐解锁工具:打破平台枷锁,让音乐重获自由
终极免费音乐解锁工具:打破平台枷锁,让音乐重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地…...
基于LSTM自编码器的家用电器功耗异常检测系统构建指南
1. 项目概述:从能耗洞察到智能干预我们每天都在和各种家用电器打交道,从清晨唤醒你的咖啡机,到深夜还在默默工作的路由器。你有没有想过,这些看似微不足道的设备,其背后隐藏的能耗模式,其实大有文章&#x…...
MaxEnt建模总失败?别急着换数据,先检查ArcGIS裁剪栅格这1个像素的坑
MaxEnt建模失败?ArcGIS栅格裁剪的1像素陷阱与精准修复指南当你花费数小时整理好WorldClim气候数据、本地DEM高程和物种分布数据,满心期待地点击MaxEnt的运行按钮时,屏幕上突然跳出"Error projecting, two layers have different geograp…...
面试官问LinkedBlockingQueue和ArrayBlockingQueue区别?别只答有界无界了,这3个实战坑才是重点
面试官追问LinkedBlockingQueue与ArrayBlockingQueue?别只答基础区别,这3个实战陷阱才是关键 当面试官抛出"LinkedBlockingQueue和ArrayBlockingQueue有什么区别"这个问题时,80%的候选人会条件反射般回答"一个有界一个无界&qu…...
