发布时间:2026/8/26 20:40:57
从 Docker 到 Doris:建立后端基础设施全景图 最近需要快速理解一个 Spring Boot、Spring Cloud 项目并准备借助 AI 新增一个项目。因为 Java 基础还不扎实我给自己定的目标不是短期内独立手写所有代码而是先达到三个标准能解释每个基础设施组件解决什么问题能在代码和配置中找到它的入口能和研发人员沟通也能判断 AI 生成的方案是否合理。我集中学习了 Docker、Docker Compose、Kubernetes、Kafka、RabbitMQ、OceanBase 和 Doris。最大的收获不是记住七套定义而是发现它们可以放进一张非常清楚的系统地图。一、先别背名词后端系统只是在解决三类问题第一类问题是应用怎样以一致的方式运行本地环境、测试环境和生产环境不能各装一套不同版本的 Java 与依赖。Docker 用镜像统一交付Compose 组织一台机器上的多个容器K8s 在集群中管理大量容器。第二类问题是服务之间怎样异步协作一次请求不可能永远同步等待所有下游。Kafka 保存可以被多个系统独立读取和重放的事件RabbitMQ 把需要处理的消息路由到合适的任务队列。第三类问题是数据怎样保存和使用订单、账户和库存要求事务准确报表和指标要求快速扫描大量数据。MySQL、OceanBase 偏前者Doris 偏后者。从这三个问题出发再看具体产品就不容易混乱。二、Docker、Compose、K8s从一个容器到整个集群1. Docker统一应用交付物Dockerfile 像一张配方说明基础镜像是什么、JAR 放在哪里、用什么命令启动。构建结果是镜像镜像运行后才是容器。FROM eclipse-temurin:21-jre WORKDIR /app COPY target/order-service.jar app.jar ENTRYPOINT [java, -jar, app.jar]一开始我把 Docker 理解成“把本地项目打包成可以直接运行的应用”这个方向没错但还要加上两个边界镜像是只读模板容器是运行实例容器中的临时数据可能随容器删除因此数据库等持久数据要放到 Volume。2. Docker Compose组织一台机器上的多个容器一个 Spring Cloud 项目可能同时依赖 Gateway、订单服务、MySQL 和 RabbitMQ。Compose 可以把它们写进一个 YAML一次启动整套本地环境。它最适合开发、联调、演示和简单单机部署。服务之间可以用服务名通信但depends_on主要表示启动顺序不代表数据库已经做好接收请求的准备。3. Kubernetes维护集群期望状态K8s 最重要的概念不是“多服务器部署”而是期望状态。例如我声明订单服务需要三个副本期望状态3 个 Pod 实际状态2 个 Pod 控制器动作再创建 1 个 PodDeployment 管理副本和发布Service 给变化的 Pod 提供稳定地址ConfigMap 和 Secret 承载配置探针判断应用是否存活、是否已经可以接收流量。因此可以这样记Docker运行一个容器 Compose组织一台机器上的多个容器 K8s在集群中持续维护容器化应用的期望状态三、Kafka 与 RabbitMQ事件档案和任务派送这是我学习过程中最容易混淆的一组。1. Kafka 更像可重放的事件档案生产者把事件追加到 Topic 的 Partition。消费者通过 offset 记录自己在分区中读到了哪里多个 Consumer Group 可以各自读取同一批事件。例如订单创建后OrderCreated ├── 风控消费组 ├── 积分消费组 ├── 推荐消费组 └── Doris 数据同步消费组如果 Doris 需要重建近七天的数据可以调整消费位置重新读取历史事件。这种需要保留、重放和多个下游独立订阅的场景通常更偏 Kafka。2. RabbitMQ 更像任务派送中心RabbitMQ 通常把消息发送给 Exchange再根据 Routing Key 和 Binding 路由到 Queue。消费者处理完成后发送 ACK消息随后从队列移除。例如支付成功 ↓ SendPaymentSms ↓ 短信队列 ↓ 某一个短信消费者处理 ↓ 成功 ACK多次失败进入死信队列需要灵活路由、任务确认、重试和死信处理的场景通常更偏 RabbitMQ。3. 不是“Kafka 能做什么、RabbitMQ 不能做什么”Kafka 也能在一个消费组内把任务分摊给多个消费者RabbitMQ 也能绑定多个队列实现发布订阅。两者存在能力重叠。真正的判断维度是消息是否需要保留和重放多个下游是否需要独立消费是否需要复杂路由任务是否强调 ACK、重试和死信处理四、我对 offset 最大的一次误解学习时遇到一道题优惠券已经发放但 Kafka offset 还没提交消费者突然宕机恢复后会发生什么我最初想到的是多节点备份和定时写入磁盘。这个回答混淆了两个层次Kafka Broker 的副本和磁盘负责保存消息Consumer 的 offset 负责记录读取进度。消息其实还在 Kafka 中。因为 offset 没有提交消费者恢复后会再次读到同一条事件于是可能重复发放优惠券。真正需要的是业务幂等。例如每个订单只允许领取一次某类优惠券可以使用UNIQUE(order_id, coupon_type)消费者再次收到消息时如果唯一记录已经存在就不再发券但仍把本次消费视为成功并提交 offset。还有一个容易忽略的并发问题不能只“先查询是否处理过再决定是否发放”。两个消费者可能同时查询都看到未处理。数据库唯一约束才是最后防线。这让我理解了一个常见取舍先提交 offset 可能丢业务先完成业务再提交 offset 可能重复。工程上常选择至少一次投递再用幂等消除重复影响。五、MySQL、OceanBase、Doris业务事实和分析结果1. MySQL 与 OceanBase 偏 OLTP创建订单、扣减库存和修改支付状态需要频繁增删改查、事务和低延迟点查。MySQL 和 OceanBase 都适合这类在线交易处理。OceanBase 是独立的分布式关系型数据库并提供 MySQL 兼容模式。它的价值主要在原生分布式扩展、高可用和大规模事务能力但不能简单理解成“任何场景都比 MySQL 更好”。规模较小、架构简单时MySQL 通常更轻量。2. Doris 偏 OLAP“查询某一笔订单是否支付”更像 OLTP“统计过去一年每个地区每天的销售额”则需要扫描和聚合大量数据更适合 Doris。Doris 兼容 MySQL 协议和一部分 SQL 使用方式因此可以用 JDBC、数据库客户端和 BI 工具连接但连接方式相似不代表用途相同。典型数据链路可以是订单写入 MySQL / OceanBase ↓ Kafka / CDC / 同步任务 ↓ Doris ↓ 报表、趋势、排行一句话记忆MySQL 或 OceanBase 把每笔生意记准确Doris 从大量生意中总结规律。六、把七个组件放回一条订单链路用户请求 ↓ Spring Cloud Gateway ↓ Spring Boot 订单服务 ↓ MySQL / OceanBase 保存订单事务 ↓ Kafka 发布 OrderCreated ├── 风控 ├── 积分 └── 同步到 Doris 做分析 发送短信、邮件等任务 ↓ RabbitMQ ↓ 任务消费者处理并 ACKDocker 把这些应用制作成镜像。开发环境可能用 Compose 启动一整套依赖测试和生产环境可能交给 K8s 调度。这只是一张学习用的示意图真实项目必须结合目录、依赖、配置和调用链验证不能看到技术名词就套固定架构。七、接下来看真实项目时我会先找什么我不会从某个业务类开始逐行阅读而是先找组件“接缝”DockerDockerfile、基础镜像、JAR、端口、启动命令Composecompose.yml、services、ports、volumes、healthcheckK8sDeployment、Service、镜像、副本、探针、ConfigMapKafkaspring-kafka、bootstrap-servers、KafkaListener、topic、group-idRabbitMQspring-boot-starter-amqp、Exchange、Queue、Routing Key、RabbitListenerOceanBase数据源 URL、JDBC 驱动、MyBatis/JPA、事务、表和索引Doris分析数据源、聚合 SQL、Kafka 导入、Stream Load、分区分桶。然后固定追问六件事谁写入、谁读取、失败如何重试、是否可能重复、数据以谁为准、如何观察健康状态。这次速成让我建立了概念地图但还不能算真正看懂项目。下一步是把真实项目的模块目录、启动类、构建文件和配置拿出来把每一个概念映射到实际文件和调用链中。

