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

Nginx + Keepalived 高可用集群

一、Nginx+Keepalived 原理

1.1.Nginx 负载均衡机制

Nginx 是一款轻量级且高性能的 Web 服务器和反向代理服务器,在负载均衡方面有着卓越的表现。其具备强大的七层流量管理能力,能够基于 URL、Cookie、HTTP 头信息等对请求进行精准路由。例如,在一个电商网站中,可将以 /product 开头的 URL 请求路由到商品展示服务器组,以 /cart 开头的请求路由到购物车处理服务器组,实现不同业务模块的分离处理,提高系统的可维护性和性能。

Nginx 提供了多种负载均衡算法,常见的有轮询、加权轮询、IP 哈希等。轮询算法会依次将请求分配到后端服务器,保证每个服务器都能均匀地接收请求;加权轮询则可以根据服务器的性能为其分配不同的权重,性能高的服务器分配更多的请求;IP 哈希算法会根据客户端的 IP 地址进行哈希计算,将同一客户端的请求始终分配到同一台后端服务器,适用于需要保持会话状态的场景,如在线游戏。

在健康检查方面,Nginx 支持被动检测和主动检测两种方式。被动检测是指当与后端服务器的连接失败时,会进行重试,达到一定次数后将该服务器标记为不可用;主动检测则可以通过第三方模块实现,定期向后端服务器发送健康检查请求,根据响应结果判断服务器的状态。

1.2.Keepalived 高可用原理

Keepalived 基于 VRRP(虚拟路由器冗余协议)实现高可用性。VRRP 协议允许将多台路由器组成一个虚拟路由器,其中有一个主路由器和多个备份路由器。主路由器承担实际的路由工作,当主路由器出现故障时,备份路由器会根据优先级选举出新的主路由器,从而实现无缝切换。

Keepalived 通过优先级管理来确定主备节点。每个节点都有一个优先级,优先级高的节点成为主节点。Keepalived 会定期对节点进行健康检查,根据检查结果动态调整节点的优先级。例如,当主节点的某个服务出现故障时,其优先级会降低,备份节点的优先级相对较高,就会接管主节点的工作。

VIP(虚拟 IP)漂移是 Keepalived 实现高可用性的关键机制。当主节点发生故障时,Keepalived 会自动将虚拟 IP 地址从主节点转移到备份节点,客户端无需进行任何配置更改,仍然可以通过虚拟 IP 地址访问服务,从而保证了服务的连续性。

1.3.协同工作流程

客户端通过访问虚拟 IP 地址发起请求,请求首先到达 Nginx 主节点。Nginx 根据配置的负载均衡算法将请求分发到后端的 RS(Real Server)主机。同时,Keepalived 会定期对 Nginx 服务进行健康检查,一旦发现 Nginx 服务出现异常,会将异常情况报告给 Keepalived。Keepalived 根据预设的规则,将虚拟 IP 地址从主节点漂移到备节点,备节点上的 Nginx 开始处理客户端的请求,确保服务不中断。

  


二、配置思路与步骤

2.1.环境准备

四台主机(rocky 8):

节点角色IP 地址组件
LVS 主节点192.168.67.110Keepalived + nginx
LVS 备节点192.168.67.120Keepalived + nginx
后端 RS1192.168.67.10HTTPD
后端 RS2192.168.67.20HTTPD
客户端任意 IP浏览器或测试工具

注意:

  • 实验环境所有主机关闭 firewalld 和 SElinux 。

  • 后端 RS 主机不需要配置 VIP 和 ARP 抑制。

2.2.RS 主机配置

2.2.1.配置 Web 服务

作用:安装 Web 服务是为了让后端 RS 服务器能够处理客户端的 HTTP 请求。在实际应用中,后端 RS 服务器通常是提供 Web 服务的服务器,如电商网站的商品展示页面、新闻网站的新闻内容页面等。通过安装 Web 服务,如 Apache 或 Nginx,后端 RS 服务器可以接收并处理客户端的请求,返回相应的网页内容。

