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

elasticsearch底层模块解析与实践系列

#作者:猎人

文章目录

  • 底层模块深入解析之threadpool
    • 1、线程池
    • 2、线程池类型
    • 3、cpu core数量设置
  • 底层模块深入解析之plugin
  • 底层模块深入解析之es node节点角色
    • 1、node类型
    • 2、master eligible node
    • 3、data node
    • 4、ingest node
    • 5、cooridnating only node
    • 6、node data path设置
    • 7、水平扩展的痛点:

底层模块深入解析之threadpool

threadpool module,每个es节点内部多有很多个thread pool,不同的thread pool会处理不同的请求,thread pool module是用来对各种各样的thread pool进行管理的。
每种thread pool都是绑定了一个queue的,因为thread pool的大小有限,比如一个thread pool内部是10个线程,那么此时如果10个线程都被耗尽了,在执行某项任务,此时新的请求要这个thread pool中的线程来处理,默认情况下没有线程处理了,可能就会报错。
但是es的thread pool绑定了一个内存中的队列queue,如果thread pool满了之后,请求可以进这个queue里面来排队,等待线程池出现空的线程来处理queue中的请求,这样就提供了一个buffer。

1、线程池

每个节点都有多个thread pool,这样可以提升多线程处理的能力,这些线程池大多数都有一个对应的queue与其绑定,可以允许线程池满的时候,让pending的请求在队列里排队,而不是将pending请求抛弃掉。

generic thread pool:应付一些普通的操作,比如后台的node discovery,thread pool类型是scaling

index thread pool:用于进行index和delete操作,是fixed类型,大小为cpu core数量,queue大小是200,这个线程池的最大大小是cpu core数量 + 1。

search thread pool:用于search操作,是fixed类型,大小是cpu core数量 * 3 / 2 + 1,queue大小是1000。

get thread pool:用于get操作,是fixed类型,大小是cpu core数量,队列大小是1000。

bulk thread pool:用于bulk操作,是fixed类型,大小是cpu core数量,queue大小是200,最大的线程池大小是cpu core数量 + 1。

snapshot thread pool:用于snapshot/restore操作,是scaling类型,每个线程存活时间为5m,最大数量是min(5, cpu core数量 / 2)。

refresh thread pool:用于refresh操作,是scaling类型,存活时间为5m,最大数量是min(10, cpu core数量 / 2)。

用下面的方式来修改thread pool:
新鲜案例,在实际的项目中,碰到一个case,就是执行bulk操作的时候,说线程池不够了,建议增加queue的数量,bulk thread pool,做一下设置。

在elasticsearch.yml配置文件中,按照下面的格式来进行配置
thread_pool:
bulk:
size: 16
queue_size: 1000

2、线程池类型

fixed类型线程池:线程数量是固定的,同时绑定一个queue用于存放pending request。

scaling类型:这种线程池数量是可变的,根据负载来变化,最小是cpu core数量,最大是其公式定义,keep_alive参数可以控制其线程空闲多长时间被释放。
thread_pool:
refresh:
core: 1
max: 8
keep_alive: 2m

3、cpu core数量设置

在elasticsearch.yml配置文件中去设置
processors: 2

通过上面的参数可以显示设置cpu core数量,意义有下面3点:
(1)如果在一台机器上运行了多个es节点,但是可能只想要让每个es节点使用部分cpu core,而不是物理机上的所有cpu core,就可以手动设置。比如一台物理机,上面的cpu core是16个,运行了两个es节点,此时就可以手动设置processors是8,就是让每个es节点仅仅使用8个cpu core。

(2)默认cpu core的数量最大限制为32个,如果物理机超过了32个cpu core,可手动设置。比如物理机的cpu core是64个,但是es会去使用的cpu core可能是32个,最大限制,此时就是要手动设置processors是64。

(3)有时候可能会捕获到错误的cpu core数量,此时需要手动设置。

底层模块深入解析之plugin

plugin module,主要就是用来负责这个插件的管理,安装插件,查看插件,删除插件,更新插件。在elasticsearch的新版中,演示过了,插件应该怎么玩儿,hdfs repository的一个插件,怎么安装。

安装plugin:elasticsearch-plugin install [plugin_name]
通过url安装plugin:elasticsearch-plugin install [url]

如果机器不能直接连外网,需要将plugin插件下载下来一个包,在本地离线安装这个插件。通过本地包离线安装plugin:elasticsearch-plugin install file:///path/to/plugin.zip

