自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 LangGraph 源码学习笔记

基于对 LangGraph 源码的阅读与讨论,整理成一份以「概念 + 入口 + 结构」为主的学习笔记,方便后续翻查和扩展。

2026-02-12 14:38:41 1055

原创 亿级向量检索:Elasticsearch vs. Milvus,性能鸿沟与架构抉择

在处理亿级规模的向量检索时,专用向量数据库相比于:对于大规模、高性能的 RAG 应用,采用的混合架构是兼顾性能、成本与扩展性的最佳实践。

2026-01-28 11:35:46 698

原创 算法学习常用函数详解

激活函数:ReLU、Sigmoid、Tanh、Softmax等,引入非线性线性变换:Affine变换,神经网络的基础归一化:Batch Norm、Layer Norm等,稳定训练损失函数:交叉熵、MSE等,衡量预测误差池化函数:Max Pooling、Average Pooling等,降维正则化:Dropout、L1/L2等,防止过拟合注意力机制:Self-Attention、Multi-Head等,序列建模其他函数。

2026-01-05 22:59:41 622

原创 我的 MCP 学习之旅:从困惑到理解

最近在开发 AgentCrew 项目时,第一次深入接触了 MCP(Model Context Protocol)。作为一个优化"氛围式编程"(Vibe Coding)反馈循环的工具,我需要让 Cursor 能够通过 MCP 协议与我的 Agent 系统交互。在这个过程中,我遇到了很多疑问,也学到了很多。这篇文章记录了我的学习历程,希望能帮助到同样在学习 MCP 的朋友。MCP 是协议标准,不是 npm 包类似 HTTP 协议可以有多种实现方式开放标准,任何人都可以实现MCP 支持多种传输方式。

2026-01-05 17:38:06 697

原创 大索引 Dump 失败问题的完整解决方案

特性ScrollPIT快照机制创建上下文时创建 PIT 时生命周期管理自动过期可手动延长资源占用较高较低断点续传不支持支持(配合 search_after)跨索引查询不支持支持合理设置分片数:建议每个分片 20-50 万文档考虑迁移场景:如果经常需要迁移,分片不要太大大索引 dump 失败问题的解决过程,是一个典型的从技术优化到思路转变初期:试图通过技术手段(断点续传、增强容错)解决问题中期:发现技术手段的局限性最终:转变思路,将大任务拆分成小任务。

2026-01-05 09:21:45 984

原创 Linux top 命令详解:系统监控的必备工具

top是 Linux 系统中最常用的实时系统监控工具之一。它能够动态显示系统中各个进程的资源占用情况,包括 CPU、内存、负载等关键指标,是系统管理员和开发人员诊断系统性能问题的重要工具。top系统摘要部分(顶部)和进程列表部分(底部)。我们先从系统摘要部分开始。指标健康值警告值危险值CPU idle> 50%20-50%< 20%CPU wait< 5%5-20%> 20%< CPU核心数= CPU核心数> CPU核心数可用内存> 20%10-20%< 10%Swap used。

2025-12-31 09:57:39 416

原创 Elasticsearch Dump 失败问题排查:Store: True 导致的字段数组化问题

source字段:存储原始 JSON,不受 mapping 影响索引层:根据 mapping 类型索引,用于搜索:单独存储的字段值,返回格式为数组。

2025-12-29 18:15:41 702

原创 Elasticsearch Update 机制与 docs.deleted 详解

✅ ES 的 update 是"获取旧文档 → 合并更新 → 创建新文档 → 旧文档逻辑删除"✅ 支持字段级更新,只更新指定字段✅ 内部会获取完整文档进行合并(不受查询_source限制)✅ 查询时只获取必要字段仍然有意义(减少网络传输)

2025-12-25 17:10:25 1156

原创 Elasticsearch Range查询性能优化:从20秒到1秒的优化实践

这次性能问题的根本原因是字段类型选择不当。text类型适合文本搜索,但不适合数值范围的range查询。通过添加long类型的字段,我们成功将查询性能提升了7-20倍。字段类型的选择直接影响查询性能mapping设计需要在项目初期就考虑好遇到性能问题,先检查字段类型和mapping配置生产环境优化要优先考虑零停机方案。