(两个 RS 主机都需配置)

yum install httpd -y
echo hostname -I > /var/www/html/index.html
systemctl enable --now httpd

2.3.Nginx + Keepalived 配置

2.3.1.Nginx 配置

配置 Nginx 的目的

Nginx 作为核心负载均衡器,其配置目标是实现:

  1. 流量分发:将客户端请求按规则分配到后端服务器

  2. 健康检查:通过被动检测机制剔除故障节点

  3. 会话保持:确保同一客户端请求定向到同一服务器

安装 Nginx。

yum install nginx -y

编辑 Nginx 子配置文件。

(两台 Keepalived 主机都需配置)

upstream webserver {server 192.168.67.10:80 weight=1;server 192.168.67.20:80 weight=1;
}
​
server{listen 80;server_name www.yunjisuan.com;location / {proxy_pass http://webserver;index index.html;}
}

2.3.2.Keepalived 配置

安装 Keepalived 软件。

yum install keepalived -y

编写 Nginx 健康检查脚本。

配置健康检查脚本的目的

脚本 check_nginx.sh 实现:

  1. 主动服务监控:通过进程文件存在性检测 Nginx 状态

  2. 自动恢复机制:尝试重启故障服务

  3. 状态反馈:返回 0/1 供 Keepalived 判断节点健康状态

具体参数解释:

  • ps:Process Status(进程状态),用于列出当前系统中的进程信息。

  • -C nginx

    • -C 选项用于通过进程名筛选目标进程(区分大小写)。

    • nginx 是 Web 服务器软件的进程名,此处表示仅显示与 nginx 相关的进程。

  • --no-header

    • 隐藏输出结果的列名标题(如 PID、TTY、TIME 等),使输出更简洁。

vim /etc/keepalived/check_nginx.sh
​
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];
thensystemctl restart nginxsleep 3if [ `ps -C --no-header | wc -l` -eq 0 ]thensystemctl stop keepalivedfi      
fi  

该脚本会检查 Nginx 的进程文件是否存在,如果存在则表示 Nginx 服务正常,脚本返回 0;如果不存在,则尝试重启 Nginx 服务,等待 3 秒后再次检查,如果仍然不存在则返回 1,表示检查失败。

设置脚本可执行权限。

chmod +x /etc/keepalived/check_nginx.sh

编写 Keepalived 配置文件。

(两台 Keepalived 主机都需配置)

vim /etc/keepalived/keepalived.conf
​
! Configuration File for keepalived
​
global_defs {notification_email {2373179473@qq.com}notification_email_from keepalived@timinglee.orgsmtp_server 127.0.0.1smtp_connect_timeout 30router_id ka2.timinglee.orgvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18
}
​
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"              # 要执行的脚本路径interval 1                                           # 脚本执行间隔(秒)weight -30                                           # 脚本执行失败时降低的优先级fall 2                                               # 连续失败次数阈值rise 2                                               # 连续成功次数阈值timeout 2                                            # 脚本执行超时时间(秒)
}
​
vrrp_instance VI_1 {state MASTER                                        # 备主机:需设置为 BACKUPinterface ens160virtual_router_id 100priority 100                                        # 备主机:需设置为 80 优先级advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.100/24 dev ens160 label ens160:1}unicast_src_ip 192.168.67.110                       # 备主机:设置为本机 IPunicast_peer {192.168.67.120                                  # 备主机:设置为 MASTER IP}track_script {                                      # 关联健康检查脚本check_nginx                                     # 引用前面定义的检查脚本}
}


三、测试

客户端做添加 VIP 的 hosts 解析。

vim /etc/hosts          # 在该文件最后添加以下内容
​
192.168.67.100  www.yunjisuan.com

3.1.负载均衡验证

在客户端上执行以下命令循环访问虚拟 IP 地址:

预期输出会交替显示 Server 192.168.67.10 和 Server 192.168.67.20,这表明 Nginx 的负载均衡功能正常工作,请求被均匀地分发到了两台后端服务器上。