查看plugin list:elasticsearch-plugin list

删除plugin:elasticsearch-plugin remove [pluginname],如果删除了一个plugin,必须重启节点才能生效。

升级/更新plugin:先删除,再安装,然后重启节点。

如果现在升级es节点的版本,就需要对应着升级plugin,自动装的就是最新版的了,装好后需要重启es node才能生效
es jdbc,es spring data,es sql

底层模块深入解析之es node节点角色

node module,主要是用来处理各种不同类型的节点的,es有哪些类型的node,另外就是对这些类型的node有些什么特殊的参数,对于一个较大的集群来说,如何去规划和配置各种各样的node。
一个节点在默认情况会下同时扮演: master eligible,data node 和 ingest node

单一角色: 职责分离的好处
1、Dedicated master eligible nodes:负责集群状态(cluster state)的管理。使用低配置的 CPU,RAM 和磁盘
2、Dedicated data nodes: 负责数据存储及处理客户端请求。使用高配置的 CPU,RAM 和磁盘
3、Dedicated ingest nodes: 负责数据处理。低配置的磁盘 使用高配置 CPU; 中等配置的RAM;

Dedicate Coordinating Only Node (Client Node)

  1. 配置:将 Master,Data,Ingest 都配置成 False
    Medium/High CUP; Medium/High RAM; Low Disk
  2. 生产环境中,建议为一些大的集群配置 Coordinating Only Nodes
    扮演 Load Balancers。降低 Master 和 Data Nodes 的负载
    负责搜索结果的 Gather/Reduce
    有时候无法预知客户端会发送怎么样的请求。大量占用内存的结会提作,一个深度聚会可能会引发 OOM

Dedicate Master Node:

  1. 从高可用 & 避免脑裂的角度出发
    一般在生产环境中配置3台
    一个集群只有1台活跃的主节点。负责分片管理,索引创建,集群管理等操作
  2. 如果和数据节点或者 Coordinate 节点混合部署
    数据节点相对有比较大的内存占用
    Coordinate 节点有时候可能会有开销很高的查询,导致 OOM
    这些都有可能影响 Master 节点,导致集群的不稳定

1、node类型

一个es实例就是一个es node,一些es node就可以组成一个es集群。如果仅仅运行了一个es node,那么也有一个es集群,只是节点数量就是1。集群中的每个node都可以处理http和transport请求,其中transport层是用来处理节点间的通信的,http层是用来处理外部的客户端rest请求的。所有的node都知道集群中的其他node,并且可以将客户端的请求转发到适当的节点上去。

节点的类型包含以下几种:
(1)master-eligible node:即master候选节点,将node.master设置为true(默认就是),一个节点启动后默认就是master-eligible node节点,代表这个node就是master的候选节点,有机会可以被选举为master node,然后控制整个集群。当集群内第一个 Master eligible 节点启动时候,它会将自己选举成 Master 节点。

(2)data node:将node.data设置为true(默认就是),一个节点启动后默认就是data节点,data node可以存储分片数据,同时处理这些数据相关的操作,比如CRUD操作,搜索操作,聚合操作,等等。可以增加数据节点,解决数据水平扩展问题。

(3)ingest node:将node.ingest设置为true(默认),ingest node是用来对document写入索引文件之前进行预处理的。可以对每个document都执行一条ingest pipeline,在document写入索引文件之前,先对其数据进行处理和转化。但是如果要执行的ingest操作太过繁重,那么可以规划单独的一批ingest node出来,然后将node.master和node.data都设置为false即可。

(4)tribe node:tribe node可以通过tribe.*相关参数来设置,它是一种特殊的coordinate node,可以连接到多个es集群上去,然后对多个集群执行搜索等操作。

(5)默认情况下,每个node的node.master,node.data,node.ingest都是true,都是master候选节点,也可以作为data node存储和操作数据,同时也可以作为ingest node对数据进行预处理。对于小于20个节点的小集群来说没问题。但是如果对于大于20个物理机的集群来说,最好是单独规划出master node、data node和ingest node来。