2025-12-25 16:20:41 656

原创 Elasticdump 如何优雅地处理百万级数据?深入解析 Scroll 稳定性保障机制

需要从 Elasticsearch 导出几百万条数据,但程序总是 OOM(内存溢出)自己写的 dump 脚本把 ES 集群压垮了,导致其他服务受影响网络波动导致 dump 任务失败,需要从头开始,浪费大量时间如果你有这些困扰,那么 Elasticdump 的实现方式值得学习。作为一个成熟的 ES 数据导入导出工具,Elasticdump 在处理大量数据时展现出了惊人的稳定性。它不会 OOM,不会压垮 ES 集群,还能优雅地处理各种异常情况。

2025-12-22 15:24:12 644

原创 Elasticsearch Scroll ID 详解

Scroll是 Elasticsearch 提供的一种深度分页机制,用于高效地遍历大量数据。与传统的from/size分页不同,scroll 专门设计用于需要获取大量数据(如数据导出、迁移)的场景。✅ Scroll 是高效的深度分页机制,适合大量数据导出✅ Scroll ID 类似 Kafka Offset,但更复杂(包含上下文信息)✅ 快照是元数据快照,不是数据快照,内存占用极小✅ Keep-Alive 是滑动时间窗口,每次使用都会刷新✅ 使用完成后要主动清理,避免内存泄漏。

2025-12-22 15:06:55 762

原创 Elasticsearch Explain API 详解:KNN 混合查询的分数计算与性能分析

在使用 Elasticsearch 进行混合检索(Hybrid Search)时,理解文档得分的计算过程至关重要。特别是当结合向量检索(KNN)和传统文本检索(Query String)时,分数计算会变得更加复杂。本文将通过一个真实的查询案例,深入解析 ES 的explainAPI 用法,以及混合查询场景下的分数计算机制。分数差异的原因高分文档:KNN + Query String 双重匹配低分文档:仅 KNN 匹配,Query String 未命中Explain API 的价值。

2025-12-22 09:05:34 810

原创 Elasticsearch Bulk 写入性能问题排查实录

从简单到复杂:先检查索引配置、资源使用等基础问题关注异常指标异常高是重要信号深入分析日志:慢查询日志能揭示性能瓶颈验证假设:通过隔离测试验证每个假设。

2025-12-12 17:42:03 869

原创 大模型上下文窗口、Memory 与历史对话:深入理解与实践指南

模型的上下文长度限制是多少?Memory 和历史对话有什么区别?它们是否占用 token 上限?如何在实际项目中合理使用它们?本文将深入探讨这些概念,并结合实际代码示例,帮助你更好地理解和使用这些功能。上下文窗口(Context Window)是指模型在一次对话中能够处理的输入和输出 token 的总数上限。关键点:上下文窗口是输入 + 输出共享的!如果输入占用 30000 token那么输出最多约 10960 token(还要留一些缓冲)注意力机制的限制。

2025-12-11 14:49:47 1101

原创 Elasticsearch 分数计算完全指南

Elasticsearch 的分数(_score)是衡量文档与查询相关性的重要指标。理解分数计算机制对于构建精确的搜索查询至关重要。特性FilterQuery计算分数❌ 否✅ 是字段权重有效❌ 否✅ 是boost 有效❌ 否✅ 是影响排序❌ 否✅ 是作用过滤文档搜索和排序。

2025-12-10 17:44:37 1001

原创 Elasticsearch minimum_should_match 参数详解

是 Elasticsearch 中一个非常重要的查询参数,用于控制查询中至少需要匹配多少个条件。它在不同的查询类型中有不同的行为,理解这些差异对于构建精确的搜索查询至关重要。用于指定在should子句中至少需要匹配多少个条件才能返回文档。数字2表示至少匹配 2 个条件百分比"60%"表示至少匹配 60% 的条件组合"2<75%"表示少于 2 个时全部匹配,2 个或以上时匹配 75%查询类型minimum_should_match 是否有效说明bool只有must❌ 无效没有should子句。