3.2.脚本验证

停止主节点 Nginx 服务

在主节点上执行以下命令停止 Nginx 服务,脚本会自动检测并重启 Nginx 服务,如服务启动成功,则客户端访问无中断,且 VIP 也不会转移。

3.3.观察 VIP 漂移

手动配置 Nginx 服务错误配置文件,让 Nginx 服务重启不成功,观察 VIP 漂移情况。

Nginx 配置错误配置文件。

客户端循环访问,MASTER 停止 Nginx 服务。

systemctl stop nginx

观察客户端服务无中断,几秒后访问自动恢复正常。

VIP 漂移到备主机。

同样的方法,恢复 MASTER 主机的 Nginx 配置文件正常,删掉配置文件里错误的地方,重启服务,因为 Keepalived 配置的是抢占模式,所以,重启 Nginx 服务,VIP 会漂移回 MASTER,同样客户端访问无中断。


四、实验总结

4.1 学到了什么

  • 通过本次实验,我们深入掌握了 Nginx 七层负载均衡的配置方法,能够根据不同的业务需求基于 URL、Cookie、HTTP 头等信息对请求进行精确的路由,提高了系统的灵活性和可扩展性。

  • 理解了 VRRP 协议的工作原理,学会了使用 Keepalived 实现主备节点的自动切换,确保了服务在节点故障时能够快速恢复,提高了系统的可用性。

  • 学会了编写自定义的健康检查脚本,通过对 Nginx 服务状态的实时监测,能够及时发现并处理服务故障,增强了系统的稳定性和可靠性。

4.2 通过什么解决了什么问题

单点故障问题

通过采用主备架构和 VIP 漂移机制,成功解决了单点故障问题。当主节点出现故障时,Keepalived 会自动将虚拟 IP 地址漂移到备节点,备节点立即接管服务,客户端无需进行任何配置更改,仍然可以通过虚拟 IP 地址访问服务,服务中断时间控制在 15 秒以内。例如,在某企业官网的实际应用中,主节点的硬件出现故障导致 Nginx 服务停止,但由于采用了 Nginx+Keepalived 高可用集群方案,服务在短时间内切换到备节点,用户几乎没有察觉到服务的中断,保证了网站的正常访问。

流量不均问题

使用 Nginx 的加权轮询算法解决了流量不均的问题。根据后端服务器的性能为其分配不同的权重,性能高的服务器分配更多的请求,从而使各服务器的负载更加均衡,服务器负载差异控制在 8% 以内。在一个轻量级 API 服务的场景中,不同的后端服务器处理能力不同,通过为处理能力强的服务器设置较高的权重,使得请求能够更加合理地分配,提高了整个系统的处理效率。

服务不可用问题

通过主动健康检查和自动重启机制解决了服务不可用的问题。Keepalived 定期执行健康检查脚本,当发现 Nginx 服务异常时,会尝试重启 Nginx 服务。如果重启成功,则继续提供服务;如果重启失败,则将虚拟 IP 地址漂移到备节点。故障节点的恢复时间控制在 10 秒以内,确保了服务的高可用性。在某文件下载服务中,由于网络波动导致 Nginx 服务出现短暂中断,但通过健康检查和自动重启机制,服务很快恢复正常,保证了用户的下载体验。


五、拓展

5.1.Nginx+Keepalived 适用场景

5.1.1.企业官网

对于企业官网来说,稳定性和可靠性是至关重要的。Nginx+Keepalived 高可用集群可以支撑日均 10 万次的访问量,确保页面能够稳定加载。例如,某大型制造企业的官网采用了 Nginx+Keepalived 方案,在产品推广活动期间,大量用户访问官网,由于集群的高可用性和负载均衡能力,网站始终保持稳定运行,没有出现服务中断的情况,为企业的品牌形象和业务推广提供了有力保障。

5.1.2.轻量级 API 服务

