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

LVS详细解析及其NAT模式与DR模式部署(理论+实验全方位指导)

目录

1. 集群

2. 分布式系统

3. 集群与分布式的比较

4.通俗的解释

集群

分布式系统

总结

LVS(Linux Virtual Server)简介

LVS专业术语

工作原理

LVS调度算法

静态调度算法

动态调度算法

ipvsadm脑图

 NAT模式集群

 LVS的配置

 在LVS主机内打开内核路由策略

主机3:webserver2

 在主机检测rs

 下载ipvsadm

 在主机上测试

 DR模式部署 

LVS网络配置

 路由器网络配置

 打开路由内核策略

客户端

web1

web2

 LVS策略设定

 防火墙mark标记解决调度问题

防火墙mark标记

实现方法:

在Director主机打标记 

在Director主机基于标记定义集群服务:

LVS 持久链接(Session 会话问题解决)


集群与分布式系统概念

1. 集群

定义: 集群是由多台计算机组成的系统,这些计算机协同工作,以解决特定的问题或提供特定服务。

类型:

  • 负载均衡 (Load Balancing, LB): 由多个主机组成,每台主机只承担一部分负载。负载均衡器根据负载情况将请求分配到不同的主机。
  • 高可用 (High Availability, HA): 通过冗余配置避免单点故障 (SPOF),确保系统持续可用。
  • 可扩展性: 可以通过增加更多主机来扩展系统的处理能力。

关键指标:

  • MTBF (Mean Time Between Failures): 平均无故障时间。
  • MTTR (Mean Time To Restoration): 平均恢复时间。
  • 可用性 (A): 计算公式为 A=MTBFMTBF+MTTRA=MTBF+MTTRMTBF​。常见的可用性水平有 99%、99.5%、99.9%、99.99%、99.999%。
2. 分布式系统

定义: 分布式系统将业务拆分为多个子业务或功能模块,这些模块在不同的服务器上运行,以提供服务或完成任务。

类型:

  • 分布式存储: 例如 Ceph、GlusterFS、FastDFS 和 MogileFS。
  • 分布式计算: 例如 Hadoop 和 Spark。

常见应用:

  • 分布式应用: 将服务按功能拆分,使用微服务架构。
  • 分布式静态资源: 静态资源存储在不同的存储集群中。
  • 分布式数据和缓存: 使用 Key-Value 缓存系统。
  • 分布式计算: 针对特定业务需求使用分布式计算框架。
3. 集群与分布式的比较
  • 集群: 在多台服务器上部署同一业务系统,每台服务器的功能和数据一致。集群通过增加并行处理能力提高效率,主要依靠负载均衡器分配请求。如果一台服务器故障,其他服务器可以接管其任务。

  • 分布式: 业务被拆分为多个子业务或功能,每台服务器负责不同的任务。分布式系统提高效率的方法是缩短单个任务的执行时间。如果某个节点出现故障,可能会导致对应的子业务失败。

4.通俗的解释

你的比喻很有趣,但可以稍微调整一下,以更准确地描述集群和分布式系统的特点:

集群

比喻银行的多个服务窗口

解释: 想象银行有多个服务窗口(1号窗口、2号窗口等),每个窗口提供相同的服务(例如办理存款、取款等)。这些窗口一起工作,以提高处理客户的效率。如果一个窗口(服务器)忙碌或者出现问题,其他窗口(服务器)可以继续工作,确保服务的连续性和提高处理速度。所有窗口(服务器)都处理相同类型的任务,通过增加窗口数量(服务器),银行能够处理更多的客户(请求)。

分布式系统

比喻搬家中的分工

解释: 想象你和你的朋友在搬家。你负责搬冰箱,另一个朋友负责搬电脑。虽然你们的目标都是完成搬家,但你们各自负责不同的任务。你们将工作分解成不同的部分,通过并行处理来提高整体搬家的效率。如果你负责搬冰箱时,另一个人同时负责搬其他物品,这样可以更快地完成整个搬家任务。每个人(节点)专注于不同的任务(子任务),但最终的目标是一样的,即完成搬家。