2025-12-10 17:44:02 716

原创 大规模向量搜索集群设计:从需求到实现的完整方案

本文记录了一个大规模向量搜索系统的Elasticsearch集群设计过程。系统需要处理千万级文档的向量检索,每篇文档包含高维向量。文章从数据量分析开始,逐步拆解存储需求、计算资源需求,最终给出完整的集群配置方案。节点数量 vs 单节点资源增加节点数可以提升并行度和故障隔离单节点资源要合理,避免过度分配平衡点:5个节点,每个128GB内存内存分配比例JVM堆内存:不超过32GB(ES最佳实践)系统内存:用于Page Cache,提升磁盘I/O性能合理比例:JVM:系统 = 1:3存储策略。

2025-12-10 17:03:04 707

原创 Elasticsearch Bulk 写入优化实践:从线程池拒绝到高效批量写入

约 10% 的文档在迁移过程中丢失。通过深入分析 ES 的 bulk 写入机制和线程池工作原理,我们找到了问题的根本原因,并实施了一套有效的优化方案。本文将详细记录这次问题定位和优化的全过程。小文档(< 1KB):64-128 条/ bulk中等文档(1-10KB):32-64 条/ bulk大文档(> 10KB):16-32 条/ bulk原则:确保每个 bulk 的处理时间在 0.1-1 秒之间。

2025-12-09 09:17:10 880

原创 RAG系统中的检索策略选择:一次性检索 vs 动态检索

是在生成过程中让Agent动态检索知识,还是在生成前一次性检索所有需要的知识?在大多数场景下,一次性检索策略在工程复杂度、系统可靠性和用户体验上都显著优于动态检索。

2025-12-02 09:59:35 824

原创 Elasticsearch 存储优化实践:从冷热集群到分配策略

在构建一个包含1500万篇文献的检索系统时,存储优化是一个关键问题。本文记录了我在 Elasticsearch 存储架构设计过程中的思考与实践,包括对冷热集群的深入理解、适用场景分析,以及最终选择的存储优化方案。冷热集群(Hot-Warm-Cold Architecture)是 Elasticsearch 的一种数据分层存储架构,通过将数据按照访问频率或时间特征分配到不同类型的节点上,实现性能与成本的平衡。关键点:冷热节点是逻辑角色,不是物理节点类型。热节点(Hot Nodes)

2025-11-27 09:57:56 311

原创 Elasticsearch 索引迁移优化实战:从合并索引到原样导入

不要盲目增加并发数:ES 的写入能力受限于多个因素,不是并发数越多越好建议并发数:对于 3 节点集群,建议并发数不超过 2-3。

2025-11-14 16:46:11 1063

原创 优化Elasticsearch批量写入性能:从单分片瓶颈到多索引架构

分片规划:单分片不超过50GB,推荐20-30GB索引拆分:大数据量使用多索引+Alias架构并发控制:根据集群节点数合理设置并发度错误处理:检查bulk写入的实际成功数量日志记录:使用标准logging,记录关键步骤时间字段:使用精确的时间戳而非日期字符串通过这次优化,我们不仅解决了单分片容量瓶颈问题,还建立了可扩展的多索引架构。架构层面:从单索引转向多索引+Alias代码层面:完善的错误处理和日志系统数据层面:添加准确的时间戳字段运维层面:详细的日志便于问题排查。

2025-11-03 15:06:15 737

原创 在Windows上使用Selenium + Chrome Profile实现自动登录爬虫

避免冲突:独立Profile目录防止文件锁定状态持久:登录信息自动保存和复用操作简单:一次配置,永久使用完全隔离:不影响正常使用的Chrome文件优化:清理不必要的缓存文件,保持Profile精简这种方案特别适合需要登录的爬虫项目,既保证了功能的完整性,又避免了复杂的Cookie管理。

2025-10-24 16:23:38 1055

原创 从零开始手写机器学习框架:我的深度学习之旅