(6)coordinate node 处理请求节点
设置方法:通过将其他类型设置成 False,使其成为 Dedicated Coordinating Node
搜索和bulk等请求可能会涉及到多个节点上的不同shard里的数据,比如一个search请求,就需要两个阶段执行,首先第一个阶段就是一个coordinating node接收到这个客户端的search request。接着,coordinating node会将这个请求转发给存储相关数据的node,每个data node都会在自己本地执行这个请求操作,同时返回结果给coordinating node,接着coordinating node会将返回过来的所有的请求结果进行缩减和合并,合并为一个global结果。
每个node默认都是一个coordinating node。这就意味着如果一个node,将node.master,node.data,node.ingest全部设置为false,那么它就是一个纯粹的coordinating node,仅仅用于接收客户端的请求,同时进行请求的转发和合并。负责路由请求到正确的节点,例如创建索引的请求,需要路由到 Master节点。
如果生产是大集群,最好是单独规划一批node,作为coordinating node,然后让es client全部往这些node上去发送请求。
如果是一个大于20个节点的生产集群,建议将4种node,master node,data node,ingest node,cooridating node,全部分离开来。

集群中有30台机器规划:
master node:3个
ingest node:视具体情况而定,具体取决于ingest预处理操作有多么的复杂,耗费多少资源,但是一般情况下来说,es ingest node用的比较少的,ingest node也可以不用单独规划一批出来。
coordinate node:视具体情况而定,但是对于大集群来说,最好是单独拆几个节点出来,用于接收客户端的请求,3个节点。生产并发访问量很重要,比如集群最大的QPS是10,或者是100,那么3个节点足够。如果QPS是1000,或者是10000,就要规划10个coordinate node,或者100个。

data node:24个data node,data node会是分配的是最多的,主要用来存储数据,执行各种对数据的操作么,资源耗费也是最多。

2、master eligible node

(1)master-eligible node的介绍以及配置
master node负责轻量级的集群管理工作,比如处理创建和删除索引等请求。追踪集群中的每个node,决定如何将shards分配给各个node或哪个node上。维护并更新cluster state等功能。对于集群来说,有一个稳定的master node,是非常关键的。然后master-eligible node都有机会被选举为一个master node,同时master node必须有权限访问path.data指定的data目录,因为master node需要在data目录中存储cluster state。
对数据进行index和search操作,会耗费大量的cpu,内存,磁盘io,以及网络io,耗费的是每个node的资源。因此必须要确保master node非常稳定,压力不大,对于大集群来说,比较好的办法是划分出单独的master node和data node。如果不拆开,一个node又要是data node,要复杂存储数据,处理各种操作,同时又要负责管理集群,可能就会不稳定,出问题。
同时因为默认情况下,master node也能扮演coordinating node的角色,并且将search和index请求路由到对应的data node上去执行,最好是不要让master node来执行这些coordinate操作。因为msater node的稳定运行对于整个集群来说非常重要,相比利用master node资源来执行一些coordinate操作要重要的多。

Master Eligible Nodes & 选主的过程:
互相 Ping 对方,Node ld 低的会成为被选举的节点。其他节点会加入集群,但是不承担 Master 节点的角色。一旦发现被选中的主节点丢失就会选举出新的 Master 节点。

集群状态:
1、集群状态信息 (Cluster State) ,维护了一个集群中,必要的信息。如所有的节点信息、所有的索引和其相关的 Mapping 与 Setting 信息、分片的路由信息
2、在每个节点上都保存了集群的状态信息
3、但是,只有 Master 节点才能修改集群的状态信息,并负责同步给其他节点。因为,任意节点都能修改信息会导致 Cluster State 信息的不一致。

如果要设置一个node为专门的master-eligible node,需要做如下的设置:
必须考虑master单点问题,可设多节点,一个挂了,确保有其他候选节点
node.master: true
node.data: false
node.ingest: false

(2)通过minimum_master_nodes来避免脑裂问题
Split-Brain,分布式系统的经典网络问题,当出现网络问题,一个节点和其他节点无法连接。
要预防数据的丢失,就必须设置discovery.zen.minimum_master_nodes参数为一个合理的值,这样的话,每个master-eligible node才知道至少需要多少个master-eligible node才能组成一个集群。
例如有一个集群,其中包含两个master-eligible nodes。然后一个网络发生了故障,这两个节点之间丢失了联络。每个节点都认为当前只有一个master-eligible node,就是它们自己。此时如果discovery.zen.minimum_master_nodes参数的默认值是1,那么每个node就可以让自己组成一个集群,选举自己为master node即可。结果就会导致出现了两个es集群,这就是脑裂现象。即使网络故障解决了,但是这两个master node是不可能重新组成一个集群。除非某个master eligible node重启,然后自动加入另外一个集群,但是此时写入这个节点的数据就会彻底丢失。
如果有3个master-eligible node,同时将discovery.zen.minimum_master_nodes设置为2.如果网络故障发生了,此时一个网络分区有1个node,另外一个网络分区有2个node,只有一个node的那个网络分区,没法检测到足够数量的master-eligible node,那么此时它就不能选举一个master node出来组成一个新集群。但是有两个node的那个网络分区,它们会发现这里有足够数量的master-eligible node,那么就选举出一个新的master,然后组成一个集群。当网络故障解除之后,那个落单的node就会重新加入集群中。

