当前位置: 首页 > news >正文

Elasticsearch 故障转移及水平扩容

一、故障转移

Elasticsearch 的故障转移(Failover)机制是其高可用性的核心,通过分布式设计、自动检测和恢复策略确保集群在节点故障时持续服务。

1.1 故障转移的核心组件
组件作用
Master 节点管理集群状态(分片分配、索引创建)、协调故障转移
Data 节点存储分片数据,参与分片复制
Zen Discovery7.x 之前版本的节点发现和故障检测机制
Raft 协议7.x+ 版本用于 Master 选举的共识算法
分片副本(Replicas)数据冗余的基础,主分片故障时副本自动晋升
1.2 故障检测机制
  1. 心跳检测(Ping)

    • 检测方式:节点间定期发送心跳(默认间隔 1s,超时 30s)。
    • 关键参数:
      discovery.zen.fd.ping_interval: 1s      # 心跳间隔
      discovery.zen.fd.ping_timeout: 30s      # 超时判定
      discovery.zen.fd.ping_retries: 3        # 重试次数
      
  2. Master 选举

    • 7.x 之前版本:基于 discovery.zen.minimum_master_nodes(防止脑裂)。
    • 7.x+ 版本:使用 Raft 协议自动选举,需配置 cluster.initial_master_nodes。
1.3 故障转移流程

场景1:Data 节点故障

  1. 检测阶段:Master 节点检测到 Data 节点心跳丢失(超时 30s)。
  2. 分片重新分配:
    • 若故障节点包含主分片,其对应的副本分片自动晋升为新主分片。
    • 若副本不足,集群状态变为 yellow。
  3. 恢复新副本:Master 在健康节点上创建新的副本分片,恢复 green 状态。

场景2:Master 节点故障

  1. 选举触发:剩余 Master 候选节点发起新一轮选举(基于 Raft 协议)。
  2. 新 Master 生效:当选节点接管集群状态管理。
  3. 元数据同步:新 Master 从全局集群状态恢复分片分配信息。

场景3:网络分区(Split-Brain)

  1. 防护机制:
    • 7.x 之前:minimum_master_nodes 阻止少数派选举。
    • 7.x+:Raft 协议自动隔离少数派分区。
  2. 恢复:网络恢复后,少数派节点重新加入集群并同步数据。
