C大调音阶在吉他指板上可以有不同的把位 https://www.zhihu.com/tardis/zm/art/496745355?source_id=1005
扫弦节奏型:1)下 下 下上 上下上下 下上
节拍
HUB GUITAR: https://hubguitar.com/zh_han/music-theory 指板: https://hubguitar.com/zh_han/fretboard
弹奏第一品位上的B弦,这就是 C音,一个以一定频率振动的音波。接下来你拨第十三品的同一根弦,同样地,它听上去好像是同一个音,但这个音高更高。这是因为声波的振动是原来的两倍之快,可以表达为1:2, 它们是有同一特性的音。如果两种不同的乐器同时弹奏C音,这个比例是1:1,这称为 同音。在下图中,第一品的音符将会是最左边的C,第十三品的音则是在最右边。所有在这两者之间的音符都是特定的音符,但一旦重新回到C音,就重新按照这个顺序继续下去。
音程:就是两个音符之间的高低关系。在较低的一个 “C” 音和另一个较高的 “C” 音之间的音程就是 八度(八音音阶)。八度是音高的基本来源,其余的还包括将它分成更小的部分而得到的音高,称为 音数。半音就是移动一格,从 C 到 C♯。全音移动两格,从 C 到 D。 大多数现代音乐将八度分割为12级,如图所示,你可以按照这个音符的顺序来弹奏,从第一品的 B 弦开始,每次移动一个品位,直到第十三品,重新回到 C,一边弹奏一边大声说出这个音符的名字。所有这十二个音符一起组成了 半音音阶。音阶就是音符的顺序,并且没有重复的音符,所有的音符以升序,从低到高的顺序来弹奏。
根音?它就是一首歌的主调音,它是一个单音,其余的东西全在它的基础上变化,想像它是重力中心,它是一种吸引力,吸引着一首歌曲里其余所有的音,不管什么情况下都会回到根音上来。
晴天 - 周杰倫
Hey Jude - The Beatles
紅豆 - 方大同
找自己 - 陶喆
Canon in C https://www.bilibili.com/video/BV1if4y1A7SZ/
揪心的玩笑與漫長的白日夢 - 萬能青年旅店
https://www.bilibili.com/video/BV1cuHjetENY/?vd_source=ff210768dfaee27c0d74f9c8c50d7274
📚 文档链接: 快速入门 | Milvus 文档
向量嵌入是从机器学习模型中提取的数值表示,捕捉非结构化数据的语义含义。这些嵌入通过神经网络或变压器架构对数据中的复杂相关性进行分析,创建一个密集的向量空间,其中每个点对应于数据对象(如文档中的词)的“含义”。
这个过程将文本或其他非结构化数据转换为反映语义相似性的向量——在这个多维空间中,意义相关的词被放置得更近,从而实现一种称为“密集向量搜索”的搜索方式。这与依赖精确匹配和使用稀疏向量的传统关键词搜索形成对比。向量嵌入的发展,通常源于大型科技公司广泛训练的基础模型,使得搜索能够捕捉数据的本质,超越词汇或稀疏向量搜索方法的局限性。
向量:可以理解为在多维空间中的一个点,它由一组数字(坐标)表示。在 AI 中,无论是文本、图像还是声音,都可以通过特定的模型(如 qwen3-embedding-4b-torch)转换为一个向量。这个向量捕捉了原始数据的深层特征。
维度:就是指这个向量有多少个数字。例如,一个 [0.12, 0.45, -0.23, …, 0.78]的向量,如果它有 1024 个数字,我们就说它是一个 1024 维 的向量。维度的选择通常由您选用的嵌入模型决定,并且在创建 Milvus 集合时必须正确定义,因为所有存入的向量都必须有相同的维度。
非结构化数据(如文本、图像和音频)格式各异,蕴含丰富的潜在语义,因此分析起来极具挑战性。Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。
Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON,为您节省了维护多个数据库系统的精力。
与处理结构化数据并执行精确搜索操作的传统关系数据库不同,向量数据库擅长使用 Approximate Nearest Neighbor(ANN)算法等技术进行语义相似性搜索。这种能力对于开发推荐系统、聊天机器人和多媒体内容搜索工具等各种领域的应用程序,以及解决 ChatGPT 等大型语言模型和 AI 带来的挑战(如理解上下文和细微差别以及 AI 幻觉)至关重要。
| Milvus 概念 | 类比关系型数据库概念 | 说明 |
|---|---|---|
| Collection(集合) | Table(表) | 存储向量和关联元数据(如文本内容、来源)的基本单位。 |
| Entity(实体) | Row(行) | 一条完整的记录,包含主键、向量字段和标量字段(元数据)。 |
| Field(字段) | Column(列) | 包括向量字段(存储向量)和标量字段(存储 ID、标签等结构化数据)。 |
| Index(索引) | Index(索引) | 为向量字段建立的索引(如 HNSW、IVF_FLAT),是高速检索的关键。 |
写入数据(以 Python 为例):
1 | from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType |
读取与搜索:
1 | # 用户提出问题,并转换为向量 |
Milvus 支持的搜索类型
ANN 搜索:查找最接近查询向量的前 K 个向量。
过滤搜索:在指定的过滤条件下执行 ANN 搜索。
范围搜索:查找查询向量指定半径范围内的向量。
混合搜索:基于多个向量场进行 ANN 搜索。
全文搜索:基于 BM25 的全文搜索。
Rerankers:根据附加标准或辅助算法调整搜索结果顺序,完善初始 ANN 搜索结果。
获取:根据主键检索数据。
查询使用特定表达式检索数据。
在 RAG 流程中,Milvus 扮演着 知识库与高速检索引擎 的角色。
qwen3-235b-a22b),由它来生成精准、有据可依的最终答案。什么是 Agentic RAG?基础的 RAG 中,检索-增强-生成是一次性完成的。而 Agentic RAG(智能体驱动的 RAG) 则引入了“智能体”的概念,使得检索过程变得更智能、更动态。
智能体可以根据对大模型初步生成内容的理解,主动地、多次地 与向量数据库(Milvus)进行交互。这使 RAG 系统从静态的“文档查找”升级为动态的、具有决策能力的“研究助手”。例如:
人工智能集成
AI Agent的本质是能够感知环境、自主决策并执行行动的智能实体。与传统AI系统最大的区别在于Agent具有自主性、反应性、目标导向和学习能力,它不再是简单的工具,而是能够主动规划和完成复杂任务的智能体。从1997年击败国际象棋世界冠军的IBM“深蓝”,到2011年苹果推出的个人助理Siri,都展示了Agent在特定领域的强大能力,关键的转折点发生在2023年左右,大语言模型LLM的出现为Agent提供了强大的通用理解和推理能力,使其不再局限于单一任务。
Function Calling:函数调用,是LLM的一种能力,允许模型根据用户输入决定何时以及如何调用哪个函数(Tool),并以结构化格式(如JSON)输出函数调用参数。然后由外部系统执行该函数。RAG(检索增强生成):通过从外部知识库检索相关信息,并将其作为上下文提供给LLM,从而生成更准确、更相关的回答。MCP(模型上下文协议):MCP可以包含本地tools和外部API,但通常 MCP更强调于将工具(无论是本地tools还是外部API)以标准化的上下文协议暴露给AI模型。MCP可以看作是一个中间层,它将工具抽象成标准的接口,使得AI Agent可以通过统一的协议来调用这些工具,从而实现模型与工具之间的解耦。
1 | #### main.py |
1 | #### tools.py |
MCP 可以看作是一个中间层,它将工具抽象成标准的接口,使得AI Agent可以通过统一的协议来调用这些工具,从而实现模型与工具之间的解耦。MCP 可以包含本地tools和外部API,但通常 MCP更强调于将工具(无论是本地tools还是外部API)以标准化的上下文协议暴露给AI模型。
RAG 的核心思想是:在让大模型回答问题之前,先从一个外部的、可随时更新的知识库中检索相关信息,然后将这些“新鲜”信息作为上下文和问题一起交给模型,从而引导模型生成更准确、及时且可追溯的答案。它能有效减少模型“幻觉”(即胡编乱造),让AI应用在知识密集型任务中变得真正可靠。以及,它能帮助构建专业领域专家对话机器人。
一个典型的RAG系统工作流程包含三个关键阶段:

业务逻辑
LangChain 是一个功能强大的大语言模型应用开发框架。与Spring在Java后端开发中的定位类似。
https://python.langchain.com/docs/concepts/
https://arxiv.org/abs/2302.07842
LangChain 包:通过 pip 命令(类似于Java的Maven或Gradle)安装到项目中,避免重复造轮子。
LangGraph 核心认知:用“有向图”构建智能体的新一代框架,是 用于构建有状态、多步骤、多分支智能体(Agent) 的框架,核心是将 Agent 的行为拆解为节点(Nodes) 和边(Edges),用有向图(Directed Graph) 替代老版本的“线性循环” 以支持更复杂的流程编排。
LangGraph 可以理解为:给 Agent 设计“流程图”的工具,而老版本 ReAct Agent 只是这个流程图中最基础的“单循环分支”。
https://docs.langchain.com/oss/python/langgraph/overview
1 | { |
InMemorySaver),支持中断、恢复、回溯(比如多轮对话的上下文保留)。cmdb_search、cmdb_query)。用户输入清洗节点 → LLM 思考节点 → CMDB 工具节点 → 日志工具节点 → 回答格式化节点cmdb_search 节点;如果输出“需要调用日志工具”,则跳转到 log_search 节点;如果输出“无需调用工具”,则跳转到“回答节点”。InMemorySaver 就是内存级的检查点,还可以用 Redis、SQL 实现持久化)。1 | [入口节点:用户输入] |
cmdb_search),LangGraph 只通过工具调用节点统一管理,支持多工具的动态选择和调用。cmdb_search,再调用 cmdb_query 统计)。AgentExecutor)是 LangGraph 的简化版,两者的核心差异在于流程的编排能力:| 维度 | 老版本 ReAct Agent(AgentExecutor) | LangGraph |
|---|---|---|
| 架构基础 | 线性循环(Single Loop) | 有向图(Directed Graph) |
| 节点/边 | 无物理节点拆分,只有“思考→工具”的逻辑两步;无多分支边,只有单一循环。 | 支持多节点、多类型边(条件边、普通边),可编排复杂流程。 |
| 状态管理 | 临时状态(每次循环重新生成,无持久化) | 统一的状态对象,支持持久化、回溯(Checkpoint)。 |
| 流程灵活性 | 只能“思考→工具→思考”的单一循环,多工具需按顺序调用(一次一个)。 | 支持多分支(比如不同工具的并行调用)、条件跳转、中断恢复。 |
| 扩展性 | 扩展复杂流程(如多工具并行)需要大量自定义代码。 | 通过图的编排即可实现,无需修改核心逻辑。 |
老版本 ReAct Agent 的核心是 AgentExecutor 的单一循环: |
1 | while True: |
cmdb_search,再调用 alert_search,通过多次循环实现。集成到Java
MongoDB 是一个基于文档的开源 NoSQL 数据库,使用类似 JSON 的文档模型灵活存储数据,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
https://www.mongodb.com/zh-cn/docs/manual/crud/
| MongoDB 概念 | 类比 MySQL 概念 | 类比 Elasticsearch 概念 | 核心解析 |
|---|---|---|---|
| 文档 (Document) | 行 (Row) | 文档 (Document) | 数据的基本单元,是一个键值对的有序集合。它类似于一条完整的记录。 |
| 集合 (Collection) | 表 (Table) | 索引 (Index) | 一组文档的容器。它类似于一张数据表。 |
| 数据库 (Database) | 数据库 (Database) | 无直接对应(可类比为索引的逻辑分组) | 最高层的命名空间,用于组织和管理多个集合。一个 MongoDB 实例可以运行多个数据库,每个数据库在文件系统上有独立的文件。 |
| 字段 (Field) | 列 (Column) | 字段 (Field) | 文档中的键值对,代表一个数据属性。 |
ALTER TABLE 操作。| 特性 | MongoDB | MySQL | Elasticsearch |
|---|---|---|---|
| 数据模型 | 文档模型,动态模式 | 关系模型,固定模式 | 文档模型,可定义映射 |
| 查询语言 | 面向对象的 API 方法 | 标准 SQL 语句 | JSON-based DSL |
| 核心优势 | 敏捷开发、水平扩展、存储复杂数据结构 | 复杂查询、事务一致性、数据完整性 | 全文搜索、日志分析、复杂聚合 |
| 典型场景 | 内容管理系统、用户画像、实时分析、物联网 | 金融交易系统、ERP、CRM等需要严格事务的系统 | 搜索引擎、日志和指标分析、应用内搜索 |
| 操作类型 | 方法示例 | 功能说明 |
|---|---|---|
| 创建 (Create) | db.hosts.insertOne({hostname: "web-01", ip: "192.168.1.100"}) |
向集合中插入一条新文档。若集合不存在,会自动创建。 |
| 批量创建 | db.hosts.insertMany([{hostname: "web-01"}, {hostname: "db-01"}]) |
批量插入多条文档。 |
| 查询 (Read) | db.hosts.find({status: "running"}) |
查询所有符合条件的文档。不传参数则返回所有文档。 |
| 条件查询 | db.hosts.find({"specs.memory": {$gte: 8}}, {hostname: 1, _id: 0}) |
使用查询操作符进行过滤,并使用投影选择返回的字段。 |
| 更新 (Update) | db.hosts.updateOne({hostname: "web-01"}, {$set: {"specs.memory": 32}}) |
更新一条匹配的文档。$set 操作符用于修改特定字段的值。 |
| 批量更新 | db.hosts.updateMany({environment: "production"}, {$inc: {visits: 1}}) |
更新所有匹配的文档。$inc 操作符用于将字段的值增加指定数额。 |
| 删除 (Delete) | db.hosts.deleteOne({hostname: "web-01"}) |
删除一条匹配的文档。 |
| 批量删除 | db.hosts.deleteMany({status: "terminated"}) |
删除所有匹配的文档。 |
insertMany 这样的多文档操作,默认情况下并非一个整体事务。$gt (大于), $gte (大于等于), $lt (小于), $lte (小于等于), $ne (不等于)。$and, $or, $in (匹配数组中任意值), $nin (不匹配数组中任何值)。1 | // 创建 |
1 | // 查询与投影 |
1 | // 更新操作符 |
1 | // 逻辑组合查询 |
1 | // 数组查询 |
1 | // 正则表达式与文本搜索 |
1 | // 场景:找出所有生产环境的Linux主机 |
1 | // 场景:找出内存大于8G的生产环境主机,按内存降序排列,只显示主机名和内存 |
1 | // 目标:查询生产环境的应用,并获取其运行主机的详细信息 |
1 | // 应用文档示例 |
1 | db.hosts.aggregate([ |
1 | db.applications.aggregate([ |
db.hosts.createIndex({ hostname: 1 })db.hosts.createIndex({ environment: 1, status: 1 }) db.hosts.createIndex({ tags: 1 })db.hosts.createIndex({ description: "text" })db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })1 | Primary(主节点)← 读写操作 |
1 | // 复制集配置 |
1 | // 强一致性写操作 |
1 | // 好的分片键:基数高、分布均匀 |
1 | 自然语言查询 → MCP Server → 查询解析器 → MongoDB查询生成器 → 结果格式化 |
1 | from mcp import MCPServer, Context |
1 | 你是一个CMDB专家,可以查询和分析基础设施信息。 |
1 | # 支持复杂查询的扩展工具 |
Docker 是一种开源平台,一种快速构建、运行和管理应用的工具。它使用容器化技术,使得应用程序及其依赖性可以打包到一个容器中,并在任何支持 Docker 的环境中运行。
1 MobarXterm 通过 SSH 连接 linux虚拟机,操作虚拟机上的 Docker。
2 Windows本地:通过wsl安装Linux发行版本,安装docker desktop(将自动在WSL中配置Docker环境,借助linux内核运行)
1 | docker run -d \ # 创建并运行一个容器,-d 是让容器在后台运行;同一个镜像可创建多个容器 |
1 | docker images # 查看本地镜像 |
镜像结构:入口,层,基础镜像。分层的好处是可复用,,
docker build 命令构建镜像。(如java项目还需要jar包)docker run 命令基于构建的镜像创建和运行容器。1 | docker volumels # 查看数据卷 |
容器编排是指在生产环境中管理和协调多个容器的过程。Docker 提供了 Docker Compose 工具,用于定义和运行多容器的应用。
Kubernetes是一个开源的容器编排引擎,可以用来管理容器化的应用,包括容器的自动化的部署、扩容、缩容、升级、回滚等等;
它是Google在2014年开源的一个项目,它的前身是Google内部的Borg系统。
在Kubernetes出现之前,我们一般都是使用Docker来管理容器化的应用,但是Docker只是一个单机的容器管理工具,它只能管理单个节点上的容器,当我们的应用程序需要运行在多个节点上的时候,就需要使用一些其他的工具来管理这些节点,比如Docker Swarm、Mesos、Kubernetes等等;
这些工具都是容器编排引擎,它们可以用来管理多个节点上的容器,但是它们之间也有一些区别,比如Docker Swarm是Docker官方提供的一个容器编排引擎,它的功能比较简单,适合于一些小型的、简单的场景,而Mesos和Kubernetes则是比较复杂的容器编排引擎;
Mesos是Apache基金会的一个开源项目,而Kubernetes是Google在2014年开源的,目前已经成为了CNCF(Cloud Native Computing Foundation)的一个顶级项目,基本上已经成为了容器编排引擎的事实标准了。
Node:k8s集群节点,可以是物理机/虚拟机
Pod:k8s最小调度单元,容器(运行app/数据库/..镜像)的抽象,可以是一/多个容器的组合,但除非高度耦合,一个pod只运行一个容器
Service:将一组pod封装成一个服务并且提供统一访问入口(解决了一组数据库pod中一个重建后ip变化的问题,类似于“服务发现”)
Ingress:为了对外提供服务,将外部请求路由转发到内部集群的service上
ConfigMap:封装配置信息
Secret:封装敏感信息
其他安全机制:网络安全,访问控制,身份认证
Volumn:将数据挂在到本地磁盘或远程存储上,实现持久化存储
Deployment:部署无状态应用程序,将一/多个Pod组合到一起;冗余备份,相当于对Pod的抽象;具有副本控制、滚动更新、自动扩缩容等功能,实现应用程序的高可用
Statefulset:部署有状态应用程序,如DB、MQ、缓存以及保留会话状态的应用程序
分为Master和Worker节点
apiserver:位于master节点上,是k8s集群的API接口;交互方式包括 kubectl 命令行、Dashboard界面或API接口
minikube是一个轻量级的kubernetes集群环境,可以用来在本地快速搭建一个单节点的kubernetes集群;
https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/ 你好,Minikube
minikube只能用来在本地搭建一个单节点的kubernetes集群环境,
下面介绍如何使用Multipass和k3s来搭建一个多节点的kubernetes集群环境,
1 | # 查看帮助 |
1 | # 创建并运行一个指定的镜像 |
1 | # 查看集群中某一类型的资源 |
1 | # 更新某个资源的标签 |
1 | # 进入某个Pod的容器中 |
Portainer 是一个轻量级的容器管理工具,可以用来管理Docker和Kubernetes,它提供了一个Web界面来方便我们管理容器
官方网址: https://www.portainer.io/
Helm 是一个Kubernetes的包管理工具,可以用来管理Kubernetes的应用,它提供了一个命令行工具来方便我们管理Kubernetes的应用
官方网址: https://helm.sh/
https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/
InfluxDB 是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等;
在DB-Engines Ranking时序型数据库排行榜上排名第一,广泛应用于DevOps监控、IoT监控、实时分析等场景。
https://jasper-zhang1.gitbooks.io/influxdb/content/Introduction/getting_start.html
influxdb-cluster 是InfluxDB的集群版本,InfluxDB Enterprise 的开源替代方案,设计用于大规模数据存储和高可用性需求。
可以实现数据的分片和复制,从而提高系统的可用性和扩展性。数据安全。operator缺失
https://github.com/chengshiwen/influxdb-cluster/wiki
InfluxDB Enterprise由两组软件进程组成: Data 数据节点 和 Meta 元节点。集群内的通信是这样的:
influxdb使用的默认端口号为分别为用于meta集群内部服务的8091端口,meta节点通信的8089端口,data集群内部服务的8088端口,以及data节点对外提供http服务的8086端
InfluxDB 集群中,一个节点要么是专门用于存储和查询时间序列数据的数据节点,要么是专门用于存储集群元数据的元节点。数据节点负责存储实际的数据和处理查询请求,而元节点则负责管理集群的元数据,包括节点信息、数据库和保留策略等。
元节点保存以下所有元数据:
元节点将这些数据保存在磁盘上的Raft数据库中,由BoltDB提供支持。默认情况下,Raft数据库是/var/lib/influxdb/meta/raft.db。
注意:Meta节点需要/ Meta目录。
influxd-meta 元数据服务1 | # 配置文件示例(meta节点) |
influxd-ctl 集群管理1 | # 查看分片分布 |
数据节点保存所有原始时间序列数据和元数据,包括:
在磁盘上,数据总是按照
influx CLI工具1 | # 进入容器执行CLI |
influxd 数据节点服务1 | # 查看运行状态 |
influx_inspect 数据工具1 | # 导出TSM文件(需进入容器) |
通信协议
| 组件 | 端口 | 用途 | 协议 |
|---|---|---|---|
| Meta节点间 | 8089 | Raft协议同步元数据 | TCP |
| Data节点间 | 8088 | 分片数据复制 | TCP |
| Data→Meta节点 | 8091 | 注册节点/获取分片元信息 | HTTP |
核心交互场景
节点注册 : Data节点启动时通过HTTP API向Meta节点注册(POST /data)
分片分配 : Meta节点根据replication-factor策略分配分片到Data节点
写入协调 : 客户端写入数据时,由Meta节点确定目标分片所在Data节点
故障转移 : Meta节点检测Data节点离线后,自动通过Hinted Handoff机制转移副本
一个集群至少要有三个独立的元节点才能允许一个节点的丢失,如果要容忍n个节点的丢失则需要2n+1个元节点。集群的元节点的数目应该为奇数。不要是偶数元节点,因为这样在特定的配置下会导致故障。
一个集群运行只有一个数据节点,但这样数据就没有冗余了。这里的冗余通过写数据的RP中的副本个数来设置。一个集群在丢失n-1个数据节点后仍然能返回完整的数据,其中n是副本个数。为了在集群内实现最佳数据分配,我们建议数据节点的个数为偶数。
1 | $ influx -precision rfc3339 |
1 | <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp] |
1 | > use testdb |
1 | > SELECT "host", "region", "value" FROM "cpu" |
1 | curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000' |
1 | curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'" |
shard := shardGroup.shards[fnv.New64a(key) % len(shardGroup.Shards)]
4/2=2 个分片(Shard 1 & 2)cpu,host=svr1 usage=80:Series Key = cpu,host=svr1,哈希值模2=1 ⇒ 分片2,数据同时写入节点 C 和 DSELECT * FROM cpu WHERE time > '2025-04-02':定位到 2025-04-02 分片组, 协调节点同时向 A/B(分片1)和 C/D(分片2)发起查询, 合并结果后返回Docker安装操作单例InfluxDB https://www.cnblogs.com/nhdlb/p/16409849.html
Docker快速开始集群InfluxDB https://github.com/chengshiwen/influxdb-cluster/wiki#docker-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B
在使用容器多节点部署InfluxDB时,数据库、容器、Docker、主机和Kubernetes(k8s)之间的关系可以理解如下:
Kubernetes 存储与 InfluxDB Shard 的关系解析
/var/lib/influxdb/data 目录下。/var/lib/influxdb/data/<database>/<retention_policy>/<shard_id>。Delete(默认),删除 PVC 会导致 Kubernetes 清理其绑定的 PV 及底层存储数据(如 NFS 目录、云盘等)。此时 /var/lib/influxdb 下的 data、meta 目录被清空,导致 Shard 文件丢失。ERR: shard not found 错误。https://docs.influxdata.com/enterprise_influxdb/v1/administration/backup-and-restore/
https://blog.csdn.net/weixin_46560589/article/details/127748939
InfluxDB Enterprise支持在集群实例、单个数据库和保留策略以及单个分片中备份和恢复数据。
1 | influxd backup -portable /path/to/backup |
1 | influxd backup -portable -database <database_name> /path/to/backup |
1 | influxd backup -portable -start <timestamp> /path/to/backup |
备份的数据可以恢复到新实例或现有实例中。
1 | influxd restore -portable /path/to/backup |
1 | influxd restore -portable -db <database_name> /path/to/backup |
-newdb 选项来实现:1 | influxd restore -portable -db <old_database_name> -newdb <new_database_name> /path/to/backup |
对于大多数InfluxDB Enterprise应用程序,备份和恢复实用程序提供了备份和恢复策略所需的工具。但是,在某些情况下,标准备份和恢复实用程序可能无法充分处理应用程序中的大量数据。作为标准备份和恢复实用程序的替代方案,可以使用InfluxDB influx_inspect export和涌入-import命令为灾难恢复和备份策略创建备份和恢复过程。
1 | root@influxdb-e2cb6c913a191e56c134e-data-0:/# influx_inspect export -datadir "/var/lib/influxdb/data" -waldir "/var/lib/influxdb/wal" -out "influxdb_test01_dump_out" -database "test01" -start "2024-10-22T00:00:00Z" |
1 | root@influxdb-e73f149ff7192bd87d190-data-1:/# influx -import -path='influxdb_test01_dump_out' -precision=ns -username='' -password='' |
-database,加 -compress-compressed 导入压缩文件,本质上是先解压后倒入Data节点迁移方案评审:先迁移后逐个恢复分片数据。已验证在分片副本大小70M、写入数据达2000point/s的情况下直接copy-shard会导致增量数据丢失,考虑在copy-shard前先执行truncate-shards截断热分片(集群中所有写入最新数据的分片,截断后关闭写入,变成冷分片),并在所有Data节点上创建该分片的新热分片副本,也就是在迁移节点上恢复了全部原有分片的新热分片副本,最新数据写入这个副本,然后再逐个从健康节点上的冷分片副本copy-shard恢复出分片的历史数据(迁移前分片副本原有的数据&迁移过程中未能写入的数据),该分片数据完全恢复;自测符合预期
1 | kubectl exec -i influxdb-xx-meta-0 -n influxdb -- influxd-ctl show-shards # 或influx命令行执行show shards |
1 | kubectl exec -i influxdb-xx-meta-0 -n influxdb -- influxd-ctl remove-data influxdb-xx-data-0.influxdb-xx-data:8088 |
1 | kubectl exec -i influxdb-xx-meta-0 -n influxdb -- influxd-ctl truncate-shards |
1 | # 对于_internal分片的转移 先copy后remove |
1 | # 分片的物理文件 wal&tsm |
1 | # 可能要等wal落tsm |
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
除了OOP外,近年出现了一些小众的编程哲学,Go语言对这些思想亦有所吸收。例如,Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。
go.mod 文件是声明依赖的地方,记录了项目的依赖关系。如果项目中没有 go.mod,需要先运行 go mod init 来初始化模块。然后使用 go get(或其他命令)来引入依赖,下载到本地缓存(~/go/pkg/mod),并更新 go.mod,添加对应的模块路径和版本要求。go.mod 文件声明并被解析(否则报错),将编译代码并链接所有必要的依赖来生成最终的可执行文件或库文件。如果 go.mod 中声明的依赖尚未下载,Go 工具链会自动为你下载这些依赖。如果你的项目中没有 go.mod,go build 将无法正确识别和下载依赖(除非是 Go 1.11 前的版本)go.mod 文件的 Go 项目,项目所需的依赖不会自动下载到本地环境中。需要手动运行 go mod download 或 go mod tidy 来下载依赖,或者直接运行 go build 以触发依赖的下载。go.mod 文件中声明的版本不同,Go 工具链会优先使用 go.mod 文件中指定的版本。Go 会从远程仓库下载与 go.mod 兼容的依赖版本,并将其存储在本地缓存目录(通常是 ~/go/pkg/mod)中。go env中的配置(看上去是如果配置全局 PATH=%GOPATH%\bin 就使用 GOPATH 中的go.exe和pkg)Makefile 文件,执行 build来构建项目。1 | D:\Users\caifeng7>wsl -l -v |
1 | sudo apt update |
1 | echo 'export PATH=$PATH:/root/go/bin' >> ~/.bashrc |
1 | root@caifeng7138:/mnt/c/Windows/system32# go env |
/mnt/d/code/datamars-agent/1 | root@caifeng7138:/mnt/d/code/datamars-agent# go env |
通过对国民收入的再分配,使公民在遇到特定风险或困难时能够获得基本生活保障。本质是追求一种公平。
佛山社保卡如何申领?“一人一卡”清理又是个啥? https://mp.weixin.qq.com/s/9uQ5qGOYv35BGRgs4OvzvA
没领佛山社保卡可以使用医保报销吗?可以,微信支付时会显示报销数额。
如何使用医保余额?办理实体医保卡,可以查到余额。
个人所得税丨2024年个人综合所得年度汇算操作指引 https://mapmpm5.midea.com/newservicenopages/#/content/preview?id=1896853229331374081
个人的汇算清缴,就是把您2024年一整年取得的劳动收入(税法中叫“综合所得”,具体指工资薪金、劳务报酬、稿酬、特许权使用费共4项)合并计算个税,得出应纳个人所得税,与2024年实际预扣预缴的个税比较,税款多退少补。预缴税款与实际应缴税款产生差异的核心原因在于预扣预缴机制与全年综合计算的逻辑差异。
预扣预缴是基于局部数据和固定规则的估算,而汇算清缴是基于完整数据和真实扣除的精准计算,
建议:通过“个人所得税APP”提前核对收入明细和扣除项,利用汇算规则合法降低税负(如优化年终奖计税方式)。以下是具体原因分析:
| 情形 | 补偿标准 | 法律依据 | 维权路径 |
|---|---|---|---|
| 企业合法解除未提前通知 | N+1 | 《劳动合同法》第40条 | 协商或仲裁主张代通知金 |
| 企业违法解除 | 2N | 《劳动合同法》第87条 | 劳动仲裁或诉讼索赔双倍赔偿 |
| 员工被迫离职(企业过错) | N | 《劳动合同法》第38条 | 提交证据申请仲裁 |
【当代年轻人没了铁饭碗,还能负重奔跑多久?北京二胎家庭如何转移风险?】 https://www.bilibili.com/video/BV16F4m1V7wv/?share_source=copy_web&vd_source=2cbe8cdd54a75d0c43fcdefa624d3fbe
“年纪轻的一定要买百万医疗险和意外险,还有抗癌险,关键时候真的能救命的,有余裕买个重疾险,如果生病了确证了就能拿到几十万的保额,可以作为治疗和康复期的生活费开销,医疗费有医保和百万医疗险,到时候真生比较严重的病百分之九十能报销,年纪轻买了便宜加起来一年千把块,父母没生病可以给他们买众民保和中银全名保,还有当地的惠民保三个加起来六百块不到,不看健康告知年龄大可以报销,配合医保大概能报销八十花的多甚至能报销到九十,给家里老人多套保障,不会出现得了病只能放弃的人间惨剧,如果老人没医保可以买城乡医保一年几百块”
mom:东莞农村?居民社保医保,莞家福,莞家福居民保?,midea家属保险
2025年度商业保险开始投保了~ 员工(统一投保无需美福下单)本人及任选两名家属的免费/自付费升级方案 https://mapnew5.midea.com/newservicenopages/#/content/detail?id=1902351310562877442&type=2

根据您母亲的情况(47岁、乳腺癌病史、已参保东莞社保及莞家福),结合健康限制和保障需求,以下是商业保险的配置建议及具体产品的分析:
具体产品对比分析
| 产品类型 | 推荐产品 | 核心优势 | 局限性 | 年保费参考 |
|---|---|---|---|---|
| 乳腺癌复发险 | 泰康粉红卫士 | 保费最低(1400元起),特药覆盖最全(41种) | 仅限0-2期患者,续保需审核 | 1400-5000元 |
| 乳腺癌复发险 | 太平洋粉红守护 | 含对侧乳腺癌保障,特药清单更新快(48种) | 仅限0-2期患者,保费较高 | 2000-8000元 |
| 惠民保 | 众民保(全国版) | 覆盖复发治疗,含CAR-T疗法和质子重离子 | 免赔额高(2万),报销比例50%-80% | 150-300元 |
| 团体医疗险 | 太平洋企业合作套餐 | 无健康告知,可能覆盖既往症 | 需确认保额和报销范围(可能仅限社保内) | 企业合作价(待确认) |
建议优先投保乳腺癌复发险(专项保障),再补充惠民保和意外险,最后根据企业团体险条款决定是否叠加。
建议通过保险顾问协助核保(如众安、慧择平台),确保理赔无争议。
| 类别 | 比例 | 工具示例 | 目的 |
|---|---|---|---|
| 学习投入 | 10% | 付费研报、专业课程 | 知识体系构建 |
| 模拟交易 | 0% | 同花顺模拟盘、Backtrader | 策略验证 |
| 指数定投 | 40% | 沪深300ETF(A股) | 强制储蓄+市场β收益 |
| 行业ETF | 30% | 半导体ETF(512480) | 把握结构性机会 |
| 现金储备 | 20% | 货币基金 | 应对黑天鹅事件 |
1 | | 日期 | 操作 | 决策依据 | 情绪状态 | 事后评估 | |
下一步行动建议:
你的技术背景是独特优势,建议从**”工程师型投资者”路径切入,将编程能力转化为投资生产力。记住:在认知不充分时,不亏损比追求收益**更重要。

入职第一天,熟悉运维平台,目标实现其自动化,后续参与到美的云,?
熟悉新旧平台的功能和调用关系,拆分业务需求开发步骤,编写文档,每日汇报进展,熟悉开发流程、、
软工院作为非互联网公司的非核心业务的底层平台建设部门,结果导向,组员多一年社招;)无校招培养。?
EDP培训 + MGC(头脑风暴/产品调研/拉通对齐>>技术)
T型人才(广度+深度),开发技术+产品思维->架构师
不设限,主动承担任务,机会莫名来:) take other people’s jobs and become indispensable to the team..
复杂的事情简单化(思考简化),简单的事情复杂化(做到极致)
工作就是生活,生活就是工作,不需要平衡(找到热爱的工作)
成功的百分比 = 做事 / (个人 + 做事);做事的比例越大,成功的概率越大
Allen: 向上管理?× 向上反馈,同步进展
MGC结营
融入团队?主动承担?谈论未知?如何选择自己在团队中的角色,人设??
圈子
佛山校友会迎新
“努力会发光,先有为后有位”,“头三年不要动,把这一套学会”
程序员的本质核心竞争力是什么?1.开发都是那一套 2.专精一个领域 3.meet新公司的需求 4.解决问题的能力
华为云主机开/关机/重启自动化 : mq、定时任务、公有云api、crud、、
完成第一版8.14,自测8.15,,merge request,code review,sit,测试,uat,发版8.22、、
反思、、在开发同事的指导下完成了开发,不具备独立调研和开发能力,,
缺少对产品的思考??没有对需求进行120%的思考和完成。。
顺德校友会迎新
why Midea?1.生活成本低(特别是住宿好通勤方便)2.相比下工作轻松(能够有自己的时间学习业务以外的东西)
思考自己在..年后会到什么层次(本科毕业+6y ?= 博士毕业起步)。。阶段性目标
深入一个领域,,
先做一点功能点,然后负责一个模块,到不同系统的交互、、
多学基础,与外包的区别。。与人沟通的能力
幂等,整体设计,微服务治理,看项目源码,,
干半年就不是应届生了。社会很残酷,前两年要快速成长;思考两/五年后的情况、、
开发整个过一遍,打包,发版,,
多讨论,多问,code review
失败邮件发送:设计一个功能,,关注点,逻辑路径,通用性,,如何表述。。?! –>
方法:事务+行锁【悲观锁】,避免在高并发场景下先读后写导致多个线程同时读取相同的值然后同时写入引发数据不一致的问题
测试:线程池多线程访问,打印数据,排查重复值;考虑数据库连接池配置
思考:项目部署到多节点下,则是多进程的多线程环境,需要用Redis分布式锁,或者唯一的全局数据库节点加锁;
单节点的多线程才能用synchronized?、
1 |
|
1 |
|
Azure公有云主机申请 :根据云管界面配置配齐参数发送报文到作业平台,完成自动化主机创建和标准化
对其参数,连续加班,9.9完成第一版,9.10上sit前端联调,9.11开发部分发邮件,9.12上uat,6.同步DDL&DML,7.发版,验收成功
接触运维协同,,code review,联调,,集成,部署,流水线,,
窝囊费:)120
Azure公有云主机回收/开/关机/重启 : 调研AzureApi和测试方法,开发,,
9.23回收上sit,9.24开关机重启代码重构(原华为云方法过于通用),9.25bug毁了我的足球梦,9.26配置ngix上uat,验收
思考:自测可以 1.全流程验证 2.单独功能验证 3.考虑开发与测试环境的区别(ping的包装方法/命令行执行在开发/测试环境的区别)
后续:完善公有云开发(Azure回收配额,ip,失败邮件),后续由运维平台MOPS -> 参与到数据库开发
任务触发式失败邮件完成,改造为工单定时任务扫描式,10.17上线
邮件通用性??工单+定时任务层面的通用,,
数据管控平台DataMars: 云管cmcloud开发功能,先提供内部服务,后到SAAS,,
InfluxDB备份恢复 1 调研 2 手工实现 3 详细文档
2-3月时间,不要求11月上线,整体设计,转正答辩
api,数据库内核?,容器,k8s
容器,登录主机,查看docker实例,操作数据库实例
1 | rouser20@(datamars)mhpl74337-10.20.248.65 ~$ sudo su - apps |
influxdb 命名空间下的所有 Stateful、Pod 的状态和节点信息1 | apps@(datamars)mhpl74337-10.20.248.65 ~$ kubectl get sts -n influxdb |
influxdb 命名空间下的 service 信息。1 | apps@(datamars)mhpl74337-10.20.248.65 ~$ kubectl get svc -n influxdb |
kubectl exec 进入指定的 Pod(默认进入其中的第一个容器),并启动一个 bash shell;可以看到当前 InfluxDB 版本是v1.8.10-c1.1.21 | apps@(datamars)mhpl74337-10.20.248.65 ~$ kubectl exec -it influxdb-e2cb6c913a191e56c134e-data-0 -n influxdb -- bash |
1 | root@influxdb-e2cb6c913a191e56c134e-data-0:/# influx |
1 | root@influxdb-e2cb6c913a191e56c134e-data-0:/# influx_inspect export -datadir "/var/lib/influxdb/data" -waldir "/var/lib/influxdb/wal" -out "influxdb_test01_dump_out" -database "test01" -start "2024-10-22T00:00:00Z" |
1 | sudo kubectl cp influxdb/influxdb-e2cb6c913a191e56c134e-data-1:/influxdb_test01_dump_out data/influxdb_test01_dump_out |
1 | kubectl get secrets -n influxdb # 看命名空间 |
1 | root@influxdb-e73f149ff7192bd87d190-data-1:/# influx -import -path='influxdb_test01_dump_out' -precision=ns -username='admin' -password='' |
-database,把influxdb集群实例中所有数据库的数据导出,加 -compress 导出压缩文件-compressed 导入压缩文件,本质上是先解压后倒入1 | # 导出配置文件 |
1 | spec: |
1 | apps@(datamars)mhpl74337-10.20.248.65 ~$ kubectl get pv -n influxdb |
1 | kubectl apply -f influxdb-sts.yaml |
1 | apps@(datamars)mhpl74337-10.20.248.65 ~$ kubectl edit sts -n influxdb influxdb-e73f149ff7192bd87d190-data |
10.14-10.18:看文档,建立InfluxDB集群概念(前期已经也在看了..),建立整体框架概念(apiserver–bakserver–agent)
10.21-10.25:本地容器搭建influxdb集群×,连接服务器测试实例验证功能,了解K8S概念,手动验证实例(库级)导入导出即逻辑备份
10.28-11.01:对其需求(能做但没用户??),完成技术文档框架,开始将功能接入datamars-bakserver,了解golang开发
11.04-11.08:搭建go开发和agent项目环境,,无法理解go项目结构,尝试从bakserver侧理解task下发-接收-执行全流程
11.11:理解所有业务代码(after2weeks)发现task下发无需改动,只需适配influxdb(修改配置类和表),接着打包至sit环境打印log调试
11.12-11.15:研究pod添加container(改sts后delete pod重建),go项目构建(windows尝试配齐开发工具但有些包依赖linux环境)》。
11.18-11.27:本机wsl的ubuntu成功构建起datamars-agent,边抄边做,不用理解其框架?.. 及时请教专家
11.28-12.03:kun手改agent代码:)打包image push到dockerhub,宿主机拉取镜像后本地grpcurl调试 pod ip:port 验证功能
12.04-12.09:bakserver打日志流水线部署到uat(集群实例所在环境),通过apiserver-bakserver-agent中的日志验证全流程功能
12.10:验证通过
技术文档先行,将需求拆分成一步步,重要的是要有产出,,能汇报进度。。buffer。。好心态😇不怕叼
关注重要的事情(功能接入已有框架/理解业务逻辑×,功能验证和对齐需求√,开发卡点及时请教)
1/2时间幻想(串联已知信息且验证,对齐上下游并重复验证,本质是开发环境,业务不熟悉),1/4等回复(线上下请教+准备),1/4开发(快乐短暂)
与人沟通是重要的能力。。拉群问。。软件开发还是很残酷的。。
2025.04:重新考虑… 1 influx_inspect export只是把该pod指定数据库(或所有库)的指定时间段的分片数据(tsm&wal)导出line protocol文件,各Data-Pod数据不一致时不能代表整个实例;2 influx -import本质是将数据重新写入,前提要先恢复好shard元数据,,
1.02:不上心
1.14:开发uat自测(sit没测)完成,开发分支合dev提测,最后合main上线
1.16:SD/GA测试发版失败,恢复工作流需要人工介入验证,存在问题 1地址没有动态配置!! 2漏配接口/审批流变更
1.21:发布修复版本,生产延后
复工
当前阶段的关键,,交付能力,,工程能力是练出来的
熬夜是没有对明天的期待、、-》培养兴趣转移注意力、,books
程序员。技术。不要只看自己的一亩三分地。。开源项目
工作以外;:给自己创造需求,根据需求解决问题,在解决问题上配合看书,,从而在某一细分领域有知识图谱,有一技之长,用系统性的看书代替cdsn查找零散的解决方案
“下班的时间放在哪哪里就有提升”
副业?;web3;licai
dataMars服务架构理解
todo 手画图
2.6-2.16:现有InfluxDB集群实例(只考虑data节点)的CPU、内存和存储资源已无法满足需求,需对资源配置进行扩展,以提升性能和稳定性。通过修改StatefulSet中cpu、memory配置并删除Pod触发StatefulSet控制器重建data节点Pod以应用新配置,通过修改data节点Pod对应的pvc中storage配置以触发pv的存储扩容(只能增加),实现资源变配(本地变配)
2.17:前端对齐开发,准备进入sit联调
2.18:插入需求“meta节点自定义创建”
2.28:整合已知信息已读代码->无法理解多节点类型实例如何发起变配,应该果断求助
3.3-3.10:改造influxdb集群为父子实例模式,改配置,传参调试,适配已有功能,考虑存量实例的影响
3.11-3.13:data变配基础上开发meta变配,云管订单遇到配额不匹配问题,上线延期下周
3.14:跨团队求助无果,请求协助,,新需求着手开发
3.17:搁置,开发新需求
3.18:实操tidb复现该“问题”,考虑转向与云管沟通。。
3.27:发版 =》InfluxDB父子实例改造/本地变配/节点/实例重启
正畸, 启动
读书时无所事事的日子,今天拔完牙和妈妈一起冰敷等待的日子,还有多少
刚开始普遍很难,易的是背八股,难的是落实和推进
如何跳出这个困境?如何跳出程序员行业?30岁,35岁
熬夜是因为没有对明天的渴望。但是在晚上的当下,有很多事情想做😿
喜欢一个人独处,是因为不想自己长期以来形成的情绪稳定被打破。害怕形成亲密关系,有时无法融入团体😿
2.18:本需求作为其他需求开发的前置条件
2.19:apisever打log上uat调试创建流程,从已部署分支git branch新分支以免影响正在使用者
2.21:提sql变更 1 dataspace提工单 2 直接进入各环境metadb(其本身为容器部署的mariadb服务) 3 某些配置项可通过datamars控制台修改
2.25:云管运营端商品信息变更,考虑是否影响存量实例;;1 云管释放旧实例将计价报错->调datamars管控接口释放/发版前释放旧实例 2 可以发起工单但无法下单->手动修改配额发起工单后过云管审批
2.27:发版流程、、代码合master,流水线打包使用(发版版本)部署,sql变更(定时,增加条件避免误订正),云运营变更(改一次console-cloud即各环境共用)
Steven👨🦲:裁员,残酷,危机感,,工作就是生活的很大一部分
deepseek:数据库方向是一个值得长期投入的领域,尤其适合对系统底层感兴趣的程序员。你的现有经验(运维+K8s)可成为切入云数据库或分布式数据库的跳板。建议以“运维需求驱动内核学习”为短期目标,逐步掌握分布式一致性、存储引擎等核心技术,同时通过开源贡献和项目实践构建技术影响力。=> https://yuanbao.tencent.com/bot/app/share/chat/c6b48985efa0c1101e5c6ae18c867724
rong teng:在midea得到的成长是显著的;(身兼开发运维多职,具体求职情况如何?)数据库方向有些窄;(作为senior求职需要专精时显得窄?作为基础能力学习可行?)应届生可以提转方向,转团队;以招聘市场心仪岗位的需求作为努力发展的方向!?
代码可以看作是一种特殊的prompt,用于引导AI生成高质量的代码提示;开发者有目的地编写代码,实是为AI提供清晰的意图上下文。
代码补全 需要让AI理解意图;技巧 提供具体示例,遵循规范和语义化,规范注释;“内联对话”
代码对话 本地工程理解@workspace,RAG增强
最佳实践
todo 体验cursor
3.17:简单需求,父子workflow + k8s资源控制器
3.18:接口配置:接口信息查看mariadb已有的相同接口,其他信息参考influxdb自身的其他接口;前端联调完成
3.19:提测,发版:发版分支一周内进行 1 代码扫描-安全扫描 2 安全-软件成分-Web漏洞-灰盒,解决漏洞;代码仓库设置发版分支,史诗中关联所涉及仓库,检索其发版分支的扫描报告,手动关联web漏洞测试报告,质量门禁达标以通过安全卡点
1 | # 生成随机类名避免冲突 |
TEMP_JAVA="/tmp/${CLASS_NAME}.java")rm -f "$TEMP_JAVA")1 | System.out.println("USERNAME:" + username.trim()); |
1 | # 错误示例:初始方案采用`IFS`分割导致变量截断 |
1 | credentials=$(get_auth $1) # get_auth()动态生成java解密脚本并多行输出 |
1 | function select_data_pod() { |
| 方案 | 优点 | 缺点 |
|---|---|---|
| 文件存储 | 实现简单 | 存在安全风险 |
| 环境变量 | 进程内可见 | 长度受限 |
| 标准输出 | 无持久化风险 | 需严格格式控制 |
| 网络传输 | 适合分布式 | 增加复杂度 |
本项目完整代码已开源,读者可通过GitHub仓库获取最新版本。在Kubernetes运维领域,通过灵活组合各类工具实现自动化,是提升效率的关键路径。
3.28:需求分析->将pod迁移到集群的另一个资源充足的node上,并且恢复数据以及集群功能(元数据)
3.31-4.1:存量实例问题处理,, 建议客户使用改造后的influxdb实例,存量实例释放/启停/重启等功能遇到问题 =》未考虑好适配
4.2-4.7:出方案 1 sts指定亲合度规则以在指定node重建pod和pvc 2 开源influxdb-cluster功能不完全支持,考虑从分片副本层面恢复数据
4.8-4.10:数据恢复的主要思路=》从健康节点的分片副本copy-shard恢复出迁移节点原有的所有分片副本,?质疑->恢复过程中健康节点的分片副本持续写入的增量数据能否恢复??
4.11:考虑创建第3个Data-Pod替代迁移节点(从仍健康的迁移节点上迁移数据)× ->应该认为原节点完全不可用(相当于节点重搭了)设计方案参考其他数据库产品;;
4.14:推方案不动..自验证copy-shard达到预期效果,但无法解答原理,,自测方式还需模拟实际场景,多线程写入。。
4.15:写bash脚本批量写,开多终端模拟多线程,分片副本达70M+大流量2000point/s写 =》copy-shard恢复出分片副本与健康节点持续写的副本md5值不一致,恢复副本export文件小,猜测丢失数据
4.17:InfluxDB Data节点迁移方案评审:先迁移后逐个恢复分片数据。已验证在分片副本大小70M、写入数据达2000point/s的情况下直接copy-shard会导致增量数据丢失,考虑在copy-shard前先执行truncate-shards截断热分片(集群中所有写入最新数据的分片,截断后关闭写入,变成冷分片),并在所有Data节点上创建该分片的新热分片副本,也就是在迁移节点上恢复了全部原有分片的新热分片副本,最新数据写入这个副本,然后再逐个从健康节点上的冷分片副本copy-shard恢复出分片的历史数据(迁移前分片副本原有的数据&迁移过程中未能写入的数据),该分片数据完全恢复;自测符合预期
4.18-4.21:开发。发现原checkPodRebuildReady接口有时不符合预期,执行influxd-ctl指令(硬写成String在代码中)有时失效(meta no leader..),经常需要手工介入。。
4.22:提测
4.23:InfluxDB开源版可靠性不确定,,社区版,单节点,,开发,值班暂停
官方文档 https://influxdb-v1-docs-cn.cnosdb.com/influxdb/v1.8/introduction/install/
开源influxdb-cluster源码 https://github.com/chengshiwen/influxdb-cluster
Data节点迁移方案
故障矩阵: 架构 => 2 data 3 meta 副本因子为2
DBCLOUD开源DB报警群(实例),DBEngine告警群(机器),致命告警->数据库值班告警处理群,MariaDB/MySQL/MongoDB/PostgreSQL 常见问题,,
制定2025年度重点工作计划。
快速开发InfluxDB服务化需求,持续优化已有功能;深度熟悉开源数据库,确保提供稳定服务。对齐其他数据库产品,了解用户实际需求,多方面考虑设计方案。做好值班任务。
希望提升的1-3项核心能力项,计划如何提升。
1 深入技术栈学习。阅读InfluxDB源码,学习数据库架构设计,K8s应用课程等,掌握高频业务场景的原理和运维技巧。
2 高效合作开发的能力。在全面思考,明确需求后开始开发,遇到卡点快速解决。
面向未来1年的职业规划。
本岗位沉淀
在这个阶段希望提高自己的工程能力,能比较全面地思考设计方案,快速开发和交付需求;还应该具备产品侧思考的能力,对一个系统有深入的认知,能够独当一面,做到专精一个领域。
工作成果
1.InfluxDB服务化体系构建
完成父子实例模式改造,新增InfluxDBMeta规格体系,实现节点级独立变配能力,为后续节点重启、迁移奠定基础;
针对Data节点迁移提出 “热分片截断-冷副本恢复”双阶段法,通过多线程大流量写入压力验证(2000 points/s),解决开源工具增量数据丢失问题;
参与数据库运维工作。
2.NBU备份自动化开发
支持备份平台自动化运维需求,开发基于Ansible的客户端安装脚本,整合NBU API,实现备份申请自动化;
开发备份域配置管理界面(增删改查+JSON字段模糊查询)
能力提升
在InfluxDB服务化需求开发中锻炼了“场景抽象-方案验证”的能力,从寻找开源社区方案到定制化能力开发(如备份集恢复、节点迁移及数据一致性保障),梳理故障矩阵(如单Data宕机、多Meta宕机的应对策略);在NBU备份自动化需求开发中能够快速上手Ansible脚本,复用已有能力,与用户及时沟通并完成开发。
存在不足
数据库开发方面需要积累技术深度,全面考虑方案并推动评审;自动化运维需求开发可以积累解决方案,缩短交付周期。
4.25-5.8:手动验证全流程+调通API,分阶段做,卡点及时同步到群聊.. 官网找接口文档/厂家提供,postPolicies接口参数调不好,就先手动设好用get查出来构造requestBody..
5.9-5.13:理清自动化接入和改造方案(先看一期代码,考虑接口和表能否复用),主动拉评审会议
5.14-5.16:开发及时理清需求原型和改造点,开发备份域配置管理界面
5.19-5.23:重难点=》作业平台下发备份客户端安装ansible脚本改造,根据传参when指定不同task,实现在target主机安装指定平台的client,expect实现交互式流程
5.26-5.29:NBU备份申请自动化开发,实现BackupNbuService(备份平台NBU涉及代码,构造RestTemplate调API);备份域配置“增删改查”,分页,模糊查询,@Transation处理先删后插/先改后改/先删后删。。延期->0605
6.3:自测=》页面上发起请求获得requestBody/通过postman调用本地起的后端服务,调试=》注释排查法/计算器debug
6.4:发sit,延期->0612;完善todo
6.5:自测,业务验收,ddl&dml(注意StringEncryptor加密的密钥随env变化!!) 发版,存在问题待完善
11.13:ToB客户验收(产品化环境开发、、接入客户环境、、)
1 |
|
6.27:页面流程理解+看“申请”自动化代码->考虑改造点,找api,输出文档
6.30-7.4:需求对齐,减少开发量的机会,,对于依赖项的变更(healthCheck->ResourcePool-VirtualServer)采用“蓝绿发布”=》先增后删
7.5-7.9:开发完成
7.10-7.11:自测,前端发起一次请求F12取payload / 后端接口处打印入参 + 按需修改 =》构造入参,走通流程,只需关注新加的代码(无关逻辑如校验/审批代码可以先注释掉。。)
7.14:变更成功后回滚。。手动修改+提sql同步配置;思考=》是不是可以直接另提一次变更,或者另外提供回滚接口,,总之此时回滚和前一次变更已经没有关联
7.17:上线。修复 1 管理员节点自动带出尽可能多参数 2 支持定时执行 3 思考:checkChangeSuccess()方法期望同步response,但方法里调API返回fail会隔10s重复十次,就是一直fail的话接口会隔100s才返回数据,假如加了一个定时任务扫描出待变更工单列表,用for循环执行change()并且各调用了checkChangeSuccess(),会发生什么,for循环卡住?”springboot项目,写了一个变更c…”点击查看元宝的回答
https://yuanbao.tencent.com/bot/app/share/chat/qqYiHTHYRWDv
7.29:支持定时执行,注意避免同一个工单被多次扫除(未完成变更后状态->EXECUTED),注意调度任务下发到本地节点,可能由于代码版本不同造成“灵异事件”
10.16:支持变更页面上的所有参数
10.30:支持回收自动化
11.13:优化提交工单时校验逻辑,避免重复补工单(按需增加存表字段&管理端加编辑后门)
解析值。。序列反序列parse,,JSONNode,,
1 | log.error("查询VirtualServer信息异常:"+e.getMessage(), e); |
。。
Java如何处理一个请求 https://yuanbao.tencent.com/bot/app/share/chat/crOguvwf38jw
mops架构熟悉 “如何深入了解当前负责的java项目,在i…” https://yuanbao.tencent.com/bot/app/share/chat/bsqucYK8K9bJ
打造主机、网络、存储等运维一键操作,支持申请、变更、回收等常见场景,实现工单下发、流程审批、策略下发的逻辑,集成平台API、脚本下发、定时调度、CMDB能力,保证流程清晰、节点可控、异常告警。。
负责。。网络管理模块开发,发版小组,值班
竞品。。蓝鲸研发运维技术PaaS体系
产品化。。定制化功能
网络管理模块。。增删改查。。AI code
技术实现:多平台用策略模式,加注解实现定时任务调度?
解决问题:并发。。
配置数据库
mongodb、Elasticsearch
运维事实库,,与mops数据同步,订阅。。
数据重复。。问题排查
作业平台,特权机+脚本下发
运维入口
自动化运维=》LLM作为“大脑”负责思考和规划,MCP等框架提供标准化的“工具库”,而强大的权限与安全体系则扮演着“交通警察”和“紧箍咒”的角色。这三者的有机结合,使得Agent既能智能地帮我们一步步完成复杂任务,又能被有效地约束在安全、可控的边界之内,从而真正成为一位可靠的数字助手。
Serval raises $52M in funding. Learn More https://www.serval.com/updates/series-a
Spring AI Alibaba 1.0 GA 正式发布,Java智能体开发进入新时代 https://developer.aliyun.com/article/1666891
“一个Java系统开发完了,是怎么跑起来…” https://yb.tencent.com/s/jj0KGxxEGgzU
“IDEA调试、线上运行,Maven、SpringCloud…” https://yb.tencent.com/s/GB2sYz5WPHbB
集成,部署 “所谓的微服务实际上是怎么部署的呢…” https://yuanbao.tencent.com/bot/app/share/chat/gt96bRkSxuos
K8S&微服务部署方案 “k8s和springcloud是如何关联…” https://yuanbao.tencent.com/bot/app/share/chat/H2FtlSdK24y1
feature/v1.1.0发版完成后,拉出最多下两个版本的开发分支,如 bugfix/v1.1.0和 feature/v1.2.0,发版完成后合入线上分支和下一个版本分支。db文件上传git。ps aux | grep ${package_name} | grep java | grep -v grep | awk '{print $2}' | xargs kill -15nohup /usr/bin/java ${C_CMDB_XXL_JOB_EXECUTOR_ONEAGENT_OPTS} -Xms8g -Xmx8g -jar -Dspring.config.location=${package_path}/application.yml -Djasypt.encryptor.password=abcdefg ${package_path}/${package_name}.jar > ${package_path}/${package_name}.log 2>&1 &“springcloud微服务架构里,每个微服务是单独开发,部署的吗,如何互相发现、调用?如果要新增一个微服务,要做什么工作?有没有“主服务”的概念,所有微服务都要记在主服务的配置文件中?”https://yb.tencent.com/s/oL2XPesIhuCx
运维人员 -> 办公电脑 -> 访问入口 -> 堡垒机(安全审计核心) / 跳板机(简易通道) -> 内网 -> 物理机 / Linux后台(应用载体)
Linux基本命令:
netstat ; top; awk ; dstat; iostat; lsof; free, df;uptime;dmesg ;dig ; nslookup
vim/vi的基本快捷命令(gg, shift + g, :n ; dd, :%d ; yy, p ,u等)
终端的一些快捷命令(ctrl + a; ctrl + e)
1 | # 确认分区使用率 |
/etc/logrotate.d/zookeeper 中设置 daily, rotate 30, compress1 | 987 2025-12-04 17:13:46 df -h |
1、调cmdb域名http://cmdbuat.midea.com/ops-data-access/view/direct,偶现“the upstream server is timing out”,nginx报错但不一定其本身出错
2、调网关http://10.16.115.110:7004/ops-data-access/view/direct,偶现“ZuulException”并且时间都是1min,怀疑是下游ops-data-access服务出错
3、直接调服务ip:port上的数据连接器接口:http://10.16.64.39:7119/view/direct,两个ip,发现其中这一个不行,怀疑是这个节点服务挂了/进程起来了但服务没起来,重启nohup java…,jps检查
=》思路:CMDB组件很多,逐步排查,一般是提供接口的服务本身出错,如果是nginx/网关出错的影响面会更大
8.1:梳理变更场景,4种记录+2种平台,拆解为每种记录只有增删改三种操作,一步步实现即可
8.2-8.10:大假,昆明-大理-贵阳-深圳
8.11-8.15:收集+验证现状,还需拉会议评审
8.17:后续每天定 每日计划…
0818:DNS变更,确定所有api/script(√),方案评审(×)
0819:DNS变更主流程(80%)
0820:DNS变更主流程(90%)
0821:管理端加失败工单入库按钮,当日上线
0822-0824:DNS变更开发
0825:DNS变更自测(√),CMDB安全组件安装流程确定(×)
0826:DNS变更sit(√),CMDB安全组件安装(×)
0827:DNS变更全流程报错机制完善,1.流程节点失败就报错 2.ticket.setExecutionLog(+=新日志) 那么可以全程操作溯源、、成功就直接加,失败throwE在catch里加e.getMessage()
0828:涉及定时任务调度/异步的要考虑UserContext空指针;上线
0908:一键回退主流程开发
0916:一键回退上线
1016:全面支持mx+txt申请变更回收,通过workspace让AI“模仿”cname自动化来实现
1030:支持智能解析,todo->cmdb字段回写+移动审批带出
11.18:产品化需求->Windows DNS自动化下发,适配进常规DNS下发流程(midea生产和产品化环境通过前端开放不同入口,实现执行不同部分代码,下发不同platform的DNS配置)
1202:变更一键回退优化(直接挂回原pool),支持申请回退(即回收掉)
二阶段提交以保证两份日志保持逻辑一致)-> 两份日志都成功写入磁盘后,被修改的数据页(脏页)并不会立即写入磁盘,而是由 MySQL 在“后台”选择一个合适的时机异步刷盘。^^
刚刚好找出这张照片,刚好这一天的头发服帖,刚好朋友拍出了不错的构图,脸上也满是生气,好像有勇气冲到一个新的level
但最近我都在跑医院,想着每个周末只是在修复自己的身体和精神,到了工作日又要回去摧残自己..这有什么意义吗
为了回归到这张照片,想了半天得出一个结论是,不断地修复自己到一个刚刚好的状态就是生活的意义,吗
有点虚无,说了但像什么也没说,什么又是一个刚刚好的状态呢
也许是我刚好能够面对相机,刚好拍下了这张照片
也许人置身生活的洪流,只能不断修复自己
也许可以找到互相修复的人
接手CMDB,,从做需求->做系统 https://yuanbao.tencent.com/bot/app/share/chat/920NVAbsqwtm
最大化CMDB项目的学习价值,, https://yuanbao.tencent.com/bot/app/share/chat/SzQrsGlsuz88
| 简历模块 | 平庸写法 | 高价值写法(量化+技术关键词) |
|---|---|---|
| 项目经验 | 参与CMDB需求开发 | 主导CMDB数据模型重构,设计弹性CI架构,支持200+动态属性扩展,模型变更效率提升40% |
| 技术亮点 | 使用Spring Cloud开发API | 基于Quartz+Netty开发高并发自动发现引擎,单节点支持5000+设备/秒采集 |
| 业务价值 | 提升系统稳定性 | 通过拓扑影响分析模块,故障定位时效从30min缩短至5min,年止损运维成本200万+ |
💡 简历筛选口诀:“技术深度×业务影响”双突出——避免写“增删改查”,聚焦架构设计、性能优化、跨系统集成。
https://www.vertice.cn/solution-details/26737.html
llm+rag+mcp
ChatClient ←→ PromptTemplate ←→ ChatResponse1 | // 1. LLM解析 → 需要调用queryHosts工具,参数: osType="Linux", minMemory=8 |
1 | // 1. LLM解析 → 需要调用queryHosts工具,参数: osType="Linux", minMemory=8 |
1 | // 1. RAG检索 → 相关性能优化文档 |
可体验的竞品:
竞品核心功能提取:
• 自然语言转查询:”内存大于8G的服务器” → MongoDB查询
• 结果格式化:表格、图表、自然语言总结
• 错误处理:查询无结果时的智能建议
| 方案 | 技术栈 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| Python独立Agent服务 | Python + FastAPI/Flask + LangChain | AI生态丰富,开发速度快,框架成熟 | 需要维护多语言栈,网络调用开销 | 大多数企业,特别是AI优先的团队 |
| Spring AI集成 | Java + Spring AI | 技术栈统一,性能更好,与现有系统无缝集成 | Spring AI相对较新,生态不如Python丰富 | Java技术栈为主的企业,追求技术统一性 |
| 混合架构 | Python Agent + Java业务层 | 兼顾AI能力和业务逻辑,职责清晰 | 架构复杂,运维成本高 | 大型企业,已有复杂Java系统 |
1.5:项目启动
1.7:datamax问数体验,开启多轮问答方案调研(确定表-确定字段-确定sql..)
1.9:DataAgent项目体验,SpringAiAlibaba,Apache2.0
1.11:DataAgent=》配置llm+embedding,初始化数据源embedding到本地vectorStore,,Graph多轮问数
自我介绍。
面试官您好,我是蔡枫,本科毕业于华南理工大学计算机学院,一年多以来在美的集团从事Java后端开发的工作。
我主要接触两方面的工作,目前正在做的是自动化运维平台的开发,面向整个集团的用户提供主机、网络管理相关的服务,类似的竞品有嘉为蓝鲸,我们的工作就是把以往通过管理员手动下发的工作实现流程化、自动化,保证可追溯和甚至可逆。另外,还做了半年的数据库服务化开发,建设InfluxDB的“数据库即服务”(DBaaS)能力,基于开源Influxdb Cluster支持了备份恢复、变配、迁移等功能,但是后期随着对开源数据库的可靠性存在顾虑中断了。
💻 项目一:自动化运维平台开发与产品化
💾 项目二:InfluxDB数据库服务化能力建设
技术亮点与难点
为什么要跳槽?
?
工作一年以来对Java开发的理解。
整体比较符合预期,就是解决实际问题的根据,利用算法&数据结构,实现具体的需求。目前不可避免的陷入在很小的领域(很具体的功能)编写杂七杂八的业务逻辑,但这是总来有执行者来做的工作,我觉得关键是前期方案设计时保证整体的可靠性和通用性(自动化场景1 2 3,平台1 2 3),做需求时总结出sop,或者直接交给AI来做
一个挑战。
一次排查问题。
cpu飙升,发现是一个接口有io操作,并发大了就卡住了。。
首先,停掉回写接口,把cpu降下来,恢复服务
分析,不是计算型的,所以多线程没用,要考虑优化io查询,cmdb加索引。。
其次,如何降低并发,加缓存?异步??
处理线上问题,处理偶现问题
。。
为什么tob,为什么2c?中台?
不局限tob/c,但是要持续学习,保持好奇。做中台就像一个螺丝钉,不断修修补补,比较无趣(运维场景深度待挖掘)
对AI的使用
AI Coding使用的主要场景有 1、有过往代码可参考的新需求 2、有API文档的需求
运维Agent