discovery.zen.minimum_master_nodes,必须设置为master-eligible nodes的quorum,quorum的公式为:(master_eligible_nodes / 2) + 1。

换句话来说,如果有3个master-eligible nodes,那么那个参数就必须设置为(3 / 2) + 1 = 2,比如下面这样:
discovery.zen.minimum_master_nodes: 2

随着集群节点的上线和下限,这个参数都是要重新设置的,可以通过api来设置

PUT _cluster/settings
{"transient": {"discovery.zen.minimum_master_nodes": 2}
}

此时将master node和data node分离的好处就出来了,一般如果单独规划一个master nodes的话,只要规划固定的3个node是master-eligible node就可以了,那么data node无论上线和下限多少个,都无所谓的。

3、data node

data node负责存储shard的数据,也就是那些document。data node可以处理各种操作,比如CRUD,搜索,聚合。这些操作全都是很耗费IO,内存和cpu资源的。因此监控这些资源的使用是很重要的,同时如果资源过载了,那么就要添加更多的data node。

如果要设置一个专门的data node,需要做出如下的设置:
node.master: false
node.data: true
node.ingest: false

4、ingest node

Ingest node可以执行预处理pipeline,包含了多个ingest processors。不同的ingest processor执行的操作类型是不同的,那么对资源的需求也是不同的,不过还是最好是规划一批单独的ingest node出来,不要跟master node和data node混合在一起。

如果要配置一个单独的ingest node:
node.master: false
node.data: false
node.ingest: true
search.remote.connect: false

5、cooridnating only node

如果我们规划了一批专门的master node,data node以及ingest node,那么此时还遗留下来了一种node,那就是coordinating node,这些node专门用来接收客户端的请求,同时对请求进行路由和转发,并对请求的结果进行合并。
coordinating only nodes对于大集群来说,可以使用专门的node来负载coordinate操作,而不是让coordinate操作的工作负载集中到master node和data node上去。coordinating node也会加入cluster,同时可以获取到完整的cluster state,它们主要是用cluster state中包含的node info来进行请求转发。
如果在一个集群中规划太多的coordinating node可能会加重整个集群的负担,因为被选举出来的master node必须要从所有的node上得到cluster state update的ack,如果coordinating nodes过多,那么可能会加重master node的负担。

如果要设置coordinating only node的话:
node.master: false
node.data: false
node.ingest: false
search.remote.connect: false

6、node data path设置

(1)path.data
每个data和master-eligible node都需要能够访问data目录,在那里存储了每个shard的数据,包括cluster state也存储在那里。path.data默认是指向$ES_HOME/data目录的,但是在生产环境中,肯定是不能这样设置的,因为在升级es的时候,可能会导致数据被清空或者覆盖。

此时一般需要在elasticsearch.yml中设置path.data:
path.data: /var/elasticsearch/data

(2)node.max_local_storage_nodes
data目录可以被多个node共享,即使是不同集群中的es node,也许他们在一个物理机上启动了。这个共享的方式对于测试failover很有意义,以及在开发机上测试不同的配置。但是在生产环境下,绝对不用这么做,一个data目录就给一个es node使用即可。默认情况下,es被配置成阻止超过一个node共享data目录中的数据,如果要允许多个node共享一个data目录,需要设置node.max_local_storage_nodes为一个超过1的数字。

7、水平扩展的痛点:

单集群一当水平扩展时,节点数不能无限增加。当集群的 meta 信息(节点,索引,集群状态)过多,会导致更新压力变大,单个 Active Master 会成为性能瓶颈,导致整个集群无法正常工作。
早期版本,通过 Tribe Node 可以实现多集群访问的需求,但是还存在一定的问题。Tribe Node 会以 Client Node 的方式加入每个集群。集群中 Master 节点的任务变更需要 Tribe Node 的回应才能继续。Tribe Node 不保存 Cluster State 信息,一旦重启,初始化很慢。当多个集群存在索引重名的情况时,只能设置一种 Prefer 规则。

相关文章:

elasticsearch底层模块解析与实践系列

#作者:猎人 文章目录 底层模块深入解析之threadpool1、线程池2、线程池类型3、cpu core数量设置 底层模块深入解析之plugin底层模块深入解析之es node节点角色1、node类型2、master eligible node3、data node4、ingest node5、cooridnating only node6、node data…...

Git-基本操作

前言 安装 git --version sudo apt-get remove git -y #卸载 sudo apt-get install git -y基本操作 创建本地仓库 mkdir gitcodegit init 这个就可以创建本地仓库了 然后当前目录下就有一个.git的文件夹 配置本地仓库 就是配置用户的名称,和用户的email地址 在…...

iVX 图形化编程如何改写后端开发新范式

在数字化转型加速推进的当下,企业对后端系统的需求呈现爆发式增长。Gartner 最新报告指出,2025 年全球企业平均需完成 300 定制化应用开发,而传统编码模式下,单个项目平均交付周期长达 6 - 8 个月。与此同时,Redis、K…...

【数据可视化-42】杂货库存数据集可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

使用 Electron 打包 Windows 可执行程序

使用 Electron 打包 Windows 可执行程序 在使用 Electron 构建桌面应用程序时,通常需要将项目打包为可执行文件(例如 .exe 文件),以便用户可以方便地安装和运行。本文将介绍如何使用 electron-builder 将 Electron 项目打包成 Wi…...

爬虫学习笔记(三)--Http协议

思维导图 上面思维导图提取的原文是2026王道计网P286~290 URL最前面(URL传输过程中遵循HTTP协议) 协议 计算机传输的数据实际上就是二进制0和1,协议就是规定这一串二进制数字的前几位代表什么、中间几位代表什么、后几位代表什么 HTTP&a…...

ai环境cuda cudnn conda torch整体迁移 wsl docker

运行没问题的环境,wsl先关停wsl --shutdown 然后导出复制到迁移机器上wsl --export U24 E:\wsl\u24.tar 使用wsl版挂成虚拟机wsl --import U24 E:\wsl\ubuntu E:\wsl\u24.tar 使用docker版挂成镜像docker import E:\wsl\u24.tar my-ubuntu:custom 启动docker容器&am…...

数据库小技巧-使用开窗函数矫正数据库指定列部分列值重复的数据

