LVS + Keepalived 高可用集群
一、LVS+Keepalived 原理
1.1.LVS 负载均衡原理
LVS(Linux Virtual Server)是一种基于 Linux 内核的负载均衡技术,它通过 IPVS(IP Virtual Server)模块来实现。LVS 可以将客户端的请求分发到多个后端服务器上,从而实现负载均衡。它主要支持三种工作模式:
-
DR 模式(直接路由):客户端的请求首先到达 LVS 负载均衡器,负载均衡器将请求的目标 MAC 地址修改为后端真实服务器的 MAC 地址,而 IP 地址保持不变,然后将请求转发给后端服务器。后端服务器处理完请求后,直接将响应返回给客户端,无需再经过 LVS 负载均衡器。这种模式的优点是性能高,因为响应数据包不需要经过负载均衡器,减少了负载均衡器的处理压力。
-
NAT 模式(网络地址转换):客户端的请求和后端服务器的响应都需要经过 LVS 负载均衡器。负载均衡器在转发请求时,会修改请求的目标 IP 地址为后端服务器的 IP 地址,同时修改源 IP 地址为自己的 IP 地址。在转发响应时,会将响应的目标 IP 地址修改为客户端的 IP 地址。这种模式的优点是配置简单,但缺点是负载均衡器的处理压力较大,而且后端服务器必须和负载均衡器在同一个子网内。
-
TUN 模式(IP 隧道):LVS 负载均衡器将客户端的请求封装在一个新的 IP 报文中,通过隧道发送给后端服务器。后端服务器接收到报文后,解封装得到原始请求,处理完请求后直接将响应返回给客户端。这种模式的优点是支持跨子网的负载均衡,但缺点是配置相对复杂,而且需要额外的隧道开销。
1.2.Keepalived 高可用原理
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的高可用解决方案。VRRP 协议的目的是为了解决静态路由环境下的单点故障问题。在一个 VRRP 组中,有一个主路由器(Master)和多个备份路由器(Backup),它们共享一个虚拟 IP 地址(VIP)。主路由器负责处理客户端的请求,备份路由器则监听主路由器的状态。
-
VRRP 虚拟路由冗余:主路由器会定期发送 VRRP 通告消息给备份路由器,告知自己的状态。如果备份路由器在一定时间内没有收到主路由器的通告消息,就认为主路由器出现故障,此时备份路由器中的一个会通过竞选机制成为新的主路由器,并接管虚拟 IP 地址,继续处理客户端的请求。
-
健康检查:Keepalived 可以通过脚本或协议(如 HTTP、HTTPS 等)对后端服务器和 LVS 节点的状态进行监控。如果发现某个后端服务器或 LVS 节点出现故障,Keepalived 会将其从负载均衡池中移除,从而保证只有正常的服务器能够处理客户端的请求。
-
VIP 漂移:当主节点出现故障时,备节点会抢占虚拟 IP 地址,实现 VIP 的漂移。客户端的请求会自动切换到备节点上,从而实现服务的高可用性,切换过程通常可以在秒级完成。
二、配置思路与步骤
2.1.环境准备
四台主机(rocky 8):
节点角色 | IP 地址 | 组件 |
---|---|---|
LVS 主节点 | 192.168.67.110 | Keepalived + IPVS |
LVS 备节点 | 192.168.67.120 | Keepalived + IPVS |
后端 RS1 | 192.168.67.10 | HTTPD + VIP 配置 |
后端 RS2 | 192.168.67.20 | HTTPD + VIP 配置 |
客户端 | 任意 IP | 浏览器或测试工具 |
注意:整个环境所有主机都关闭了 firewalld 和 SElinux 。
2.2.RS 主机配置
2.2.1.配置 VIP
DR 模式
绑定 VIP 的作用:在后端 RS 主机上绑定 VIP 是为了让后端服务器能够正确处理目标 IP 为 VIP 的请求。在 LVS 的 DR 模式下,LVS 负载均衡器将客户端的请求转发给后端服务器时,请求的目标 IP 地址是 VIP。如果后端服务器没有绑定 VIP,它会认为这个请求不是发给自己的,从而丢弃该请求。例如,在一个电商网站的架构中,客户端通过访问 VIP 来浏览商品信息,LVS 将请求转发给后端的 RS 服务器。如果 RS 服务器没有绑定 VIP,就无法处理这些请求,用户将无法正常访问网站。
# 后端两个 RS 主机都需添加 VIP
ip address add 192.168.67.100/32 dev lo # 注意:子网掩码为 32
2.2.2.配置 ARP 抑制
配置 ARP 抑制的作用:配置 ARP 抑制的主要作用是避免后端 RS 服务器与 LVS 负载均衡器之间的 ARP 冲突。在网络中,ARP 协议用于将 IP 地址解析为 MAC 地址。当客户端发送 ARP 请求询问 VIP 的 MAC 地址时,如果后端 RS 服务器不进行 ARP 抑制,可能会响应这个请求,导致客户端将请求直接发送给后端 RS 服务器,而不是通过 LVS 负载均衡器进行转发,从而破坏了负载均衡的架构。例如,在一个企业的内部网络中,如果出现 ARP 冲突,可能会导致部分用户无法正常访问企业的网站或应用程序。
-
两个 RS 主机都需配置,选以下方法终其中一种方法即可。
2.2.2.1.法一
临时设置 ARP 规则。
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
2.2.2.2.法二
永久设置 ARP 规则(主配置文件),在主配置文件最后添加以下四条规则。
sysctl -p:使规则生效。
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
sysctl -p
2.2.2.3.法三
永久设置 ARP 规则(子配置文件),在子配置文件目录里创建 .conf 结尾的文件。
sysctl --system:读取系统中多个指定的配置文件,并将这些文件里定义的内核参数设置加载到当前运行的内核中,以此实现对内核参数的批量设置。
vim /etc/sysctl.d/arp.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
sysctl --system
2.2.2.4.验证
查看是否设置成功:
2.2.3.配置 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.Keepalived 主机配置
2.3.1.配置 Keepalived 策略
安装 Keepalived 软件,编辑配置文件,配置 LVS DR 模式。
yum install keepalived -y
注意:两台 keepalived 主机都需修改配置文件,内容如下
vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived
global_defs {notification_email {2373179473@qq.com # 接收 Keepalived 状态变化通知邮件的邮箱地址}notification_email_from keepalived@timinglee.org # 发送通知邮件的邮箱地址smtp_server 127.0.0.1 # 用于发送通知邮件的 SMTP 服务器地址smtp_connect_timeout 30 # 与 SMTP 服务器建立连接的超时时间,单位为秒router_id ka1.timinglee.org # 此 Keepalived 实例的唯一标识,用于在 VRRP 组中区分不同实例vrrp_skip_check_adv_addr # 跳过对 VRRP 通告地址的合法性检查vrrp_garp_interval 0 # 免费 ARP(Gratuitous ARP)消息的发送间隔,设为 0 表示不发送vrrp_gna_interval 0 # 免费邻居通告(Gratuitous Neighbor Advertisement)消息的发送间隔,设为 0 表示不发送vrrp_mcast_group4 224.0.0.18 # VRRP 组播通信使用的 IP 地址
}
vrrp_instance VI_1 {state MASTER # 当前 Keepalived 实例的初始状态,MASTER 表示主节点# 注意:state 备节点需要设置为 BACKUPinterface ens160 # Keepalived 监听 VRRP 通告和绑定 VIP 的网络接口virtual_router_id 100 # VRRP 组的唯一标识符,同一组内的实例此 ID 需相同priority 100 # 当前实例的优先级,数值越高越优先成为主节点# 注意:备节点,优先级需要设置为 80advert_int 1 # 发送 VRRP 通告消息的时间间隔,单位为秒authentication {auth_type PASS # 认证类型,PASS 表示使用密码认证auth_pass 1111 # 认证密码,同一 VRRP 组内的实例需一致}virtual_ipaddress {192.168.67.100/24 dev ens160 label ens160:1 # 虚拟 IP 地址及其子网掩码,绑定到 ens160 接口,别名是 ens160:1}unicast_src_ip 192.168.67.110 # 单播通信时使用的源 IP 地址# 注意:备节点源 IP 地址需要设置为本机 IPunicast_peer {192.168.67.120 # 单播通信的对端 Keepalived 实例的 IP 地址# 注意:备节点需要设置为主节点 IP}
}
virtual_server 192.168.67.100 80 {delay_loop 6 # 健康检查的时间间隔,单位为秒lb_algo wrr # 负载均衡算法,wrr 表示加权轮询lb_kind DR # 负载均衡模式,DR 代表直接路由模式protocol TCP # 负载均衡使用的协议,这里是 TCP 协议
real_server 192.168.67.10 80 {weight 1 # 该真实服务器的权重,影响分配到的请求数量HTTP_GET {url {path / # 健康检查请求的 URL 路径status_code 200 # 期望的 HTTP 响应状态码}connect_timeout 3 # 建立连接的超时时间,单位为秒nb_get_retry 2 # 连接失败后的重试次数delay_before_retry 2 # 每次重试前的延迟时间,单位为秒}}real_server 192.168.67.20 80 {weight 1 # 该真实服务器的权重HTTP_GET {url {path / # 健康检查请求的 URL 路径status_code 200 # 期望的 HTTP 响应状态码}connect_timeout 3 # 建立连接的超时时间nb_get_retry 2 # 连接失败后的重试次数delay_before_retry 2 # 每次重试前的延迟时间}}
}
重启服务。
systemctl restart keepalived.service
安装 ipvsadm 命令,用于观察 ipvs 规则。
yum install ipvsadm -y
ipvsadm -Ln
三、测试
3.1.基础功能验证
目前 VIP 在 192.168.67.110 主机上。
客户端访问虚拟 IP:192.168.67.100,实现请求通过 LVS 负载均衡器转发到后端真实服务器(192.168.67.10 和 192.168.67.20),页面正常轮询显示,表明 LVS 负载均衡器能够正确地将客户端的请求分发到后端的 RS 服务器上。。
while true; do curl 192.168.67.100; sleep 1; done
3.2.主备切换测试
关闭主节点:192.168.67.110
关闭主节点 192.168.67.110 的 Keepalived 服务。
systemctl stop keepalived.service # 关闭 192.168.67.110 的 Keepalived 服务
VIP 自动漂移到备节点上。
客户端访问 192.168.67.100 时,请求自动切换到备节点 192.168.67.120,实现服务无中断。
while true; do curl 192.168.67.100; sleep 1; done
重启主节点:192.168.67.110
重启主节点,Keepalived 服务恢复后:
-
VIP 自动切回主节点,实现高可用。
-
请求按权重(weight=1)均匀分配到 192.168.67.10 和 192.168.67.20,实现流量均衡。
-
服务无中断。
while true; do curl 192.168.67.100; sleep 1; done
3.3.健康检查验证
-
手动停止后端服务器 192.168.67.10 的 HTTP 服务,Keepalived 通过健康检查(/ 路径返回 200)发现异常,将其从 LVS 集群中移除。
-
客户端访问 192.168.67.100 时,所有请求自动转发到正常服务器 192.168.67.20,实现故障隔离。
-
恢复 192.168.67.10 的 HTTP 服务后,Keepalived 重新将其加入集群,请求恢复正常分配
四、总结
4.1.收获和问题
核心收获
-
高性能转发:LVS 的 DR 模式实现零拷贝转发,吞吐量远超 Nginx/HAProxy。例如,在一个大型电商网站的促销活动期间,大量用户同时访问网站,LVS 的 DR 模式能够快速地将请求转发到后端服务器,确保用户能够快速地浏览商品信息和下单。
-
高可用保障:Keepalived 通过 VRRP 和健康检查机制,确保服务 99.99% 可用性。以在线游戏为例,如果游戏服务器的主节点出现故障,Keepalived 能够迅速将 VIP 漂移到备节点,保证玩家不会因为服务器故障而中断游戏。
-
流量调度策略:加权轮询算法有效分配流量,提升资源利用率。在一个视频网站中,不同的服务器性能可能不同,通过设置不同的权重,可以将更多的请求分配到性能较高的服务器上,从而提高整个系统的性能。
问题解决
-
ARP 冲突:通过内核参数抑制后端 RS 的 ARP 响应,避免 VIP 地址冲突。在一个企业的局域网中,如果没有配置 ARP 抑制,可能会出现多个服务器响应同一个 VIP 的 ARP 请求,导致网络通信混乱。通过配置 ARP 抑制,解决了这个问题,保证了网络的正常运行。
-
单点故障:主备架构消除 LVS 节点宕机风险,实现无缝切换。在一个金融交易系统中,如果 LVS 节点出现单点故障,可能会导致交易中断,给企业带来巨大的损失。通过 LVS+Keepalived 的主备架构,当主节点出现故障时,备节点能够迅速接管服务,实现无缝切换,避免了交易中断的风险。
4.2.适用场景
-
高并发 Web 服务:适用于电商、社交平台等高流量场景。例如,淘宝、京东等电商平台在双 11、618 等促销活动期间,会面临巨大的流量压力。LVS+Keepalived 可以将大量的用户请求分发到多个后端服务器上,保证网站的高可用性和高性能。
-
数据库集群:在 MySQL、Redis 等数据库集群中,LVS+Keepalived 可以实现读写分离和负载均衡。例如,在一个新闻网站中,用户的读请求可以通过 LVS 分发到多个从数据库服务器上,写请求则可以发送到主数据库服务器上,提高数据库的读写性能。
-
跨地域负载均衡:结合 TUN 模式支持异地容灾。例如,一家跨国企业在不同的国家和地区都有数据中心,通过 LVS 的 TUN 模式和 Keepalived 的高可用机制,可以将用户的请求分发到距离最近的数据中心,提高用户的访问速度,同时实现异地容灾,保证数据的安全性和可用性。
4.3.对比其他方案
方案 | 优势 | 劣势 |
---|---|---|
HAProxy | 七层功能丰富(HTTP 路由),支持多种负载均衡算法,配置相对简单。例如,在一个需要根据 HTTP 请求的 URL 进行路由的应用场景中,HAProxy 可以很方便地实现。 | 性能低于 LVS,资源消耗较高。在处理大量的并发请求时,HAProxy 的处理能力可能不如 LVS。 |
Nginx | 配置灵活,支持反向代理,同时还可以作为 Web 服务器使用。例如,在一个小型的网站中,Nginx 可以同时作为 Web 服务器和负载均衡器使用。 | 单节点性能有限,需额外高可用方案。如果 Nginx 节点出现故障,需要额外的机制来实现高可用性。 |
F5 硬件 | 全功能支持,性能高,可靠性强。例如,在一些对性能和可靠性要求极高的金融、电信等行业,F5 硬件负载均衡器是一个不错的选择。 | 成本高,闭源难以定制。F5 硬件负载均衡器的价格昂贵,而且由于是闭源产品,难以根据具体需求进行定制。 |
4.4.优化建议
-
性能调优:开启内核参数 net.ipv4.tcp_tw_reuse 减少 TIME_WAIT。在高并发的场景下,大量的 TIME_WAIT 状态会占用系统资源,影响系统的性能。通过开启这个参数,可以复用处于 TIME_WAIT 状态的连接,提高系统的性能。
-
监控告警:集成 Prometheus+Grafana 实时监控集群状态。Prometheus 可以收集集群中各个节点的性能指标,如 CPU 使用率、内存使用率、网络流量等,Grafana 可以将这些指标以直观的图表形式展示出来,并设置告警规则,当指标超过阈值时及时通知管理员。
-
多活架构:部署多个 VRRP 组实现主主模式,提升资源利用率。在一个大型的分布式系统中,可以部署多个 VRRP 组,每个 VRRP 组都有自己的主节点和备节点,不同的 VRRP 组之间可以相互备份,实现主主模式。这样可以充分利用各个节点的资源,提高整个系统的性能和可用性。
相关文章:
LVS + Keepalived 高可用集群
一、LVSKeepalived 原理 1.1.LVS 负载均衡原理 LVS(Linux Virtual Server)是一种基于 Linux 内核的负载均衡技术,它通过 IPVS(IP Virtual Server)模块来实现。LVS 可以将客户端的请求分发到多个后端服务器上…...
使用MySQL的Binlog来同步数据到ES当中
一、技术选型与核心原理 核心组件 • MySQL Binlog:ROW模式记录数据变更事件(INSERT/UPDATE/DELETE),提供原子性变更流 • Canal/OpenReplicator:伪装MySQL Slave订阅Binlog(本文以Canal 1.1.6为例…...
沐数科技数据开发岗笔试题2025
描述性统计 标准差 答案: A 解析: 标准差 衡量数据集中数值变化或离散程度的一种度量。它反映了数据集中的各个数值与数据集的平均值(均值)之间的偏离程度。标准差越大,表明数据的分布越分散;标准差越小,表明数据…...
什么是 HTML?
HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言,而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 文档包含了HTML 标签及文本内容HTML文档也叫做 web 页面 HT…...
coding ability 展开第四幕(滑动指针——巩固篇)超详细!!!!
文章目录 前言水果成篮思路 找到字符串中所有字母异位词思路 串联所有单词的子串思路 最小覆盖子串思路 总结 前言 本专栏上一篇博客,带着大家从认识滑动窗口到慢慢熟悉 相信大家对滑动窗口已经有了大概的认识 其实主要就是抓住——一段连续的区间 今天来学习一些滑…...
【Linux我做主】基础命令完全指南上篇
Linux基础命令完全指南【上篇】 Linux基础命令完全指南github地址前言命令行操作的引入Linux文件系统树形结构的根文件系统绝对路径和相对路径适用场景Linux目录下的隐藏文件 基本指令目录和文件相关1. ls2. cd和pwdcdpwd 3. touch4. mkdir5. cp6. mv移动目录时覆盖写入的两种特…...
101.在 Vue 3 + OpenLayers 使用 declutter 避免文字标签重叠
1. 前言 在使用 OpenLayers 进行地图开发时,我们经常需要在地图上添加点、线、区域等图形,并给它们附加文字标签。但当地图上的标注较多时,文字标签可能会发生重叠,导致用户无法清晰地查看地图信息。 幸运的是,OpenL…...
面试vue2开发时怎么加载编译速度(webpack)
可以输入命令获取默认 webpack 设置 vue inspect > set.js 1.使用缓存 configureWebpack: {cache: {type: filesystem, // 使用文件系统缓存类型buildDependencies: {config: [__filename] // 缓存依赖,例如webpack配置文件路径}}}, 2.启用 vue-loader (测试明…...
大模型推理后JSON数据后处理
大模型推理后JSON数据后处理 flyfish LLM 通常指的是 Large Language Model,也就是大语言模型,针对 JSON格式的输出,可以在大模型推理前、推理中、推理后进行处理,这里是在推理后进行处理。 针对模型输出结果,可采用结…...
面试总结:2024前端面试题
前几天写了一篇对面试官的吐槽,今天来总结一下最近面试的一些题目。题目不分具体公司了,毕竟题目的重复率不会特别高,就多做准备吧。 技术面还是离不开“八股文”,个人不喜欢也没办法,硬着头皮上,下面分几个…...
剑指 Offer II 083. 没有重复元素集合的全排列
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20083.%20%E6%B2%A1%E6%9C%89%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0%E9%9B%86%E5%90%88%E7%9A%84%E5%85%A8%E6%8E%92%E5%88%97/README.md 剑指 Offer II 083. 没…...
SFT数据处理部分的思考
SFT数据及处理的业内共识 1.prompt的质量和多样性远重要于数据量级,微调一个 30 b 量级的base model只需要 10 w 量级的数据即可 参考:《LIMA:Less Is More for Alignment》 2.合成数据很重要!一般需要通过…...
c++三级(枚举问题)
菲波那契数列(2) 题目描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。 给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。 输入格式 第1行是测试数据的组数n,后面跟着n行…...
vb编程有哪些相关的IDE开发工具vb.net,Basic语言?
在编程领域,VB 系列拥有丰富多样的 IDE 开发工具,为不同需求的开发者提供了广泛的选择,以下为你详细介绍: 兼容 VB6 源码的开发工具 twinbasic:属于 VB7 系列,它几乎能 100% 兼容 VB6 源码,这…...
XSS跨站脚本攻击
1、什么是XSS攻击 XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免与css层叠样式表名称冲突,所以改为xss,是最常见的web应用程序安全漏洞之一。它指的是恶意攻击者往web页面里插入恶意html代码(JavaS…...
Uniapp 开发 App 端上架用户隐私协议实现指南
文章目录 引言一、为什么需要用户隐私协议?二、Uniapp 中实现用户隐私协议的步骤2.1 编写隐私协议内容2.2 在 Uniapp 中集成隐私协议2.3 DCloud数据采集说明2.4 配置方式3.1 Apple App Store3.2 Google Play Store 四、常见问题与解决方案4.1 隐私协议内容不完整4.2…...
mapbox高阶,结合threejs(threebox)添加extrusion挤出几何体,并添加侧面窗户贴图和楼顶贴图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox extrusion挤出几何体二、🍀…...
【Pycharm】Pycharm无法复制粘贴,提示系统剪贴板不可用
我也没有用vim的插件,检查了本地和ubutnu上都没有。区别是我是远程到ubutnu的pycharm,我本地直接控制windowes的pycharm是没问题的。现象是可以从外部复制到pycharm反之则不行。 ctl c ctlv 以及右键 都不行 参考:Pycharm无法复制粘贴&…...
Java泛型程序设计使用方法
Java泛型程序设计是Java语言中一项强大的特性,它允许你编写更加通用和类型安全的代码。以下是Java泛型程序设计的使用方法和技巧: 1. 基本概念 泛型类:可以定义一个类,其中的某些类型是参数化的。 public class Box<T> {pr…...
【STM32】USART串口收发HEX数据包收发文本数据包
有关串口知识参考:【STM32】USART串口协议&串口外设-学习笔记-CSDN博客 HEX模式/十六进制模式/二进制模式:以原始数据的形式显示文本模式/字符模式:以原始数据编码后的形式显示 参考上面文章查看ASCII编码表 HEX数据包 包头包尾和…...
Keil5下载教程及安装教程(附安装包)
文章目录 前言一、Keil5下载教程二、Keil5安装教程三、Keil5授权教程 前言 本教程详细的介绍了Keil5下载教程及安装教程,就像搭积木一样简单易懂,让你轻松迈出开发的第一步。 一、Keil5下载教程 相比旧版本,Keil MDK v5.40 有显著升级。新增…...
快速上手网络通信 -- Qt Network应用开发
概述 在现代应用程序开发中,网络通信是不可或缺的一部分,无论是客户端与服务器之间的数据交换,还是设备间的通信,都需要一个高效且可靠的网络库。Qt提供了强大的QT Network模块,支持多种网络协议和操作,如HTTP、FTP、TCP/IP等,本文将详细介绍如何使用Qt Network模块进行…...
Linux-进程概念
本节学习重点: • 认识冯诺依曼系统 • 操作系统概念与定位 • 深⼊理解进程概念,了解PCB • 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害 • 了解进程调度,Linux进程优先级&am…...
【LeetCode】622、设计循环队列
【LeetCode】622、设计循环队列 文章目录 一、数组实现循环队列1.1 队列 二、多语言解法 一、数组实现循环队列 1.1 队列 注意:题目要求了 Front() 和 Rear(),当 IsEmpty() 时返回 -1 // go type MyCircularQueue struct {l intr intlen intcap intar…...
基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统源码+运行
功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。源码 功能包括:医生管理、科室管理、护士管理、住院管理、药品管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geee…...
2023南京理工大学计算机复试上机真题
2023南京理工大学计算机复试上机真题 2023南京理工大学计算机复试机试真题 历年南京理工大学计算机复试上机真题 在线评测:传送门:pgcode.cn 括号匹配二 题目描述 苗苗今天刚刚学会使用括号,不过他分不清小括号,中括号&#…...
开发、科研、日常办公工具汇总(自用,持续更新)
主要记录汇总一下自己平常会用到的网站工具,方便查阅。 update:2025/2/11(开发网站补一下) update:2025/2/21(补充一些AI工具,刚好在做AI视频相关工作) update:2025/3/7&…...
python3GUI--模仿安卓桌面 By:PyQt5(附下载地址)
文章目录 一.前言二.展示1.主界面2.设置页面3.更换了壁纸且切换桌面页面 三.项目分享1.项目代码结构2.组件代码分享 四.总结 文件大小25.5M,欢迎下载体验!点击下载 一.前言 今天给大家推荐我用…...
STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例)
STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例) 软件介绍 STM32CubeIDE 是 STMicroelectronics 提供的官方集成开发环境(IDE),专为 STM32 微控制器系列设计。它融合了 STM32CubeMX 和 Eclipse 的强大功能…...
酒店宾馆IPTV数字电视系统:创新宾客体验,引领智慧服务新潮流
酒店宾馆IPTV数字电视系统:创新宾客体验,引领智慧服务新潮流 北京海特伟业科技有限公司任洪卓于2025年3月15日发布 随着智慧酒店的不断发展,宾客对于酒店内的娱乐和信息服务需求日益多样化,传统的电视服务已难以满足现代宾客的高…...
蓝桥杯刷题——第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
一、0握手问题 - 蓝桥云课 算法代码: #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力,题意很清晰,累加即可。 二、0小球反弹 - 蓝…...
MobileNet家族:从v1到v4的架构演进与发展历程
MobileNet 是一个专为移动设备和嵌入式系统设计的轻量化卷积神经网络(CNN)家族,旨在在资源受限的环境中实现高效的图像分类、对象检测和语义分割等任务。自 2017 年首次推出以来,MobileNet 经历了从 v1 到 v4 的多次迭代ÿ…...
PyTorch PINN实战:用深度学习求解微分方程
在人工智能与计算数学的交汇点,物理信息神经网络(Physics-Informed Neural Networks,PINN)正引领着一场求解微分方程的革命。传统上,微分方程是描述自然现象和工程问题中各种关系的重要工具,但其求解往往依…...
LRU(最近最少使用)算法实现
核心思想与基本思路 LRU(Least Recently Used)算法是一种缓存淘汰策略,其核心思想是淘汰最近最少使用的数据。 最近使用原则:最近被访问的数据在未来被访问的概率更高,因此应保留在缓存中。淘汰机制:当缓…...
【大模型实战】利用ms-swift微调框架对QwQ-32B推理模型进行微调
1. 背景介绍 之前我们在《大模型训练/微调的一些经验分享》、《利用DeepSeek-R1数据微调蒸馏ChatGLM32B让大模型具备思考能力》中做了相关模型微调的介绍。目前在基座大模型能力还没有达到足够牛的情况下,大模型微调在商业化、垂直领域应用依然是不可或缺࿰…...
蓝桥杯省赛真题C++B组-小球反弹
一、题目 有一长方形,长为 343720 单位长度,宽为 233333 单位长度。在其内部左上角顶点有一小球(无视其体积),其初速度如图所示且保持运动速率不变,分解到长宽两个方向上的速率之比为 dx:dy 15:17。小球碰到长方形的边框时会发生…...
Web3到底解决了什么问题?
文章目录 Web3到底解决了什么问题?1. 数据所有权与控制权的转移2. 打破中心化平台的垄断3. 信任与透明度的重构4. 价值分配机制的革新5. 互操作性与开放生态6.Web3 的局限性(附加说明) Web3到底解决了什么问题? 1. 数据所有权与控制权的转移 问题&am…...
基于CSV构建轻量级数据库:SQL与Excel操作的双模实践
基于CSV构建轻量级数据库:SQL与Excel操作的双模实践 引言:当CSV遇到SQL和Excel CSV(逗号分隔值)作为最通用的数据存储格式之一,凭借其纯文本可读性和跨平台兼容性,被广泛应用于数据交换和简单存储场景。但…...
【深度学习】多源物料融合算法(一):量纲对齐常见方法
目录 一、引言 二、量纲对齐常见方法 2.1 Z-score标准化Sigmoid归一化 2.2 Min-Max 归一化 2.3 Rank Transformation 2.4 Log Transformation 2.5 Robust Scaling 3、总结 一、引言 类似抖音、快手、小红书等产品的信息流推荐业务,主要通过信息流广告、信…...
STM32-SPI通信外设
目录 一:SPI外设简介 SPI框图编辑 SPI逻辑 编辑 主模式全双工连续传输 编辑 非连续传输 二:硬件SPI读写W25Q64 1.接线: 2. 代码 SPI外设的初始化 生成时序 一:SPI外设简介 STM32内部集成了硬件SPI收发电路&#…...
告别XML模板的繁琐!Word文档导出,easy!
word模板导出 最近项目中有个功能,导出月报,发现同事使用了docx格式模板,感觉比之前转成xml的简单多了,这边记录下使用方法。 xml方式导出word,模板太复杂了 资料 poi-tl 一个基于Apache POI的Word模板引擎,也是一个免费开源的Jav…...
LeetCode 3280 将日期转换为二进制表示
【算法实战】日期转二进制:两种解法的思路与优化(附代码解析) 一、问题描述 给定一个yyyy-mm-dd格式的日期字符串,要求将年、月、日分别转为无前导零的二进制,并保持year-month-day格式。 示例:输入2025-…...
基于SpringBoot的“考研互助平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“考研互助平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 局部E-R图 系统首页界面 系统注册…...
在线Doc/Docx转换为PDF格式 超快速转换的一款办公软件 文档快速转换 在线转换免费转换办公软件
小白工具https://www.xiaobaitool.net/files/word-pdf/提供了一项非常实用的在线服务——将Doc或Docx格式的文档快速转换为PDF格式。这项服务不仅操作简单,而且转换效率高,非常适合需要频繁处理文档转换的用户。 服务特点: 批量转换&#x…...
3.14-进程间通信
进程间通信 IPC 进程间通信的原理,借助进程之间使用同一个内核,借助内核,传递数据。 进程间通信的方法 管道:最简单。信号:开销小。mmap映射:速度最快,非血缘关系之间。socket(本…...
大模型AI多智能体系统(Multi-Agent Systems, MAS)技术介绍
一、多智能体系统的定义与核心概念 多智能体系统(MAS)是由多个具备自主决策能力的智能体(Agent)组成的分布式系统。每个智能体能够感知环境、执行动作,并通过协作或竞争实现个体或集体目标。其核心特征包括: 自主性:智能体无需外部指令即可独立决策(如MetaGPT中的角色…...
web3区块链
Web3 是指下一代互联网,也被称为“去中心化互联网”或“区块链互联网”。它是基于区块链技术构建的,旨在创建一个更加开放、透明和用户主导的网络生态系统。以下是关于 Web3 的一些关键点: ### 1. **核心概念** - **去中心化**࿱…...
Alembic 实战指南:快速入门到FastAPI 集成
一、快速开始 1.1 简介 Alembic 是一个基于 SQLAlchemy 的数据库迁移工具,主要用于管理数据库模式(Schema)的变更,例如新增表、修改字段、删除索引等,确保数据库结构与应用程序的 ORM 模型保持一致。 Alembic 通过版…...
【视频】V4L2、ffmpeg、OpenCV中对YUV的定义
1、常见的YUV格式 1.1 YUV420 每像素16位 IMC1:YYYYYYYY VV-- UU– IMC3:YYYYYYYY UU-- VV– 每像素12位 I420: YYYYYYYY UU VV =>YUV420P YV12: YYYYYYYY VV UU =>YUV420P NV12: YYYYYYYY UV UV =>YUV420SP(最受欢迎格式) NV21: YYYYYYYY VU VU =>YUV420SP…...
ubuntu20.04装nv驱动的一些坑
**1.一定要去bios里面关闭secure boot,否则驱动程序需要签名,安装了的驱动无法被识别加载 2.假如没有关闭secure boot然后装了驱动,然后再去关闭secure boot,可能会导致进入不了ubuntu的情况 此时,先恢复secure boot&…...