总结

  • 集群: 比如银行的多个服务窗口,所有窗口提供相同的服务,关注的是通过增加相同类型的服务窗口来提高处理能力(吞吐量)。

  • 分布式系统: 比如搬家时的任务分工,每个人负责不同的物品,关注的是通过任务分解和并行处理来提高整体工作效率(加速单个任务的完成)。

通过这两个比喻,可以清楚地看到集群关注的是增加相同类型服务的处理能力,而分布式系统关注的是通过任务分解和并行处理来提高处理效率。

LVS(Linux Virtual Server)简介

LVS(Linux Virtual Server)是一个由章文嵩博士发起的自由软件项目,提供高性能的负载均衡解决方案。LVS集成于Linux内核中,主要用于在多个后端服务器之间分发客户端请求,以实现高可用性和负载均衡。

LVS专业术语
  • DR: Director(负载均衡器,分发器)
  • VS: Virtual Server(负载均衡集群对外提供的IP+Port)
  • RS: Real Server(后端请求处理服务器)
  • CIP: Client IP(客户端访问的IP)
  • VIP: Virtual IP(外网访问的虚拟IP)
  • DIP: Director IP(负载均衡器IP)
  • RIP: Real Server IP(后端服务器IP)
工作原理

LVS根据请求报文的目标IP和端口,将请求调度到后端的某个RS。调度的选择基于配置的算法,从而实现负载均衡。用户请求LVS的VIP,LVS根据转发方式和调度算法,将请求转发给后端服务器,后端服务器处理请求并将结果返回给用户。用户无法感知到具体的后端服务器。

 访问流程:CIP <--> VIP == DIP <--> RIP

LVS调度算法
静态调度算法
  • RR(Round Robin): 轮询调度,每个RS按顺序处理请求。适用于RS能力相近的场景。
  • WRR(Weighted Round Robin): 加权轮询,根据RS的权重进行调度。性能差的RS被调度的次数较少。
  • SH(Source Hashing): 源IP哈希,将来自同一IP的请求始终发送到同一个RS,实现会话绑定(session sticky)。
  • DH(Destination Hashing): 目标地址哈希,将同一目标地址的请求始终发送到同一个RS,适用于正向代理缓存场景。
动态调度算法
  • LC(Least Connections): 最少连接数,将请求发送到活动连接数最少的RS。适用于长连接应用。
  • WLC(Weighted Least Connections): 权重最少连接数,根据RS的权重和连接数进行调度。
  • SED(Shortest Expectation Delay): 短期待延迟,优先调度初始连接数较高的RS,但权重较低的RS可能在初期会接收更多请求。
  • NQ(Never Queue): 第一轮均匀分配,之后使用SED算法。
  • LBLC(Locality-Based Least Connections): 基于位置的最少连接数,将请求分配给负载较轻的RS,适用于正向代理。
  • LBLCR(LBLC with Replication): 带复制功能的LBLC,解决LBLC负载不均衡的问题,通过将负载重的请求复制到负载轻的RS。

通过这些算法,LVS能够有效地在多台后端服务器之间分配负载,优化资源利用,提升系统的整体性能和可靠性。

ipvsadm脑图

 NAT模式集群

 

 

环境准备

从RHEL9.4母机中克隆出三台主机

主机1:LVS

添加一张网卡eth1,网络设定为仅主机模式,原有的eth0网络为nat模式。

eht0:运行脚本设定网络eth0------ip为172.25.254.100、网关172.25.254.2 主机名lvs.xie.org

eht1:运行脚本设定网络eth1----ip为192.268.0.100、主机名lvs.xie.org。网卡配置文件删掉网关

 

 

 

 LVS的配置