相关新闻

2026/8/26 20:40:57

刷题笔记整理

刷题笔记 刷题程序的基础结构:public class Main{//标准的程序入口} 输入的使用: 1.导入java.util.*;工具包 2.创建一个Scanner扫描器的变量sc 3.读取整数,浮点数,字符串的代码格式 ● 读取整数: int n sc.next…

2026/8/26 20:35:57

NineData亮相XCOPS:智能运维时代的数据管理平台实战解析

1. 项目概述:一次数据技术领域的“双向奔赴” 最近,我注意到一个挺有意思的消息,NineData这家在数据领域深耕多年的技术公司,即将在明年(2026年)的XCOPS智能运维管理人年会广州站亮相。这消息乍一看&#x…

2026/8/26 20:35:57

天猫店群自动化管理系统:多线程不抢焦,告别网页卡死报错

天猫店群自动化管理系统:多线程不抢焦,告别网页卡死报错 做店群的老板都知道,天猫的自动化上架,是店群运营中最耗人力也最容易出错的环节。 手动上架一个商品从填写标题、上传主图、设置SKU、填写详情到发布,熟练操作…

2026/8/26 21:36:02

测试工程师面试核心能力与高频考点解析

1. 测试工程师面试核心能力解析 软件测试岗位的面试往往聚焦于候选人的技术深度和实战经验。作为从业十余年的测试专家,我发现面试官通常会从基础理论、工具使用、场景分析三个维度考察候选人。掌握这些核心要点不仅能帮助求职者顺利通过面试,更能系统性…

2026/8/26 21:36:02

RTT替代串口printf:嵌入式实时调试内存直连方案

1. 为什么用RTT替代串口printf?——一个嵌入式老手的真实痛点 在STM32、nRF52、ESP32甚至RK3566这类MCU项目里,我几乎每天都要面对同一个问题:想看个变量值,得先改代码、重编译、烧录、等启动、再打开串口助手——光是等待J-Link…

2026/8/26 21:36:02

华为杯研究生数模竞赛D题完整解决路线:模型、算法与论文写作

简介:数学建模竞赛中,优化模型与预测模型的合理选型往往是解决问题的关键。本文从赛题拆解、数据预处理、特征工程到算法实现与论文写作,完整梳理了研究生数学建模竞赛D题的高效应对流程。通过对硬约束与软约束的区分、多目标函数的归一化处理…

2026/8/26 21:36:02

蓝桥杯国赛嵌入式实战:CT107D开发板工程化通关指南

1. 蓝桥杯国赛不是“刷题比赛”,而是嵌入式系统工程能力的现场压力测试 很多人第一次听说“第十三届蓝桥杯国赛”,第一反应是:又一个编程竞赛?点开搜到的“蓝桥杯真题”“蓝桥杯题解”,下意识就往LeetCode、牛客网那种…

2026/8/26 21:36:02

从裸机到FreeRTOS:嵌入式任务调度与移植实战指南

用裸机跑了好几年项目,代码从几千行膨胀到几万行之后,你会发现一个特别闹心的事实:main函数里那个while(1)已经变成了一个谁都不敢动的大泥潭。按键扫描、屏幕刷新、传感器读取、通信协议解析全挤在一起,改一个延时就可能让整个系…

2026/8/26 21:31:01

录屏转任务模型:从视频帧到结构化流程的完整实现指南

最近在整理自动化测试和智能助手类项目时,我注意到一个很有意思的方向:直接从用户录屏中提取结构化的任务模型。传统做法是让用户写文档、录操作视频、再让开发人员手工分析,费时且容易遗漏。斯坦福和 CMU 的研究团队提出了“从录屏提取任务模…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…