这个项目是一个从零开始手写的机器学习框架,专门用于实现MNIST手写数字识别。通过实现每个组件,我深入理解了机器学习的底层原理。这个手写机器学习框架项目让我从一个后端研发的角度,深入理解了机器学习的核心原理。通过从零开始实现每个组件,我不仅掌握了理论知识,更重要的是培养了解决实际问题的能力。关键收获:理论理解:深入理解了机器学习的数学原理实践能力:能够实现完整的机器学习框架问题解决:学会了如何为新场景设计解决方案学习策略:找到了适合自己的学习方法参数调优:理解了超参数对模型性能的巨大影响。

2025-09-16 16:51:47 1225 3

原创 服务注册与发现:实现原理与常用组件

服务注册:服务启动时注册到注册中心服务发现:通过注册中心获取服务实例信息健康检查:监控服务状态,自动剔除故障服务负载均衡:在多个服务实例间分发请求选择合适的组件需要考虑技术栈、性能要求、运维复杂度等多个因素。没有最好的方案,只有最适合的方案。

2025-09-10 11:03:32 337

原创 服务注册与发现:什么时候需要引入

服务注册:服务启动时自动注册到注册中心服务发现:服务如何找到其他服务健康检查:监控服务状态,自动剔除故障服务负载均衡:在多个服务实例间分发请求简单业务系统:使用K8s Service或静态配置即可中型微服务:使用Spring Gateway + Eureka中台系统:使用Kong + Consul大型平台:使用Istio + 服务网格架构是演进的,不是一蹴而就的。从简单开始,根据实际需求逐步演进。

2025-09-10 11:02:25 566

原创 Git Cherry-pick 批量合并:从源分支到目标分支的完整指南

分支策略:始终基于目标分支创建新分支,避免状态混乱范围选择:使用A..B语法,表示从A之后到B的所有commit冲突处理:遇到冲突时逐个解决,确保代码质量MR流程:通过代码审查确保合并的安全性。

2025-09-01 10:46:38 578

原创 Elasticsearch数据迁移方案深度对比:三种方法的优劣分析

特性Snapshot迁移速度中等最快较慢内存占用高(风险大)低低权限要求低高低配置复杂度高中等低网络依赖中等低高数据完整性高最高高错误处理复杂简单中等维护成本高低低适用场景定制化需求生产环境通用场景Elasticsearch数据迁移是一个复杂的技术挑战,没有一种方案能够适用于所有场景。通过深入理解三种主要方案的特点和适用场景,我们可以根据具体的项目需求、技术环境和资源约束,选择最合适的迁移策略。

2025-08-28 16:29:41 945

原创 Elasticsearch数据迁移快照方案初探(二):快照创建与多节点存储问题解决

提前规划:在集群部署时就配置好快照路径权限管理:确保快照目录有正确的用户权限存储规划:考虑快照文件的存储空间需求识别问题本质:快照文件分散在多节点,传输复杂评估环境限制:生产环境权限受限,无法直接使用快照选择替代方案:elasticsearch-dump作为备选方案验证方案可行性:确保数据完整性和迁移效率这次经历让我们对Elasticsearch集群管理有了更深的理解,也为今后的运维工作积累了宝贵经验。

2025-08-27 18:14:27 398

原创 Elasticsearch数据迁移快照方案初探(一):多节点集群配置踩坑记

在生产环境中,我们经常需要将测试环境的Elasticsearch索引数据迁移到生产环境。这次我们遇到了一个典型的多节点集群快照配置问题:需要为所有节点添加path.repo配置,但过程中遇到了各种挑战。无法更新环境变量:必须使用down + up分片重分配控制很重要:避免重启过程中的数据迁移逐个重启策略:确保集群始终可用权限设置:快照目录需要正确的用户权限识别根本原因path.repo配置缺失评估解决方案:快照配置 vs elasticsearch-dump制定重启策略:分批重启,控制分片迁移。

2025-08-27 18:13:50 516

原创 RAG系统中的Chunk化策略:如何在完整性与效率之间找到平衡?

RAG系统中的chunk化策略需要在多个维度上找到平衡点。通过结合传统的智能chunk策略和创新的"按需获取"机制,我们可以构建出既高效又准确的RAG系统。关键是要让系统具备"智能判断"能力,而不是简单地提供所有信息或盲目截断。这样既保证了上下文的完整性,又能有效控制token使用量,最终实现更好的用户体验和生成质量。

