【技术总结类】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 集群管理器。 官…...
如何选择一款助贷获客系统?
做助贷的销售们,一天打几百个电话,跑各种新媒体平台评论区偷流量,每天忙得昏天黑地,也没有多少客户。没有精准数据,助贷销售着急,公司也着急,每天让员工加班找客户,但是巧妇难为无米…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