在微服务架构下,Nginx 可以作为轻量级 API 服务的流量入口,实现对不同微服务的路由和负载均衡。Keepalived 则保证了 API 服务的高可用性。某互联网金融公司的微服务架构中,使用 Nginx+Keepalived 集群作为 API 网关,将用户的请求路由到不同的微服务中进行处理。当某个微服务节点出现故障时,集群能够自动将请求分发到其他正常节点,确保 API 服务的连续性,为用户提供稳定的金融服务。

5.1.3.文件下载服务

对于文件下载服务,需要保证用户的下载体验,避免因服务器故障导致下载中断。Nginx 的 IP 哈希算法可以实现会话保持,将同一用户的下载请求始终分配到同一台后端服务器上,保证下载的连续性。同时,Keepalived 的高可用性机制确保了在服务器故障时能够快速切换到备用服务器。某软件下载平台采用了 Nginx+Keepalived 方案,在高峰时段,大量用户同时进行软件下载,通过 IP 哈希算法和高可用集群,用户能够流畅地下载软件,没有出现下载中断的情况。

5.2.对比其他方案的优势

5.2.1.与 HAProxy+Keepalived 对比

Nginx+Keepalived 方案的配置复杂度较低,适合对配置要求不高、需要快速部署的场景。而 HAProxy+Keepalived 方案在七层负载均衡方面的功能更加优秀,健康检查能力也更强,但配置相对复杂。例如,对于一个小型创业公司的网站,由于技术团队规模较小,采用 Nginx+Keepalived 方案可以快速搭建高可用集群,满足网站的基本需求;而对于一个大型电商平台,对七层负载均衡和健康检查有更高的要求,则可以考虑采用 HAProxy+Keepalived 方案。

5.2.2.与 LVS+Keepalived 对比

LVS+Keepalived 方案具有内核级性能,支持百万级并发,但仅支持四层负载均衡,配置复杂。Nginx+Keepalived 方案则支持七层负载均衡,能够对 HTTP/HTTPS 请求进行更细致的处理,配置相对简单。在一个中型企业的内部业务系统中,业务逻辑相对复杂,需要对请求进行七层处理,采用 Nginx+Keepalived 方案可以更好地满足业务需求;而对于一个大型互联网数据中心,需要处理海量的网络流量,对并发性能要求极高,则可以考虑采用 LVS+Keepalived 方案。

5.2.3.与 F5 硬件对比

F5 硬件负载均衡器具有全功能支持和高可靠性,但成本高昂,且闭源难以定制。Nginx+Keepalived 方案是开源的,成本较低,并且可以根据业务需求进行定制开发。对于一些预算有限的企业,如小型电商企业,采用 Nginx+Keepalived 方案可以在保证服务可用性的同时,降低成本;而对于一些对可靠性和安全性要求极高的金融机构,可能会选择 F5 硬件负载均衡器。

相关文章:

Nginx + Keepalived 高可用集群

一、NginxKeepalived 原理 1.1.Nginx 负载均衡机制 Nginx 是一款轻量级且高性能的 Web 服务器和反向代理服务器,在负载均衡方面有着卓越的表现。其具备强大的七层流量管理能力,能够基于 URL、Cookie、HTTP 头信息等对请求进行精准路由。例如&#xff0…...

循环遍历 Java 集合中元素的方法总结