2025-08-26 17:01:38 680

原创 Python并发执行优化:从异步到多线程的架构演进

纯异步操作:使用混合场景:使用CPU密集型:考虑问题识别:异步并发无法处理同步阻塞操作方案选择:多线程并发 + 异步集成性能提升:总耗时减少45.6%技术收获:深入理解了Python并发模型关键启示:在AI系统中,真正的性能瓶颈往往不在IO,而在计算密集型的LLM推理。选择合适的并发策略,能够显著提升系统性能。本文记录了在开发医学文献检索系统过程中,解决Python并发执行问题的完整技术方案。希望对遇到类似问题的开发者有所帮助。

2025-08-22 17:38:20 746

原创 <2> Elasticsearch大规模数据迁移实战:从内存暴涨到优化策略

本次项目涉及一次大规模的Elasticsearch数据迁移,总计90万文档,100GB数据。在迁移过程中遇到了严重的内存管理问题,通过深入分析和优化,最终找到了有效的解决方案。# 调整Linux内核参数-Xms4g -Xmx4g # 堆内存不超过系统内存的50%-XX:+UseG1GC # 使用G1垃圾收集器-XX:MaxGCPauseMillis=200 # 限制GC暂停时间。

2025-08-06 15:18:22 1156

原创 <1> ES内存泄漏问题深度解析:从Scroll查询到Mapped Buffer异常

系统内存使用率> 80% 需要关注> 物理内存50% 需要排查文件句柄数量异常增长需要检查。

2025-08-01 17:23:37 1060

原创 一次粗心导致的bug定位

"Remote host terminated the handshake"听起来像是SSL配置或网络问题,但实际上可能是URL错误。这次Bug定位过程虽然最终发现是一个简单的拼写错误,但整个过程展示了系统化调试的重要性。通过逐步排除、对比测试、深入分析,我们最终找到了问题的根源。这种"简单"的Bug往往最难发现,因为它们隐藏在复杂的系统架构和错误信息背后。但只要我们保持耐心,运用正确的调试方法,就一定能找到问题的真相。

2025-07-24 11:08:16 709

原创 Elasticsearch混合搜索深度解析(下):执行机制与完整流程

直接查看源码是理解复杂系统的最佳方式,比文档更准确、更深入。

2025-07-11 16:24:13 585

原创 Elasticsearch混合搜索深度解析(上):问题发现与源码探索

官方文档可能简化了复杂的内部机制,需要结合源码才能真正理解。

2025-07-11 16:20:19 599

原创 <六> k8s + promtail + loki + grafana初探

Loki中的**流(Stream)**是日志存储的基本单位。每个流由一组标签(labels)唯一标识,包含时间序列的日志条目。从源头开始排查:确认应用日志输出正常检查中间环节:验证日志格式和配置查看错误日志:Loki/Promtail的错误日志往往包含关键信息理解底层机制:了解Loki的流机制是解决问题的关键。

2025-06-25 18:11:39 1263

原创 分布式选举算法<一> Bully算法

Bully算法是一种基于优先级的分布式选举算法。每个节点都有一个唯一的ID,ID值越大的节点优先级越高。当主节点故障时,优先级最高的节点将成为新的主节点。Bully算法是分布式系统中最重要的选举算法之一。虽然存在脑裂、活锁等问题,但通过合理的解决方案和最佳实践,可以在大多数场景中提供可靠的选举服务。脑裂问题:通过多数派、租约、时间戳等机制解决活锁问题:使用随机退避、优先级队列、状态机等避免消息丢失:采用确认、重传、批量等机制提高可靠性性能优化:通过异步、缓存、批量等技术提升效率。

2025-06-18 16:44:49 1278

原创 钉钉告警集成部署指南

技术实现要服务于业务目标,而不是为了技术而技术。我们始终围绕"提升业务连续性"这一核心目标进行设计和优化。

2025-06-10 18:22:34 902

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除