1.4 手动故障转移场景与操作
  1. 节点计划性维护(如升级)

    # 1. 排除节点分片分配
    PUT _cluster/settings
    {"persistent": {"cluster.routing.allocation.exclude._name": "es-old-node"}
    }# 2. 等待分片迁移完成(检查无分片在此节点)
    GET _cat/shards?v&h=index,shard,node# 3. 安全停止节点
    docker stop es-old-node
    
  2. 分片强制分配(自动恢复失败时)

    # 手动分配未分配的分片
    POST /_cluster/reroute
    {"commands": [{"allocate_stale_primary": {"index": "logs-2023-10","shard": 0,"node": "es-new-node","accept_data_loss": true  # 仅在必要时使用!}}]
    }
    
1.5 故障转移配置优化
  1. 控制分片恢复速度

    # 避免瞬时带宽和 CPU 过载
    cluster.routing.allocation.node_initial_primaries_recoveries: 4
    cluster.routing.allocation.node_concurrent_recoveries: 2
    indices.recovery.max_bytes_per_sec: 100mb
    
  2. 延迟分片分配(应对短暂故障)

    # 默认 1m,可延长至 5m 避免频繁迁移
    index.unassigned.node_left.delayed_timeout: 5m
    
  3. 优先恢复主分片

    cluster.routing.allocation.enable: "primaries"
    
1.6 故障转移注意事项
  1. 避免脑裂:合理配置 discovery.zen.minimum_master_nodes(通常为 (master_eligible_nodes / 2) + 1)。
  2. 副本分片数量:设置 number_of_replicas ≥ 1,确保每个主分片有至少一个副本。
  3. 分片均衡:避免热点分片集中,合理设计索引和分片数量。
  4. 慢恢复问题:大规模分片恢复可能影响性能,可通过 cluster.routing.allocation.node_concurrent_recoveries 限制并发恢复数。
  5. 跨可用区部署:通过 awareness 配置将分片分布到不同机架或可用区(AZ),避免单点故障。

二、水平扩容

Elasticsearch 的水平扩容(Horizontal Scaling)是通过增加节点数量来扩展集群的处理能力和存储容量,以应对数据量增长或高并发请求的场景。其核心思想是利用分布式架构的特性,将数据和负载均匀分配到更多节点上。

2.1 水平扩容的核心原理

Elasticsearch 的分布式架构天然支持水平扩容,关键点包括:

  1. 分片(Shard)机制:索引被拆分为多个主分片(Primary Shard)和副本分片(Replica Shard),分片分布在集群的各个节点。
  2. 自动负载均衡:新增节点后,Elasticsearch 会自动将部分分片迁移到新节点,实现负载均衡。
  3. 无缝扩展:扩容过程对用户透明,无需停机或手动干预数据迁移。
2.2 水平扩容的典型场景
  1. 存储容量不足:原始节点磁盘空间不足,需增加节点扩展存储。
  2. 性能瓶颈:查询延迟高或写入吞吐量不足,需分散负载。
  3. 高可用性需求:通过更多节点提高副本分片数量,增强容错能力。
2.3 水平扩容的具体步骤

步骤 1:添加新节点到集群

  1. 配置新节点:
    • 在新节点上安装 Elasticsearch,确保以下配置与现有集群一致:
      # elasticsearch.yml
      cluster.name: my-cluster      # 集群名称必须一致
      discovery.seed_hosts: ["node1_ip:9300", "node2_ip:9300"]  # 现有集群节点地址
      
      • 若新节点是数据节点,确保 node.roles: [ data ](默认角色)。
      • 若新节点是专用主节点或协调节点,需显式配置角色。
  2. 启动新节点:
    • 新节点会自动加入集群,并接收分片分配任务。

步骤 2:调整分片分配策略
Elasticsearch 默认会自动将分片分配到新节点,但可以通过配置优化:

  • 延迟分片分配(避免瞬时负载激增):

    PUT /_cluster/settings
    {"transient": {"cluster.routing.allocation.node_initial_primaries_recoveries": 1,  // 单节点并行恢复主分片数"cluster.routing.allocation.cluster_concurrent_rebalance": 2         // 并发分片迁移数}
    }
    
  • 排除旧节点(逐步迁移):

    PUT /_cluster/settings
    {"persistent": {"cluster.routing.allocation.exclude._ip": "old_node_ip"  // 从旧节点移出分片}
    }
    

步骤 3:调整索引分片数

  • 新建索引时指定分片数:
    水平扩容前需合理规划主分片数量(主分片数在创建索引后不可修改):

    PUT /my_index
    {"settings": {"number_of_shards": 6,    // 主分片数需提前规划"number_of_replicas": 1   // 副本分片数可动态调整}
    }
    
  • 动态调整副本分片数(即时生效):

    PUT /my_index/_settings
    {"number_of_replicas": 2     // 增加副本分片,提升容错和读取性能
    }
    

步骤 4:触发分片重平衡

  • 自动均衡:
    • 默认情况下,Elasticsearch 会在节点加入集群后自动迁移分片。
  • 手动触发:
    • 若需强制重新分配分片,使用 _cluster/reroute API:
      POST /_cluster/reroute
      {"commands": [{"move": {"index": "my_index","shard": 0,"from_node": "old_node","to_node": "new_node"}}]
      }
      
2.4 扩容后的优化策略
  1. 分片设计优化

    • 主分片数:
      • 建议每个分片大小在 10GB-50GB 之间(避免过大导致迁移慢)。
      • 主分片数应与数据增长预期匹配,通常可按 数据总量 / 30GB 估算。
    • 副本分片数:
      • 增加 number_of_replicas 可提高读取吞吐量和容错能力,但会占用更多存储。
  2. 跨节点负载均衡

    • 分片分配过滤:
      • 通过 awareness 配置实现跨机架或可用区(AZ)分布:
      # elasticsearch.yml
      cluster.routing.allocation.awareness.attributes: rack  # 按机架感知分配
      node.attr.rack: rack1                                  # 节点所属机架
      
    • 热冷分离架构:
      • 使用 ILM(Index Lifecycle Management) 将冷数据迁移到低成本节点。
2.5 水平扩容的注意事项
  1. 主分片数不可变:
    • 索引的主分片数量在创建后无法修改,需提前规划或通过 Reindex API 重建索引。
  2. 网络与硬件一致性:
    • 新节点的硬件配置(如磁盘类型、CPU)应与旧节点尽量一致,避免性能瓶颈。
  3. 脑裂风险:
    • 扩容主节点时,确保 discovery.zen.minimum_master_nodes(7.x 之前版本)配置正确,防止多主节点冲突。
  4. 分片分布均匀性:
    • 避免分片集中在少数节点,可通过 _cluster/allocation/explain 分析未分配分片的原因。

相关文章:

Elasticsearch 故障转移及水平扩容

一、故障转移 Elasticsearch 的故障转移(Failover)机制是其高可用性的核心,通过分布式设计、自动检测和恢复策略确保集群在节点故障时持续服务。 1.1 故障转移的核心组件 组件作用Master 节点管理集群状态(分片分配、索引创建&…...

聊聊Spring AI的Prompt

序 本文主要研究一下Spring AI的Prompt Prompt org/springframework/ai/chat/prompt/Prompt.java public class Prompt implements ModelRequest<List<Message>> {private final List<Message> messages;private ChatOptions chatOptions;public Prompt(…...

centos 7:虚拟机网络配置

1、网络模式选择 桥接模式 特点&#xff1a;虚拟机会获得与物理机同网段的独立IP&#xff0c;可直接访问内网/外网适用场景&#xff1a;渗透测试、需要与其他设备交互的场景配置要点&#xff1a;需在VMware中指定桥接到物理机的真实网卡&#xff08;如WiFi或有线网卡&#xff…...

Spring - 14 ( 5000 字 Spring 入门级教程 )

一&#xff1a;Spring原理 1.1 Bean 作用域的引入 在 Spring 的 IoC 和 DI 阶段&#xff0c;我们学习了 Spring 如何有效地管理对象。主要内容包括&#xff1a; 使用 Controller、Service、Repository、Component、Configuration 和 Bean 注解来声明 Bean 对象。通过 Applic…...

基于贝叶斯估计的多传感器数据融合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 贝叶斯估计 4.2 多传感器数据融合 5.完整程序 1.程序功能描述 基于贝叶斯估计的多传感器数据融合算法matlab仿真&#xff0c;输入多个传感器的数据&#xff0c;通过贝叶斯估计&#xf…...

linux编辑器-vim

一、基本概念 vim有很多模式但是有三个重要的模式分别是命令模式、插入模式、低行模式。 命令模式&#xff1a;控制光标移动、字符、字或行的删除、移动、复制等。插入模式&#xff1a;只有在该模式下才可以进行文字输入。低行模式&#xff1a;文件的保存或退出&#xff0c;也…...

day27图像处理OpenCV

文章目录 一、图像预处理1 图像翻转(图像镜像旋转)2 图像仿射变换2.1 图像旋转2.2 图像平移2.3 图像缩放2.4 图像剪切 3 插值方法3.1 最近邻插值3.2 双线性插值(常用)3.3 像素区域插值--一般缩小使用3.4 双三次插值3.5 Lanczos插值 一、图像预处理 1 图像翻转(图像镜像旋转) …...

iOS开发--接入ADMob广告失败

接入ADMob的第三方广告&#xff0c;初始化时提示错误如下&#xff1a; state Not Ready;No such adapter in the application 查了各种官方文档&#xff0c;发现接入过程正确&#xff0c;查了Chatgpt和DeepSeek&#xff0c;它们各种分析&#xff0c;分析结果如下&#xff1a; …...

PyTorch进阶学习笔记[长期更新]

第一章 PyTorch简介和安装 PyTorch是一个很强大的深度学习库&#xff0c;在学术中使用占比很大。 我这里是Mac系统的安装&#xff0c;相比起教程中的win/linux安装感觉还是简单不少&#xff08;之前就已经安好啦&#xff09;&#xff0c;有需要指导的小伙伴可以评论。 第二章…...

vue3 ts 自定义指令 app.directive

在 Vue 3 中&#xff0c;app.directive 是一个全局 API&#xff0c;用于注册或获取全局自定义指令。以下是关于 app.directive 的详细说明和使用方法 app.directive 用于定义全局指令&#xff0c;这些指令可以用于直接操作 DOM 元素。自定义指令在 Vue 3 中非常强大&#xff0…...

【漫话机器学习系列】199.过拟合 vs 欠拟合(Overfit vs Underfit)

机器学习核心问题&#xff1a;过拟合 vs 欠拟合 图示作者&#xff1a;Chris Albon 1. 什么是拟合&#xff08;Fit&#xff09;&#xff1f; 拟合&#xff08;Fit&#xff09;是指模型对数据的学习效果。 理想目标&#xff1a; 在训练集上效果好 在测试集上效果也好 不复杂、…...

从0到1使用C++操作MSXML

1. 引言 MSXML&#xff08;Microsoft XML Core Services&#xff09;是微软提供的一套用于处理XML的COM组件库&#xff0c;广泛应用于Windows平台的XML解析、验证、转换等操作。本文将详细介绍如何从零开始&#xff0c;在C中使用MSXML解析和操作XML文件&#xff0c;包含完整的…...

【中间件】nginx反向代理实操

一、说明 nginx用于做反向代理&#xff0c;其目标是将浏览器中的请求进行转发&#xff0c;应用场景如下&#xff1a; 说明&#xff1a; 1、用户在浏览器中发送请求 2、nginx监听到浏览器中的请求时&#xff0c;将该请求转发到网关 3、网关再将请求转发至对应服务 二、具体操作…...

C语言中冒泡排序和快速排序的区别

冒泡排序和快速排序都是常见的排序算法&#xff0c;但它们在原理、效率和应用场景等方面存在显著区别。以下是两者的详细对比&#xff1a; 一、算法原理 1. 冒泡排序 原理&#xff1a;通过重复遍历数组&#xff0c;比较相邻元素的大小&#xff0c;并在必要时交换它们的位置。…...

进程基本介绍

进程是操作系统的重要内容,都是需要了解和学习的,那么今天我们就来好好看看. 进程基本介绍 1、Linux中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid,进程号). 2.每个进程都可以以两种方式存在的,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的,…...

通过平台大数据智能引擎及工具,构建设备管理、运行工况监测、故障诊断等应用模型的智慧快消开源了

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 基于多年的深度…...

不同数据库的注入报错信息

不同数据库在报错注入时返回的报错信息具有显著差异&#xff0c;了解这些差异可以帮助快速判断数据库类型并构造针对性的注入攻击语句。以下是主流数据库的典型报错模式及对比&#xff1a; ​ 目录 ​​ 1. MySQL​​ ​​2. Microsoft SQL Server​​ ​​3. Oracle​​ …...

tcpdump`是一个非常强大的命令行工具,用于在网络上捕获并分析数据包

通过 tcpdump&#xff0c;你可以抓取网络流量&#xff0c;诊断网络问题&#xff0c;或分析通信协议的细节。下面是如何在 Linux 上使用 tcpdump 进行抓包的详细步骤。 1. 安装 tcpdump 在大多数 Linux 发行版中&#xff0c;tcpdump 是默认安装的。如果没有安装&#xff0c;可…...

【漏洞复现】Vite 任意文件读取漏洞 CVE-2025-30208/CVE-2025-31125/CVE-2025-31486/CVE-2025-32395

Vite是什么&#xff0c;和Next.js有什么区别&#xff1f; 我上一篇文章刚介绍了Next.js漏洞的复现&#xff1a; 【漏洞复现】Next.js中间件权限绕过漏洞 CVE-2025-29927_next.js 中间件权限绕过漏洞-CSDN博客 Vite 和 Next.js 是两个不同类型的前端工具&#xff0c;它们各自…...

Odrive源码分析(六) 相关控制变量传递

本文记录下odrive源代码中相关控制模块之间变量的传递&#xff0c;这对理解odrive源代码至关重要。 通过前面文字的分析&#xff0c;odrive有两条数据链路&#xff0c;一条是通过中断进行实时的控制&#xff0c;另外一条是OS相关的操作&#xff0c;主要分析下中断内部的相关变量…...

ARM架构FFmpeg极致优化交叉编译指南

ARM架构FFmpeg极致优化交叉编译指南 一、工具链科学配置 使用最新的ARM官方工具链(Linaro或ARM GNU Toolchain) 确保工具链支持目标平台特定指令集(如NEON, VFP等) 设置正确的–sysroot和–prefix参数 1. 工具链选择原则 # 32位ARM (推荐) wget https://developer.arm.com/…...

zk源码—7.ZAB协议和数据存储一

大纲 1.两阶段提交Two-Phase Commit(2PC) 2.三阶段提交Three-Phase Commit(3PC) 3.ZAB协议算法 4.ZAB协议与Paxos算法 5.zk的数据存储原理之内存数据 6.zk的数据存储原理之事务日志 7.zk的数据存储原理之数据快照 8.zk的数据存储原理之数据初始化和数据同步流程 1.两阶…...

2025蓝桥杯C++A组省赛 题解

昨天打完蓝桥杯本来想写个 p y t h o n python python A A A 组的题解&#xff0c;结果被队友截胡了。今天上课把 C A CA CA 组的题看了&#xff0c;感觉挺简单的&#xff0c;所以来水一篇题解。 这场 B B B 是一个爆搜&#xff0c; C C C 利用取余的性质比较好写&#…...

用哪个机器学习模型 依靠极少量即时静态数据来训练ai预测足球赛的结果?

目录 一、模型推荐 1.集成树模型&#xff08;XGBoost/CatBoost&#xff09; 2.逻辑回归&#xff08;Logistic Regression&#xff09; 3.贝叶斯概率模型&#xff08;Naive Bayes或贝叶斯网络&#xff09; 4.支持向量机&#xff08;SVM&#xff09; 二、模型排除 三、训练…...

讲解贪心算法

贪心算法是一种常用的算法思想&#xff0c;其在解决问题时每一步都做出在当前状态下看起来最优的选择&#xff0c;从而希望最终能够获得全局最优解。C作为一种流行的编程语言&#xff0c;可以很好地应用于贪心算法的实现。下面我们来讲一篇关于C贪心算法的文章。 目录 贪心算法…...

0基础 | 电动汽车的“电源翻译官” | DC/DC转换器 | 电源系统三

你有没有想过&#xff0c;电动汽车里那么多五花八门的电子设备&#xff0c;比如车灯、仪表盘、摄像头&#xff0c;甚至连控制马达的“大脑”&#xff08;ECU&#xff09;&#xff0c;是怎么用上电的&#xff1f;今天就来聊聊电动车里一个默默工作的“小功臣”——DC/DC转换器&a…...

zynq7020 u-boot 速通

zynq u-boot 速通 简介 上回最小系统已经跑起来,证明串口和 ddr 正确配置.现在我们需要正确配置 网口, qspi, emmc. 网口:通过 tftp 下载 dtb,image,rootfs 在线调试.qspi:固化 boot.bin 到 qspi flash,这样 qspi 启动就可以直接运行 u-boot.emmc:存放 ubuntu_base 跟文件系统…...

C++学习之路,从0到精通的征途:string类的模拟实现

目录 一.string类的成员变量与成员函数 二.string类的接口实现 1.构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;赋值重载 &#xff08;1&#xff09;构造函数 &#xff08;2&#xff09;析构函数 &#xff08;3&#xff09;拷贝构造函数 &…...

网页制作中的MVC和MVT

MVC&#xff08;模型-视图-控制器&#xff09;和MVT&#xff08;模型-模板-视图&#xff09;是两种常见的软件架构模式&#xff0c;通常用于Web应用程序的设计。它们之间的主要区别在于各自的组件职责和工作方式。 MVC&#xff08;模型-视图-控制器&#xff09;&#xff1a; 模…...

02 - spring security基于配置文件及内存的账号密码

spring security基于配置的账号密码 文档 00 - spring security框架使用01 - spring security自定义登录页面 yml文件中配置账号密码 spring:security:user:name: adminpassword: 123456yml文件中配置账号密码后&#xff0c;控制台将不再输出临时密码 基于内存的账号密码 …...

Firebase Studio:开启 AI 驱动的开发新纪元

Firebase Studio&#xff08;前身为 Project IDX&#xff09;的推出&#xff0c;标志着软件开发范式正经历深刻变革。它不仅是一个传统的 IDE&#xff0c;更是一个以 AI 为主导的、代理式 (agentic) 的云端开发环境&#xff0c;专注于全栈 AI 应用&#xff08;包括 API、后端、…...

网络基础2

目录 跨网络传输流程 网络中的地址管理 - 认识 IP 地址 跨网络传输 报文信息的跨网络发送 IP地址的转化 认识端口号 端口号范围划分 源端口号和目的端口号 认识 TCP / UDP协议 理解 socket 网络字节序 socket 编程接口 sockaddr 结构 我们继续来学习网络基础 跨网…...

Maven工具学习使用(十一)——部署项目到仓库

1、使用Maven默认方式 Maven 部署项目时默认使用的上传文件方式是通过 HTTP/HTTPS 协议。要在 Maven 项目中配置部署&#xff0c;您需要在项目的 pom.xml 文件中添加 部分。这个部分定义了如何部署项目的构件&#xff08;如 JAR 文件&#xff09;到仓库。。这个部分定义了如何…...

FPGA 37 ,FPGA千兆以太网设计实战:RGMII接口时序实现全解析( RGMII接口时序设计,RGMII~GMII,GMII~RGMII 接口转换 )

目录 前言 一、设计流程 1.1 需求理解 1.2 模块划分 1.3 测试验证 二、模块分工 2.1 RGMII→GMII&#xff08;接收方向&#xff0c;rgmii_rx 模块&#xff09; 2.2 GMII→RGMII&#xff08;发送方向&#xff0c;rgmii_tx 模块&#xff09; 三、代码实现 3.1 顶层模块 …...

torch.cat和torch.stack的区别

torch.cat 和 torch.stack 是 PyTorch 中用于组合张量的两个常用函数&#xff0c;它们的核心区别在于输入张量的维度和输出张量的维度变化。以下是详细对比&#xff1a; 1. torch.cat (Concatenate) 作用&#xff1a;沿现有维度拼接多个张量&#xff0c;不创建新维度 输入要求…...

索引下推(Index Condition Pushdown, ICP)

概念 索引下推是一种数据库查询优化技术&#xff0c;通过在存储引擎层面应用部分WHERE条件来减少不必要的数据读取。它特别适用于复合索引的情况&#xff0c;因为它可以在索引扫描阶段就排除不符合全部条件的数据行&#xff0c;而不是将所有可能匹配的记录加载到服务器层再进行…...

C++基础精讲-06

文章目录 1. this指针1.1 this指针的概念1.2 this指针的使用 2. 特殊的数据成员2.1 常量数据成员2.2 引用数据成员2.3 静态数据成员2.4 对象成员 3. 特殊的成员函数3.1 静态成员函数3.2 const成员函数3.3 mutable关键字 1. this指针 1.1 this指针的概念 1.c规定&#xff0c;t…...

Django3 - 建站基础

学习开发网站必须了解网站的组成部分、网站类型、运行原理和开发流程。使用Django开发网站必须掌握Django的基本操作&#xff0c;比如创建项目、使用Django的操作指令以及开发过程中的调试方法。 一、网站的定义及组成 网站(Website)是指在因特网上根据一定的规则&#xff0c;…...

UE5蓝图设置界面尺寸大小

UE5蓝图设置界面尺寸大小 Create widget 创建UIadd to Viewport 添加视图get Game User Settings获取游戏用户设置set Screen Resolutions 设置屏幕尺寸大小1920*1080set Fullscreen Mode 设置全屏模式为&#xff1a;窗口化或者全屏Apply Settings 应用设置...

无数字字母RCE

无数字字母RCE&#xff0c;这是一个老生常谈的问题&#xff0c;就是不利用数字和字母构造出webshell&#xff0c;从而能够执行我们的命令。 <?php highlight_file(__FILE__); $code $_GET[code]; if(preg_match("/[A-Za-z0-9]/",$code)){die("hacker!&quo…...

AutoGen参数说明

UserProxyAgent用户 user_proxy = UserProxyAgent配置说明: # 构造参数 def __init__(self,name: str,is_termination_msg: Optional[Callable[[Dict], bool]] = None,max_consecutive_auto_reply: Optional[int] = None,human_input_mode: Literal["ALWAYS", &qu…...

6.2 GitHub API接口设计实战:突破限流+智能缓存实现10K+仓库同步

GitHub Sentinel 定期更新 API 接口设计 关键词:GitHub API 集成、异步爬虫开发、RESTful 接口设计、请求限流策略、数据增量更新 1. 接口架构设计原则 采用 分层隔离架构 实现数据采集与业务逻辑解耦: #mermaid-svg-WihvC78J0F5oGDbs {font-family:"trebuchet ms&quo…...

用java代码如何存取数据库的blob字段

一.业务 在业务中我们被要求将文件或图片等转成 byte[] 或 InputStream存到数据库的Blob类型的字段中. 二.Blob类型介绍 在 MySQL 中&#xff0c;Blob 数据类型用于存储二进制数据。MySQL 提供了四种不同的 Blob 类型&#xff1a; TINYBLOB: 最大存储长度为 255 个字节。BL…...

2025蓝桥杯C++研究生组真题-上海市省赛

2025蓝桥杯C研究生组真题 A&#xff1a;数位倍数&#xff08;5分&#xff09; 问题描述&#xff1a;请问在 1 至 202504&#xff08;含&#xff09;中&#xff0c;有多少个数的各个数位之和是 5 的整数倍。例如&#xff1a;5、19、8025 都是这样的数。 A是填空题&#xff0c…...

原子操作CAS(Compare-And-Swap)和锁

目录 原子操作 优缺点 锁 互斥锁&#xff08;Mutex&#xff09; 自旋锁&#xff08;Spin Lock&#xff09; 原子性 单核单CPU 多核多CPU 存储体系结构 缓存一致性 写传播&#xff08;Write Propagation&#xff09; 事务串行化&#xff08;Transaction Serialization&#…...

Aspose.Words导出word,服务器用内存流处理,不生成磁盘文件

框架集&#xff1a;.NET8 public async Task<IActionResult> ExportPDF(long? id) {var infoawait form_Dahui_ReportDao.GetAsync(id);if (info null){return Content("没找到数据");}//读取word模板string fileTemp Path.Combine(AppContext.BaseDirect…...

攻防世界——Web题ez_curl

目录 Express PHP和Node.js的解析差异 Python代码 这道题最终得不到flag&#xff0c;用了很多师傅的代码也不成功。但还是需要学习 下载的附件&#xff1a; const express require(express);const app express();const port 3000; const flag process.env.flag;app.ge…...

力扣面试150题--螺旋矩阵

Day 20 题目描述 思路 根据题目描述&#xff0c;我们需要顺时针输出矩阵元素&#xff0c;顺时针说明有四种输出状态&#xff0c;横向从左到右和从右到左&#xff0c;纵向从上到下和从下到上&#xff0c;唯一的难点在于&#xff0c;输出完成一层后&#xff0c;如何进入内层&am…...

智能指针之设计模式2

前面介绍了工厂模式控制了智能指针和资源对象的创建过程&#xff0c;现在介绍一下智能指针是如何利用代理模式来实现“类指针&#xff08;like-pointer&#xff09;”的功能&#xff0c;并控制资源对象的销毁过程的。 2、代理模式 代理模式是为其它对象提供一种代理以控制对这…...

【Redis】redis持久化

Redis 持久化 Redis&#xff1a;非关系型的内存数据库 持久化&#xff1a;将数据永久写入磁盘&#xff08;内存→磁盘&#xff09; Redis 默认开启了持久化&#xff0c;默认模式为 RDB 为什么需要持久化&#xff1f; Redis 是内存数据库&#xff0c;宕机或关机后数据会丢失。…...