循环遍历 Java 集合中元素的方法 在 Java 中,有多种方法可以遍历集合中的元素。以下是几种常见的遍历方法及其优缺点: 1. for-each 循环 语法: for (ElementType element : collection) {// 处理 element }适用场景:所有集合类型…...

树莓派上的 TensorFlow Lite:从零开始的摄像头图像识别

**** 1. 引言 随着人工智能(AI)和机器学习(ML)的发展,越来越多的开发者希望在嵌入式设备(如树莓派)上运行 AI 模型,实现目标检测、人脸识别等功能。TensorFlow Lite(TF…...

金融时间序列分析(Yahoo Finance API实战)

这里写目录标题 金融时间序列分析(Yahoo Finance API实战)1. 引言2. 项目背景与意义3. 数据集介绍4. GPU加速在数据处理中的应用5. 交互式GUI设计与加速处理6. 系统整体架构7. 数学公式与指标计算8. 完整代码实现9. 代码自查与BUG排查10. 总结与展望金融时间序列分析(Yahoo …...

Python 正则表达式模块 re

Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式? 正则表达式(Regular Expression, RE)是一种用于匹配、查找和替换文本模式的工具,由普通字符(如字母、数字)和特殊字符&…...

Vue生命周期

一、Vue的生命周期及其阶段 Vue生命周期:一个Vue实例从 创建 到 销毁 的整个过程。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。 生命周期的四个阶段:① 创建 ② 挂…...

vue3数据双向绑定解析

Vue 3 的双向绑定原理主要基于 Proxy 和 Reflect,核心源码在 reactivity 模块中。 1. 核心模块:reactivity reactivity 模块负责响应式数据的实现,主要包括以下几个文件: reactive.ts:处理对象和数组的响应式。ref.t…...

Gemini 2.0 全面解析:技术突破、应用场景与竞争格局

摘要 2025年3月,谷歌正式发布Gemini 2.0大模型,凭借其在多模态处理、代码生成和长上下文理解等领域的突破性进展,迅速成为AI领域的焦点。本文将深入剖析Gemini 2.0的技术架构、应用场景及与Grok3、DeepSeek R1、ChatGPT-4.5等竞品的对比&…...

【Linux系统编程】管道

目录 1、什么是管道2、管道的种类3、数据的读写3.1、管道通信3.2、管道的命令实例: 4、无名管道4.1、pipe() 无名管道的创建示例:简单读写示例:加入进程示例:通过 管道(pipe) 实现 父子进程之间的双向通信 …...

LeeCode题库第643题

643.子数组最大平均数I 项目场景: 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答案。 示例 1: 输入&#xff…...

数据炼丹与硬件互动:预测湿度的武学之道

前言 在这茫茫数据江湖中,高手过招,唯有融合机器学习与物联网之精髓,方能于风云变幻间自成一派。本文正是为各位江湖同道献上的秘籍,既有数据炼丹(预处理、模型训练)之奥义,也有硬件互通&#…...

【SpringBoot】MD5加盐算法的详解

目录 一、什么是加盐算法 二、如何实现加盐算法 2.1 加盐算法代码实现 2.2 注册页面中进行密码加盐 2.3 登录页面进行加盐的解密 2.4 注册和登录 一、什么是加盐算法 加盐算法是一种用于增强密码安全性的技术。这种技术通过在密码存储过程中添加一个随机生成的盐值&…...

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”,而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验,今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…...

如何手动使用下载并且运行 QwQ-32B-GGUF

首先使用安装 pip install ModelScope 使用 ModelScope 下载对应的模型 modelScope download --model Qwen/QwQ-32B-GGUF qwq-32b-q4_k_m.gguf 第二步开始下载 ollama git clone https://githubfast.com/ggerganov/llama.cpp # githubfast.com 可以加速下载 切换到目录&am…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-版本升级指南 3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南1. 升级必要性分析1.1 版本特性对比1.2 兼容性评估矩阵 2. 预升级准备清单2.1 环境检查表2.2 数据备份策略 3. 分阶段…...

IP 地址

文章目录 IP 地址IP 地址的分类IPv4 地址IPv6 地址 公有 IP 与私有 IP静态 IP 与动态 IP子网与子网掩码常见 IP 地址用途IP 地址的工作方式总结 IP 地址 IP(Internet Protocol)地址是计算机网络中的标识符,用于唯一标识网络中的设备。它可以…...

利用余弦相似度在大量文章中找出抄袭的文章

我前面的2篇文章分别讲了如果利用余弦相似度来判断2篇文章的相似度,来确定文章是否存在抄袭,和余弦相似度的原理,即余弦相似度到底是怎么来判断文章的相似性高低的等等。这一篇再说下,对于文章字数多和大量文章时,如果…...

《C语言中“输入魔法师”:scanf函数的奥秘与技巧》

🚀个人主页:fasdfdaslsfadasdadf 📖收入专栏:C语言 🌍文章目入 一、引言二、scanf函数的基本语法三、格式说明符的种类及用法(一)整数输入(二)浮点数输入(三&…...

VSTO(C#)Excel开发6:与窗体交互

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

PCL 点云OBB包围盒(二)

文章目录 一、简介二、实现步骤二、实现代码三、实现效果参考资料一、简介 包围盒是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。(来源于百度)常用的求解包围盒的算法主要有AABB和OOB算法,但AAB…...

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景? 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目? 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器(即项目将被打成 docker image&am…...

农业建设项目管理系统评测:8款推荐工具优缺点分析

本文主要介绍了以下8款农业建设项目管理系统:1.PingCode; 2. Worktile ;3. 建米农业工程项目管理系统;4. 开创云数字农业管理平台; 5. Trimble Ag Software;6.Conservis; 7. Agworld &#xff1…...

【MySQL】表的约束(上)

文章目录 表的约束什么是表的约束空属性默认值列描述(comment)零填充(zerofill)主键 总结 表的约束 什么是表的约束 表的约束(Constraints)是数据库表中的规则,用于限制存储的数据&#xff0c…...

根据TCP中的拥塞控制细说网卡了数据怎么传输

TCP(传输控制协议)中的拥塞控制是确保网络在数据传输过程中不会发生过载并导致网络崩溃的机制。拥塞控制通过动态地调整发送方的数据传输速率来适应网络的负载,从而避免网络拥塞。TCP的拥塞控制主要是根据网络的状况自动调整其发送速率&#…...

【SpringMVC】入门版

1.基本概念 1.1三层架构 三层架构也就是我们常说的b/s架构中的表现层,业务层和持久层,每层都各司其职,下面来分别讲解这三层的作用。 表现层: 也就是我们常说的web层。它负责接收客户端的请求,向客户端响应结果,通…...

DAY33 贪心算法Ⅱ

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 想到把整体利润分解为每天的利润&#xff0c;就豁然开朗了。 class Solution { public:int maxProfit(vector<int>& prices) {int result0;for(int i1;i<prices.size();i){resultmax(0,pric…...

re-二维四向迷宫题

关于迷宫 我们结合具体的来进行描述。 迷宫&#xff0c;顾名思义是有墙&#xff0c;且只有一条路可以走下去。当我们在题目中获得了map&#xff08;地图&#xff09;就拥有了上帝视角&#xff0c;就可以顺利的走出迷宫。 在下面这个图就是一个迷宫的map&#xff0c;其中A是起…...

并发编程面试题一

1、什么是进程、线程、协程&#xff0c;他们之间的关系是怎样的 进程是操作系统进行资源分配和调度的基本单位。每个进程都有独立的内存空间&#xff0c;进程之间相互独立&#xff0c;一个进程崩溃不会影响其他进程&#xff0c;进程间通信&#xff08;IPC&#xff09;需要通过…...

3.14周报

本周主要是在找双目视觉三维人体姿态估计方向的文章&#xff0c;这篇dual-diffusion&#xff0c;双目三维人体姿态估计的双扩散文章&#xff0c;引起了兴趣&#xff0c;作者从由于摄像机数量的减少&#xff0c;增加了3d重建的不确定性入手&#xff0c;然后使用了扩散模型&#…...

【redis】zset 类型:基本命令(上)

set 集合&#xff1a; 唯一无序。&#xff08;顺序不重要&#xff09;孙行者、行者孙>同一只猴 list 有序。&#xff08;顺序很重要&#xff09;孙行者、行者孙>不同的猴 zset 有序。升序/降序 有序集合 排序的规则是什么&#xff1f; 给 zset 中的 member 引入了…...

3分钟复现 Manus 超强开源项目 OpenManus

文章目录 前言什么是 OpenManus构建方式环境准备克隆代码仓库安装依赖配置 LLM API运行 OpenManus 效果演示总结个人简介 前言 近期人工智能领域迎来了一位备受瞩目的新星——Manus。Manus 能够独立执行复杂的现实任务&#xff0c;无需人工干预。由于限制原因大部分人无法体验…...

【Java篇】一法不变,万象归一:方法封装与递归的思想之道

文章目录 Java 方法的使用&#xff1a;从基础到递归的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定义1.3 方法调用的执行过程1.4 实参和形参的关系1.5 没有返回值的方法 二、方法重载2.1 为什么需要方法重载2.2 方法重载的概念2.2.4 C 和 Java 的比较&…...

SpringBoot解决跨域

将这个类添加到项目中 ResponseAdvice.java package com.example.homeLearn.config;import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-2-性能调优工具箱

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 附录-性能调优工具箱 2-Elasticsearch 性能调优工具箱深度指南一、性能诊断工具集1.1 实时监控工具1.2 慢查询分析 二、硬件与基础架构优化2.1 存储方案选型2.2 JVM调优参数 三、索引…...

UDP协议栈之整体架构处理

在之前的章节中&#xff0c;笔者就UDP、ICMP、IP、ARP、MAC层的报文格式&#xff0c;以及组帧解帧、CRC校验、分片处理等操作进行了具体介绍以及详细代码实现&#xff0c;并且通过了仿真测试。但之前的仿真测试都是对单层报文的组帧解帧进行的&#xff0c;这些模块仍处于“孤立…...

健康医疗:动态代理 IP 保障医疗数据安全,提升远程医疗服务质量!

在数字化浪潮的推动下&#xff0c;远程医疗服务以其便捷性和高效性受到了广泛的关注。然而&#xff0c;随之而来的是数据安全问题&#xff0c;尤其是医疗数据的安全性&#xff0c;成为了制约远程医疗服务发展的关键因素。幸运的是&#xff0c;动态代理IP技术的出现&#xff0c;…...

Navicat SqlServer 设置自增主键

Navicat是一款优秀的数据库管理工具&#xff0c;可以连接很多类型的数据库。使用它可以极大的提高工作效率。 Navicat 不能设置SqlServer自增字段&#xff0c;只能通过sql语句来实现 建表时设置 create table <表名> ( <字段1-主键> int identity (1,1) primar…...

实验8 搜索技术

实验8 搜索技术 一、实验目的 &#xff08;1&#xff09;掌握搜索技术的相关理论&#xff0c;能根据实际情况选取合适的搜索方法&#xff1b; &#xff08;2&#xff09;进一步熟悉盲目搜索技术&#xff0c;掌握其在搜索过程中的优缺点&#xff1b; &#xff08;3&#xff09;…...

IMA+DeepSeekR1+本地知识库撰写NOIP2008普及组T3【传球游戏】题解

目录 一、提问词 二、DeepSeekR1回复 题目描述 解题思路 实现代码 代码说明 三、说明 【IMADeepSeekR1本地知识库】撰写NOIP2008普及组复赛题解系列 1、IMADeepSeekR1本地知识库撰写NOIP2008普及组T1【ISBN 号码】题解-CSDN博客 2、IMADeepSeekR1本地知识库撰写NOIP200…...

查找特定的值(信息学奥赛一本通-1110)

【题目描述】 在一个序列(下标从1开始)中查找一个给定的值&#xff0c;输出第一次出现的位置。 【输入】 第一行包含一个正整数n&#xff0c;表示序列中元素个数。1 <n< 10000。 第二行包含n个整数&#xff0c;依次给出序列的每个元素&#xff0c;相邻两个整数之间用单个…...

Qt项目中集成第三方模块的.pri文件

对于功能模块较多的Qt项目&#xff0c;使用pri文件管理模块文件&#xff0c;降低工程复杂度&#xff0c;提高软件模块的封装性和重用性。 一、.pro与.pri 对于模块化编程&#xff0c;Qt提供了pro和pri&#xff0c;pro管理项目&#xff0c;pri管理模块。 .pro 文件是Qt项目的…...

200多种算法应用于二维和三维无线传感器网络(WSN)覆盖场景

2.1 二元感知模型 在当前无线传感器网络&#xff08;WSN&#xff09;覆盖场景中&#xff0c;最常见且理想的感知模型是二元感知模型[27]。如图2所示&#xff0c; Q 1 Q_1 Q1​和 Q 2 Q_2 Q2​代表平面区域内的两个随机点。 Q 1 Q_1 Q1​位于传感器的检测区域内&#xff0c;其感…...

【QT】文件系统相关 -- QFile

一、Qt 文件概述 &#x1f525; 文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 提供了很多关于⽂件的类&#xff0c;通过这些类能够对文件系统进行操作&#xff0c;如文件读写、文件信息获取、文件制或重命名等 二、输…...

transformer bert 多头自注意力

输入的&#xff08;a1,a2,a3,a4&#xff09;是最终嵌入&#xff0c;是一个(512,768)的矩阵&#xff1b;而a1是一个token&#xff0c;尺寸是768 a1通过Wq权重矩阵&#xff0c;经过全连接变换得到查询向量q1&#xff1b;a2通过Wk权重矩阵得到键向量k2&#xff1b;q和k点乘就是值…...

人工智能之数学基础:线性变换的象空间和零空间

本文重点 前面的课程中,我们学习了线性变换,由此而引申出线性变换的象空间和零空间,这两个空间在机器学习领域会被经常用到,本文对此进行学习。 直观理解 总的来说象空间就是经过线性变换得到的空间,零空间就是经过线性变换是零的元素构成的空间。 从几何角度来看,象空…...

数据的存储---整型、浮点型

目录 一、整型在内存中的存储 1. 原码、反码、补码 2. 大端与小端 二、浮点数在内存中的存储 1.浮点数的存 2. 浮点数的取 3. 题目解析 一个变量的创建需要在内存中开辟空间&#xff0c;而开辟的空间大小是由数据类型决定的。下面我们就来讨论一下整型、浮点型在内存中的…...

鲸鱼算法WOA对风电场风电机组一次二次调频参数进行全局最优辨识,二次调频参数辩识matlab/simulink,也可进一步修改成一次调频参数辩识

模型为二次调频模型&#xff0c;也可修改为一次调频模型参数辩识 随着风电在电力系统中占比提高,其调频特性对电力系统频率稳定性的影响增大&#xff0c;例如&#xff0c;随着风电渗透水平不断提升&#xff0c;系统惯量不断增加&#xff0c;电力系统频率不断下降&#xff0c;在…...

Spring 中 SmartInitializingSingleton 的作用和示例

一、 接口定义 SmartInitializingSingleton 是 Spring 框架提供的一个 单例 Bean 全局初始化回调接口&#xff0c;用于在 所有非延迟单例 Bean 初始化完成后 执行自定义逻辑。 核心方法&#xff1a; public interface SmartInitializingSingleton {void afterSingletonsInsta…...

《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现

《TCP/IP网络编程》学习笔记 | Chapter 18&#xff1a;多线程服务器端的实现 《TCP/IP网络编程》学习笔记 | Chapter 18&#xff1a;多线程服务器端的实现线程的概念引入线程的背景线程与进程的区别 线程创建与运行pthread_createpthread_join可在临界区内调用的函数工作&#…...

Unity AI 技术浅析(三):智能代理(Agents)

Unity AI的智能代理(Agents)技术是实现游戏和虚拟现实应用中非玩家角色(NPC)、敌人、盟友等智能行为的核心。通过智能代理,开发者可以为虚拟角色赋予感知、决策和行动的能力,使其能够与环境和其他角色进行复杂的交互。 一、智能代理的基本原理 智能代理是能够在特定环境…...