需求描述 目前有某表的某列部分值重复,需要批量矫正该列数据,确保该列分组内不会出现重复值。 解决思路 -- 创建个临时表 create table t_tmp_20250428( c_bh varchar(32), -- 主键 c_bh_aj varchar(32), -- 主表外键,分组条件&#xff0c…...

【优选算法 | 二分查找】二分查找算法解析:如何通过二段性优化搜索效率

算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口 在本篇文章中,我们将深入解析二分查找算法的核心原理。从基本概念到实际应用,带你了解如何利用二分查找高效定位元素,提升搜索效率。无论你是刚接触算法的新手…...

AI与IT协同的典型案例

简介 本篇代码示例展示了IT从业者如何与AI协同工作,发挥各自优势。这些案例均来自2025年的最新企业实践,涵盖了不同IT岗位的应用场景。 一、GitHub Copilot生成代码框架 开发工程师AI协作示例:利用GitHub Copilot生成代码框架,…...

5.软考高项(信息系统项目管理师)-成本管理

成本管理非常重要,选择、计算考得非常多,必须要好好学。 过程、输入、工具及输出 过程名(附作用) 通俗解释 输入 工具和技术 输出 规划成本管理 为如何管理项目成本提供指南和方向 编制成本管理计划,这个计划主…...

前端:纯HTML、CSS和JS菜单样式

实现了一个多级折叠菜单系统,使用纯HTML、CSS和JavaScript(无任何框架) 一、二级菜单展开 1、实现效果 初始状态-展示全部一级菜单 选中共状态,一级标题选中共为蓝色背景色,二级标题选中共为蓝色文字,展开右侧图标为-,后缩状态右侧图标为+ 2、实现 ​​HTML结构​​ …...

案例篇:如何用tcpdump和Wireshark识别潜在威胁

无论是日常浏览网页、观看视频,还是企业开展线上业务、进行数据传输,都离不开网络的支持。然而,网络问题也时有发生,比如网络卡顿,相信大家都遇到过,那种等待页面加载的焦急心情,真的让人抓狂。…...

微信小程序开发中关于首屏加载、本地数据持久化的思考

本文将围绕小程序开发中首屏性能优化与本地存储持久化两大重要主题展开,结合实际项目经验,系统分析常见问题、优化方法与最佳实践,构建流畅且高效的小程序体验。 文章目录 前言一、什么是首屏加载?为什么重要?二、小程…...

媒资管理之视频管理

一:业务概述: 媒资管理这个模块是我负责开发的,主要的管理对象是视频,图片,文档等 包括文件的上传,视频的处理,文件的删除 (在媒资管理界面,有个上传视频的按钮&#…...

windows程序转鲲鹏服务器踩坑记【持续更新中】

1.鲲鹏处理器和Intel处理器的区别 处理器/对比项IntelKunpeng厂家因特尔(美国)华为(中国)指令集X86架构ARM-V8架构与指令集- x86 CISC复杂指令集 - 单核性能强(如至强8380主频3.8GHz) - 三级缓存优化,支持DDR4-3200和Optane内存- ARMv8-A RI…...

【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界

习题集: 【单选题】在构建Agent系统时,使用Assistant API创建Agent时,若想让Agent具备查询员工信息和发送请假申请的功能,以下对instructions参数设置最合理的是( ) A. “你可以做任何事情” B. “你能查询员工信息和发送请假申请” C. “你是公司助手,功能有:1.查询员…...

程序进程多任务线程

1.程序 程序(program)是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 2.进程 进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。进程是操作系统资源分配和处理器调度的基本单位,拥有独立的代码、内部数…...

Finish技术生态计划: FinishRpc

finishRpc 简介 ​ 纯个人兴趣设计的项目: 因为失业在家摆烂 所以没事就想写点代码 本身也比较喜欢自己写一些好玩的demo 这个项目的设计完全是取悦自己又菜又有一个创造框架的梦想 可以用于提升框架设计思路以及实践一些常用技术的练习 可以用于校园中的练习 , 如果能对你有所…...

《商业世界的开源法则:协议选择与商业模式创新》

引言 在当今数字化时代,开源软件已成为技术生态系统中不可或缺的一部分。从Linux操作系统到Apache Web服务器,从MySQL数据库到React前端框架,开源项目支撑着全球大部分互联网基础设施和企业IT系统。然而,关于开源协议与商业使用之…...

Kubernetes》》k8s》》explain查 yaml 参数

在创建json 和yaml 时,我们可能不知道具体的参数该怎么写。同样 我们可以通过explain这个 命令来查看 每个参数具体的作用与写法 # 查看 pod类性有哪些参数 kubectl explain pod# 查看pod中 spec下面有哪些参数 kubectl explain pod.spec...

Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master

前文已经使用docker安装了kubeadm&#xff0c;因此本文使用kubeadm部署master节点。 一.先拉取必要的镜像库到本地。 在拉取之前&#xff0c;先配下镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&qu…...

《数据结构之美--二叉树》

一&#xff1a;引言&#xff1a; 上次我们学习了栈和队列这两个数据结构&#xff0c;今天我们来学习一个新的数据结构–二叉树中的堆。 堆其实就是一种特殊的二叉树&#xff0c;具有二叉树的性质的同时&#xff0c;还具有其他的性质。 那么在学习堆之前还是先来了解一下树。 …...

Prompt Engineering 提示工程:释放大语言模型潜力的关键技术与实践指南

提示工程:释放大语言模型潜力的关键技术与实践指南 提示工程(Prompt Engineering)作为与大型语言模型(LLM)交互的核心技术,已成为AI应用开发的关键技能。本文将系统介绍提示工程的定义与发展历程,深入剖析其核心知识点,提供实用的设计框架与技巧,并通过丰富的实战案例展示…...

std::print 和 std::println

一、基本概念 std::print 和 std::println 是 C23 新增的格式化输出函数&#xff0c;旨在替代传统的 std::cout 链式调用。它们基于 std::format 实现&#xff0c;支持类型安全的格式化字符串&#xff0c;语法更简洁&#xff0c;性能更优15。 功能特点&#xff1a; 直接输出到…...

高压直流输电MATLAB/simulink仿真模型+说明文档

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2018Ra&#xff09;软件。建议采用matlab2018 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 使用一个传输功率为1000MW&#xff08;500 kV&#xff0c;2 kA&#xff09;直流互连…...

第十四章-PHP与HTTP协议

第十四章-PHP与HTTP协议 一&#xff0c;HTTP 协议详解 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的协议之一&#xff0c;用于客户端&#xff08;如浏览器&#xff09;与服务器之间的通信。它是 Web 技术的基石…...

【阿里云大模型高级工程师ACP学习笔记】2.6.用插件扩展答疑机器人的能力边界

一、学习目标 备考阿里云大模型高级工程师ACP认证,深入学习《2.6.用插件扩展答疑机器人的能力边界》这部分内容,主要期望达成以下目标: 理解智能体应用核心概念:理解智能体(Agent)应用的核心概念,包括其如何拓展大模型能力,突破传统答疑机器人局限。掌握构建Agent系统…...

用远程代理模式轻松实现远程服务调用,打开编程新大门

通过远程代理来实现一个简易的远程过程调用实例。带你打开新的大门。 Socket 远程代理服务案例 基于 Socket 的远程服务&#xff0c;我们需要完成以下步骤&#xff1a; 服务端实现&#xff1a;创建一个远程服务&#xff0c;通过 Socket 接受客户端请求并提供计算服务。 客户端…...

(001)Excel 快捷键

文章目录 时间 时间 当前日期&#xff1a;ctrl ; (分号)。当前时间&#xff1a;ctrl Shift ; (分号)。...

TMI投稿指南(二):投稿文章注意事项

文章结构&#xff1a; https://journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/create-the-text-of-your-article/structure-your-article/ 补充材料&#xff1a;准备补充材料 - IEEE 作者中心期刊 --- Prepare Supplementary Materials - IEEE Author…...

从困局到破局的AI+数据分析

从困局到破局的AI数据分析 困局&#xff1a;数据分析的四道高墙破局&#xff1a;AI赋能全流程数据分析远见&#xff1a;AI数据分析的革命性意义 数据是新时代的石油&#xff0c;人工智能是炼油厂。当两者强强联合&#xff0c;一场数据分析的革命正悄然发生。 多少次你面对Excel…...

12. RANSAC点云多平面拟合分割

本文看了博客RANSAC点云多平面拟合分割-CSDN博客的文章&#xff0c;该博客将多平面拟合分割讲的很详细了&#xff0c;这里只是作为笔记用。 1.RANSAC算法原理 三维平面拟合&#xff08;最小二乘法&#xff09; 具体实现见下面代码&#xff1a; def SVD(points):# 二维&#…...

Prompt

提示工程指南 | Prompt Engineering GuideGoogle 官方提示工程 (Prompt Engineering)白皮书 | 宝玉的分享https://www.geeksforgeeks.org/what-is-prompt-engineering-the-ai-revolution/Prompt Engineering for Reasoning ModelsPrompt Engineering with Reasoning Models 1.p…...

[特殊字符] SpringCloud项目中使用OpenFeign进行微服务远程调用详解(含连接池与日志配置)

&#x1f4da; 目录 为什么要用OpenFeign&#xff1f; 在cart-service中整合OpenFeign 2.1 引入依赖 2.2 启用OpenFeign 2.3 编写Feign客户端 2.4 调用Feign接口 开启连接池&#xff0c;优化Feign性能 3.1 引入OkHttp 3.2 配置启用OkHttp连接池 3.3 验证连接池生效 Feign最佳…...

迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎

4月28日&#xff0c;迈瑞医疗&#xff08;300760.SZ&#xff09;发布2024年年度报告。报告期内&#xff0c;公司实现营业收入367.26亿元&#xff0c;同比增长5.14%&#xff1b;实现归母净利润116.68亿元&#xff0c;同比增长0.74%&#xff1b;经营活动产生的现金流量净额124.25…...

「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起

温馨提示&#xff1a;运营团队2025年最新原创报告&#xff08;共210页&#xff09; —— 正文&#xff1a; 近日&#xff0c;国内智驾芯片上市公司[地平线]创始人兼CEO余凯&#xff08;先生&#xff09;接受腾讯新闻访谈时&#xff0c;提到如今大火的人形机器人&#xff0c;核…...

R 语言科研绘图第 43 期 --- 桑基图-冲击

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…...

SpringBoot应用原生或docker镜像容器集成Skywalking

相关组件及版本 序号 组件 版本 备注 1 skywalking-oap-server 8.9.1 2 elasticsearch 7.17.6 3 skywalking-ui 8.9.1 4 apache-skywalking-java-agent 8.15.0 一、JAR包方式部署服务 下载apache-skywalking-java-agent jar文件 使用如下名称执行 java \ -j…...

模板--进阶

1. 非类型模板参数 模板解决了两类问题 1控制数据类型 2控制某种设计逻辑 类域可以直接访问什么&#xff1f; 1static修饰的静态成员变量 2typedef定义的内嵌类型 3 内部类 下面我们就要引出一个模板的知识点----------再用类模板的时候从类模板里面去取东西的时候 要…...

PostgreSQL无法查看表中数据问题排查

在 PostgreSQL 中&#xff0c;恢复数据库后&#xff0c;使用 DBeaver 等工具可以看到数据库和表名&#xff0c;但无法查询到表中数据&#xff0c;可能是以下原因之一。以下是可能的原因和解决方法&#xff1a; 1. 恢复未完全成功 原因&#xff1a;数据库恢复过程中可能未完全成…...

实验研究 | 千眼狼高速摄像机驱动精密制造创新

研究背景 小模数齿轮作为精密制造领域的核心组件&#xff0c;以“结构紧凑、重量轻、精度高”等优势&#xff0c;广泛应用于航空航天、工业机器人、精密仪器、医疗设备、新能源和微电机等领域。传统抛光技术效率低、成本高、表面质量不足&#xff0c;电解等离子体抛光技术&am…...

AWS虚拟专用网络全解析:从基础到高级实践

导语 AWS虚拟专用网络是连接企业本地数据中心与AWS云环境的关键桥梁。本文将深入探讨AWS VPN的核心概念、配置方法、最佳实践以及常见问题解决方案,助您构建安全、可靠的混合云网络架构。 一、AWS VPN概述 1. 定义 AWS VPN是一种网络服务,允许用户通过加密隧道将本地网络…...

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能 北京海特伟业科技有限公司任洪卓发布于2025年4月28日 在数字化转型浪潮下&#xff0c;IP应急广播呼叫对讲广播系统凭借其网络化、智能化、融合化、多元化等优势&#xff0c;已…...

我的HTTP和HTTPS

注释&#xff1a;本文章架构跟随小林coding&#xff0c;在此基础上加深个人理解 小林coding&#xff1a;https://xiaolincoding.com/network/2_http/http_interview.html HTTP基本概念 HTTP是什么&#xff1f; http的中文名是超文本传输协议&#xff0c;超文本就是html&…...

python_股票月数据趋势判断

目录 前置 代码 视频&月数据 前置 1 A股月数据趋势大致判断&#xff0c;做一个粗略的筛选 2 逻辑&#xff1a; 1&#xff09;取最近一次历史最高点 2&#xff09;以1&#xff09;中最高点为分界点&#xff0c;只看右侧数据&#xff0c;取最近一次最低点 3&#xf…...

计算机考研精炼 计网

第 19 章 计算机网络体系结构 19.1 基本概念 19.1.1 计算机网络概述 1.计算机网络的定义、组成与功能 计算机网络是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 …...

大数据应用开发和项目实战-Matplotlib

Matplotlib的介绍 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Matplotlib 可以用来绘制各种静态&#xff0c;动态&#xff0c;交互式的图表。比如说散点图、柱状图等等。 Matplotlib的安装与…...

SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南

在数据工程领域&#xff0c;构建和维护数据转换管道是一项复杂而关键的任务。SQLMesh 是一个强大的工具&#xff0c;可以帮助你简化这一过程。本文将带你快速了解如何使用 SQLMesh CLI 来构建和维护数据转换管道。本文的目标是在 30 分钟或更短的时间内&#xff0c;让你熟悉 SQ…...

行政区划代码

本文数据来源&#xff1a;中华人民共和国民政部 在平常数据研究和开发中&#xff0c;经常会用到行政区划代码。而行政区划代码的使用&#xff0c;因年份不同可能也不尽完全相同。故整理了1980年到2024年所有的行政区划代码。 这样不仅仅适用于研究区划代码的变更研究&#xf…...