[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.100/24
method=manual
[root@LVS ~]# nmcli connection reload
[root@LVS ~]# nmcli connection up eth0 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@LVS ~]# nmcli connection up eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@LVS ~]# 
 在LVS主机内打开内核路由策略
[root@LVS ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@LVS ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1

 

主机2:web1

网络设定为eth0仅主机模式。运行脚本设定eth0、ip为192.168.0.10 主机名web1.xie.org ,修改网关为192.168.0.100

配置文件

[root@web1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
[root@web1 ~]# dnf install httpd -y
[root@web1 ~]# curl 192.168.0.10
web1
[root@web1 ~]# echo web1 > /www/html/index.html
[root@web1 ~]# systemctl restart httpd

 

主机3:webserver2

网络设定为eth0仅主机模式。运行脚本设定eth0、ip为192.168.0.20 主机名webserver2.xie.org ,修改网关为192.168.0.100

配置文件

[root@web2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
[root@web2 ~]# dnf install httpd -y
[root@web2 ~]# echo web1 > /www/html/index.html
[root@web2 ~]# systemctl restart httpd
 在主机检测rs
[root@LVS ~]# curl 192.168.0.10
web1
[root@LVS ~]# curl 192.168.0.20
web2
 下载ipvsadm
[root@LVS ~]# dnf install ipvsadm -y[root@LVS ~]#  ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@LVS ~]#  ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
Destination already exists
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.0.10:80              Masq    1      0          0         -> 192.168.0.20:80              Masq    1      0          0   
[root@LVS ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@LVS ~]# systemctl enable --now ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
 在主机上测试
[root@LVS ~]# for i in {1..10};do curl 172.25.254.100;done
web2
web1
web2
web1
web2
web1
web2
web1
web2
web1

以上步骤成功实现了负载均衡。测试中使用不同的 Web 服务内容只是为了更明显地观察实验结果。在实际企业环境中,服务内容通常是相同的。这样配置可以有效地分配负载,提升系统的可靠性和性能。

 

 DR模式部署 

环境准备

本次实验需要准备5台Linux虚拟机,分别作为client,router(路由器服务),lvs调度器,web1,web2.。其具体网卡,IP要求如下图表所示

LVS网络配置
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
[root@lvs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1
 路由器网络配置
#eth0网卡设定NAT模式 IP为172.25.254.100#eth1网卡设定仅主机模式 IP为192.168.0.100 [root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.100/24
method=manual
[root@router ~]# 
 打开路由内核策略
[root@router ~]#  sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@router ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
客户端
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual
[root@client ~]# nmcli connection reload 
[root@client ~]# nmcli connection up eth0 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root@client ~]# 
web1
[root@web1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
[root@web1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root@web1 ~]# 
web2
[root@web2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
[root@web2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
# 直接利用环回接口设定VIP
[root@lvs ~]# ip a a 192.168.0.200/32 dev lo[root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo
 LVS策略设定
[root@lvs ~]#  ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs ~]#  ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr-> 192.168.0.10:80              Route   1      0          0         -> 192.168.0.20:80              Route   2      0          0         
[root@lvs ~]# 

在客户端访问

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
web2
web1
web2
web2
web1
web2
web2
web1
web2
web2
[root@client ~]# 
 防火墙mark标记解决调度问题

以 HTTP 和 HTTPS 为例,当我们在 Real Servers (RS) 上同时开放 80 和 443 端口时,默认情况下,这两个端口会被分开轮询。这意味着 HTTP 请求和 HTTPS 请求会独立地进行轮询,可能会导致轮询不一致的问题。

例如,如果第一次访问 HTTP (80 端口) 的请求被轮询到 RS1,那么下次访问 HTTPS (443 端口) 的请求仍有可能被轮询到 RS1。这种轮询错乱现象可能会影响负载均衡的效果。

# 在RS1和RS2中安装mod_ssl模块,让RS支持https,重启apache
[root@web1 ~]#  yum install mod_ssl -y
[root@web1 ~]#  systemctl restart httpd[root@web2 ~]#  yum install mod_ssl -y
[root@web2 ~]#  systemctl restart httpd#在lvs上测试以下   -k表示访问时忽略证书
[root@lvs ~]# curl -k https://192.168.0.10
web1# 在LVS上添加对于443端口的策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr-> 192.168.0.10:80              Route   1      0          0         -> 192.168.0.20:80              Route   2      0          0         
TCP  192.168.0.200:443 rr-> 192.168.0.10:443             Route   1      0          0         -> 192.168.0.20:443             Route   1      0          0         
[root@lvs ~]# 

在这种情况下,两个集群调度的主机相同会导致轮询错乱的问题。当客户端发起请求时,两个请求可能都被轮询到同一台主机上。我们期望的是第一个请求到达 web1,第二个请求到达 web2,以确保合理的负载分配。为了实现这一目标,我们可以使用 mark 标记来优化调度策略,通过对请求进行标记,确保请求在不同的 Real Servers 上进行轮询,从而避免上述问题。

[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2
web2
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web1
web1
防火墙mark标记

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记 --set-mark value

其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服务:可将多个不同的应用使用同一个集群服务进行调度

实现方法:
在Director主机打标记 
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports
$portl,$port2,..-i MARK --set-mark NUMBER
在Director主机基于标记定义集群服务:
ipvsadm -A -f NUMBER [options]
# 清空策略
[root@lvs ~]#  ipvsadm -C
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 66
[root@lvs ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
MARK       tcp  --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x42Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs ~]#  ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  66 rr-> 192.168.0.10:0               Route   1      0          0         -> 192.168.0.20:0               Route   1      0          0         

此时就能防止访问多个端口的时候访问到同一台主机,使这台主机压力过大的问题。把两个端口用标记捆绑到一起被视为同一个,然后访问标记开始轮询。

LVS 持久链接(Session 会话问题解决)

在我们客户的上网过程中,存在诸多情形需要与服务器进行交互,客户需要向服务器提交响应信息。倘若单纯地进行调度,会致使客户填写的表单丢失。为处理此问题,我们能够运用 sh 算法,然而 sh 算法相对简单直接,或许会引发调度不均衡的状况。

解决方案

在进行调度时,不论采用何种算法,只要是相同来源的数据包,我们就将其访问记录于内存之中,即把这个源的主机调度至特定的 RS 上。

若在短期内(默认为 360 秒),同源再次访问,我们依旧依据内存中的记录调度信息,将这个源的访问依旧调度至同一台 RS 上。

要是经过了较长时间(默认最长时间为 360 秒),同源访问再度来访,那么就会被调度至其他的 RS 上

ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]默认60秒# 在lvs调度器中设定[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000][root@lvs ~]# ipvsadm -LnC

测试

[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2
web1
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2
web1
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2
web1
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2
web1
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2
web1

问题完美解决

相关文章:

LVS详细解析及其NAT模式与DR模式部署(理论+实验全方位指导)

目录 1. 集群 2. 分布式系统 3. 集群与分布式的比较 4.通俗的解释 集群 分布式系统 总结 LVS&#xff08;Linux Virtual Server&#xff09;简介 LVS专业术语 工作原理 LVS调度算法 静态调度算法 动态调度算法 ipvsadm脑图 NAT模式集群 LVS的配置 在LVS主机内打开…...

负载均衡相关概念介绍(一)

负载均衡&#xff08;Load Balance&#xff09;是集群技术的一种重要应用&#xff0c;旨在将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行&#xff0c;从而提高系统的并发处理能力、增加吞吐量、加强网络处理能力&#xff0c;并提供故障转移以…...

二叉树详解(1)

文章目录 目录1. 树的概念及结构1.1 树的相关概念1.2 树的表示1.3 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2. 二叉树的概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的存储结构 3. 二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2 堆的概念及结构…...

Spring定时任务注解

Service EnableScheduling public class xxxServiceImpl implement xxxService{Scheduled(cron "0 15 11 * * ?") // 每天的11:15执行public void reportCurrentTime() {aaa();}Scheduled(cron "0 15 17 * * ?") // 每天的17:15执行public void report…...

数据结构-绪论

学习目标&#xff1a; 认识数据结构的基本内容 学习内容&#xff1a; 了解&#xff1a;数据结构的研究内容掌握&#xff1a;数据结构的基本概念和术语了解&#xff1a;数据元素间的结构关系掌握&#xff1a;算法及算法的描述 数据结构的发展&#xff1a; 数据结构的发展简史 …...

Web开发:web服务器-Nginx的基础介绍(含AI文稿)

目录 一、Nginx的功能&#xff1a; 二、正向代理和反向代理的区别 三、Nginx负载均衡的主要功能 四、nginx安装目录下的各个文件&#xff08;夹&#xff09;的作用&#xff1a; 五、常用命令 一、Nginx的功能&#xff1a; 1.反向代理&#xff1a;例如我有三台服务器&#x…...

共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…...

Linux 服务器上简单配置 minio

Linux 服务器上简单配置 minio 初始化结构目录 mkdir -p /data/minio/bin mkdir -p /data/minio/conf mkdir -p /data/minio/data 下载 minio cd /data/minio/bin curl -O https://dl.min.io/server/minio/release/linux-amd64/minio 添加执行权限 chmod x minio 创建配置文件…...

TypeScript 面试题汇总

引言 TypeScript 是一种由微软开发的开源、跨平台的编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;为 JavaScript 添加了静态类型系统和其他高级功能。随着 TypeScript 在前端开发领域的广泛应用&#xff0c;掌握 TypeScript 已经成为很多开发者必备的技能之一。本文…...

杰卡德系数

杰卡德系数&#xff08;Jaccard Index 或 Jaccard Similarity Coefficient&#xff09; 杰卡德系数是一种用于衡量两个集合相似度的重要指标。 从数学定义上来看&#xff0c;如前面所述&#xff0c;杰卡德系数计算公式为&#xff1a; J ( A , B ) ∣ A ∩ B ∣ ∣ A ∪ B ∣…...

微服务实现-sleuth+zipkin分布式链路追踪和nacos配置中心

1. sleuthzipkin分布式链路追踪 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多微服务。这些模块负责不同的功能&#xff0c;组合成系统&#xff0c;最终可以提供丰富的功能。 这种架构中&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软…...

数学中常用的解题方法

文章目录 待定系数法应用示例1. 多项式除法2. 分式化简3. 数列通项公式 总结 递归数列特征方程特征根的求解通项公式的求解示例 错位相减&#xff0c;差分错位相减法差分的应用结合理解 韦达定理二项式定理二项式定理的通项公式二项式系数的性质应用示例 一元二次求解1. 因式分…...

pytorch 1 张量

张量 文章目录 张量torch.Tensor 的 主要属性torch.Tensor 的 其他常用属性和方法叶子张量&#xff08;Leaf Tensors&#xff09;定义叶子张量的约定深入理解示例代码总结 中间计算结果与 detach() 方法定义中间计算结果不是叶子节点使用 detach() 方法使中间结果成为叶子张量示…...

音视频开发继续学习

RGA模块 RGA模块定义 RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。比方说&#xff1a;要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频&#xff0c;此时就要用到RGA模块了。 RGA模块结构体定义 RGA区域属性结构体 imgType&am…...

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task1:智能编程助手(持续更新)

在一个数据驱动的世界里&#xff0c;人工智能的未来应由每一个愿意学习和探索的人共同塑造和掌握。希望这里是你实现AI梦想的起点。 大模型小白入门&#xff1a;https://linklearner.com/activity/14/11/25 大模型开发工程师能力测试&#xff1a;https://linklearner.com/activ…...

如何判断监控设备是否支持语音对讲

目录 一、大华摄像机 二、海康摄像机 三、宇视摄像机 一、大华摄像机 注意&#xff1a;大华摄像机支持跨网语音对讲&#xff0c;即设备和服务器可以不在同一网络内&#xff0c;大华设备的语音通道填写&#xff1a;34020000001370000001 配置接入示例&#xff1a; 音频输入…...

Grafana+Influxdb(Prometheus)+Apache Jmeter搭建可视化性能测试监控平台

此性能测试监控平台&#xff0c;架构可以是&#xff1a; GrafanaInfluxdbJmeterGrafanaPrometheusJmeter Influxdb和Prometheus在这里都是时序性数据库 在测试环境中&#xff0c;压测数据对存储和持久化的要求不高&#xff0c;所以这里的组件可以都通过docker-compose.yml文件…...

【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)

一.创建新工程 找到"driverlib\empty"空白工程&#xff0c;CTRLC然后CTRLV复制副本 重命名为G3507_RTT 打开KEIL工程 双击empty.syscfg&#xff0c;然后打开SYSCONFIG 我的不知道为啥没有48pin选项&#xff0c;如果你也一样&#xff0c;可以跟着我做&#xff0c;如果…...

计算机毕业设计 美发管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

1.环境信息 开发工具&#xff1a;idea 接口测试工具&#xff1a;soapui 编程语言&#xff1a;java 项目环境&#xff1a;jdk1.8 webservice&#xff1a;jdk自带的jws 处理xml&#xff1a;jdk自带的jaxb 2.涉及代码 package org.example.webdemo;import javax.jws.WebMethod; i…...

GB/T35561-2017d,GB/T38565-2020,ocr解析文本

因系统需要只找到pdf版本&#xff0c;解析一版记录 GB/T35561-2017d 10000 , 自然灾害 10100 , 水旱灾害 10101 , 洪水 10102 , 内涝 10103 , 水库重大险情 10104 , 堤防重大险情 10105 , 凌汛 10106 , 山洪 10107 , 农业干旱 10108 , 城镇缺水 10109 , 生态干旱 10110 , 农村…...

IDEA使用LiveTemplate快速生成方法注释

本文目标&#xff1a;开发人员&#xff0c;在了解利用Live Template动态获取方法输入输出参数、创建日期时间方法的条件下&#xff0c;进行自动生成方法注释&#xff0c;达到自动添加方法注释的程度&#xff1b; 文章目录 1 场景2 要点2.1 新增LiveTemplate模版2.2 模版内容填写…...

慢SQL优化

1、避免使用select * select * 不会走覆盖索引&#xff0c;会出现大量的回表操作&#xff0c;从而导致查询sql的性能很低。 --反例 select * from user where id 1;--正例 select name,age from user where id 1;2、union all 代替 union union&#xff1a;去重后的数据…...

MES生产执行系统源码,支持 SaaS 多租户,技术架构:springboot + vue-element-plus-admin

MES的定义与功能 MES是制造业中一种重要的管理信息系统&#xff0c;用于协调和监控整个生产过程。它通过收集、分析和处理各种生产数据&#xff0c;实现对生产流程的实时跟踪和监控&#xff0c;并为决策者提供准确的数据支持。MES涵盖了工厂运营、计划排程、质量管理、设备维护…...

【Linux】分析hung_panic生成的vmcore

简介 1、遇到一个问题&#xff1a; 上述日志是oom_kill&#xff0c;下述日志是hung_panic 2、分别解释两层含义&#xff0c;全部日志如下&#xff1a; [75834.243209] kodo invoked oom-killer: gfp_mask0x600040(GFP_NOFS), order0, oom_score_adj968 [75834.245657] CPU: 0…...

unity 画线写字

效果 1.界面设置 2.涉及两个脚本UIDraw.cs和UIDrawLine.cs UIDraw.cs using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class UIDraw : MonoBehaviour, IPointerEnterHandler, IPointerEx…...

GitHub的详细介绍

GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;它建立在Git这个分布式版本控制系统之上&#xff0c;为开发者提供了在云端存储、管理和共享代码的便捷方式。以下是对GitHub的详细介绍&#xff1a; ### 一、GitHub的基本功能 1. **代码托管**&#xff1a;GitHub允…...

【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面之Tabs(三)

学完时间&#xff1a;2024年8月14日 一、前言叨叨 学习HarmonyOS的第六课&#xff0c;人数又成功的降了500名左右&#xff0c;到了3575人了。 本文接上一文章【鸿蒙学习】HarmonyOS应用开发者基础 - 构建更加丰富的页面&#xff08;一&#xff09;&#xff0c;继续记录构建更…...

Detectron2 安装指南

文章目录 前言Detectron2官方文档官方指南 安装 Detectron2虚拟环境安装 PyTorch安装 Detectron2 总结 前言 Detectron2 是 Meta AI 的一个机器视觉相关的库&#xff0c;建立在 Detectron 和 maskrcnn-benchmark 基础之上&#xff0c;可以进行目标检测、语义分割、全景分割&am…...

亚马逊 Linux mysql5.7 安装纪录

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz cp /home/admin/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz /usr/local/mysql #解压压缩包 tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 重命名mysql-…...

昌乐哪里有做网站的/互联网营销师考试

其它信息 下载: http://cdn.cocos2d-x.org/cocos2d-x-3.0alpha1.zip 完整的更新日志: https://github.com/cocos2d/cocos2d-x/blob/cocos2d-x-3.0alph1/CHANGELOG API 参考&#xff1a;http://www.cocos2d-x.org/reference/native-cpp/V3.0alpha1/index.html 要求 运行环境…...

什么是营销型的网站推广/网站制作公司网站

数据科学项目中使用Python编程语言的每个人的重要文章在Medium上&#xff0c;这个主题没有很好地介绍&#xff0c;因此我决定以一种易于理解的方式概述Python数据结构的时间复杂性。为什么我们需要知道时间复杂性&#xff1f;对于数据科学家程序员而言&#xff0c;为工作选择正…...

赣州市南康建设局网站/网站服务器多少钱一年

01 Elasticsearch x-pack 监控工具 x-pack 是 Elastic Stack 扩展的功能&#xff0c;提供安全性&#xff0c;警报&#xff0c;监视&#xff0c;报告&#xff0c;机器学习和许多其他功能。 ES7.0之后&#xff0c;默认情况下&#xff0c;当安装Elasticsearch时&#xff0c;会安装…...

郑州市做网站的/优化公司排行榜

R1、R5路由器用动态路由协议OSPF来宣告路由&#xff1b;R2、R4建立BGP邻居&#xff0c;连接R1、R5、R6、R7的接口启动vrf空间&#xff0c;配置MPLS-&#xff0c;生成V4下的BGP表&#xff1b;R2、R3、R4用MPLS防止路由黑洞&#xff0c;R2、R4通过双向重发布是全网获得所有路由&a…...

自己免费做网站的流程/百度大数据查询怎么用

源码下载 http://www.byamd.xyz/hui-zong-1/1&#xff0e;引言 1.1编写目的 合同管理系统详细设计是设计的第二个阶段&#xff0c;这个阶段的主要任务是在合同管理系统概要设计书基础上&#xff0c;对概要设计中产生的功能模块进行过程描述&#xff0c;设计功能模块的内部细…...

wordpress全屏主题/企业宣传方式有哪些

目录 一、绑定 HTML class 1. 绑定对象 2. 绑定数组 3. 在组件上使用 二、绑定内联样式 1. 绑定对象 2. 绑定数组 3. 自动前缀 4. 样式多值 数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute&#xff0c;我们可…...