LVS(Linux virtual server)

简介

即linux虚拟服务器

四层负载均衡基本上都会使用 LVS,据了解 BAT 等大厂都是 LVS 重度使用者,就是因为 LVS 非常出色的性能,能为公司节省巨大的成本。LVS,全称 Linux Virtual Server 是由国人章文嵩博士发起的一个开源的项目,在社区具有很大的热度,是一个基于四层、具有强大性能的反向代理服务器。它现在是标准内核的一部分。

它具备可靠性、高性能、可扩展性和可操作性的特点,从而以低廉的成本实现最优的性能。LVS工作模式分为NAT模式、TUN模式、以及DR模式

相关术语:

DS:Director Server。指的是前端负载均衡器节点。

RS:Real Server。后端真实的工作服务器。

VIP:Virtual IP 向外部直接面向用户请求,作为用户请求的目标的IP地址。

DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

RIP:Real Server IP,后端服务器的IP地址。

CIP:Client IP,访问客户端的IP地址。

结构

LVS采用三层结构,分别是:

第一层: 负载调度器

第二层: 服务池

第三层:共享存储

负载调度器(load balancer/ Director),是整个集群的总代理,它有两个网卡,一个网卡面对访问网

站的客户端,一个网卡面对整个集群的内部。负责将客户端的请求发送到一组服务器上执行,而客户也

认为服务是来自这台主的。举个生动的例子,集群是个公司,负载调度器就是在外接揽生意,将接揽到

的生意分发给后台的真正干活的真正的主机们。当然需要将活按照一定的算法分发下去,让大家都公平

的干活。

服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,可以当做WEB服务器。就

是上面例子中的小员工。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相

同的内容,提供相同的服务。一个公司得有一个后台账目吧,这才能协调。不然客户把钱付给了A,而

换B接待客户,因为没有相同的账目。B说客户没付钱,那这样就不是客户体验度的问题了。

负载均衡策略

LVS的DR模式

DR:direct routing(直接路由技术)

原理:

  1. 客户端发送请求到DS的 VIP,数据包的目标 IP 为 VIP,目标 MAC 为调度器的 MAC

  2. 调度器接收数据包,根据负载均衡算法选择 RS

  3. 调度器不修改 IP 地址,仅将数据包的目标 MAC 地址改为 RS 的 MAC(通过 ARP 获取 RS 的 MAC 地址),然后转发给 RS。此时数据包的目标 IP 仍为 VIP,源 IP 为CIP

  4. RS 收到数据包后,发现目标 IP 是自身配置的 VIP(虽禁用 ARP 响应,但可接收发往 VIP 的数据包),于是处理请求并生成响应

  5. RS 直接将响应数据包返回给客户端(源 IP 为 VIP,目标 IP 为客户端 IP),无需经过调度器

RS 响应时使用 VIP 作为源 IP,客户端认为响应来自调度器(VIP),实现了负载均衡的透明性

  • 优点:响应速度快,因为后端服务器可以直接将响应返回给客户端,减轻了 LVS 负载均衡器的压力。

  • 限制

  • 所有服务器需要在同一个物理网络中,并且后端服务器的网关不能指向 LVS 负载均衡器。调度器与 RS 必须在同一网段(受 MAC 广播限制)

  • RS 需配置 VIP 并禁用 ARP 响应

firewall-cmd --add-masquerade
其作用是开启网络地址转换(NAT)功能,也称为 IP 伪装(Masquerading)

特性

1.请求报文一定经过ds,而返还结果一定不经过ds,直接发给client

2.rs和ds要在同一物理网络中

案例
ip配置

client

router

 lvs

rs1

rs2

1.在router中启动路由内核功能
[root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
2.在rs1和rs2中解决相应问题
DR 模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各 RS 使用 arptables
(3) 在各 RS 修改内核参数,来限制 arp 响应和通告的级别
限制响应级别 :arp_ignore
0: 默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别 :arp_announce
0: 默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1: 尽量避免将接口信息向非直接连接网络进行通告
2: 必须避免将接口信息向非本网络进行通告
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
3.在rs1和2中安装httpd,关闭防火墙
[root@RS1 ~]# yum install httpd -y 
[root@RS1 ~]# echo "welcome to RS1 - 192.168.0.10" > /var/www/html/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS1 ~]# systemctl stop firewalld
[root@RS1 ~]# yum install httpd -y 
[root@RS1 ~]# echo "welcome to RS1 - 192.168.0.10" > /var/www/html/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS1 ~]# systemctl stop firewalld
4.lvs中安装ipvsadm添加策略
[root@lvs ~]# yum install ipvsadm -y[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 ~]# systemctl stop firewalld
测试
[root@client ~]# for i in {1..10}; do curl 192.168.0.200; done
welcome to RS2 - 192.168.0.20
welcome to RS1 - 192.168.0.10
welcome to RS2 - 192.168.0.20
welcome to RS2 - 192.168.0.20
welcome to RS1 - 192.168.0.10
welcome to RS2 - 192.168.0.20
welcome to RS2 - 192.168.0.20
welcome to RS1 - 192.168.0.10
welcome to RS2 - 192.168.0.20
welcome to RS2 - 192.168.0.20

LVS的NAT模式

NAT:network address translation(网络地址翻译)

  1. 当用户请求到达Director Server。此时报文的源IP为CIP,目标IP为VIP

  2. DS接收数据包,根据负载均衡算法选择一台RS

    调度器修改数据包的目标 IP 地址为 RS 的 IP,同时记录连接状态(通过 NAT 表或 conntrack 跟踪),然后转发给 RS

  3. Real Server收到数据包开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP

  4. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

  5. 将修改后的响应数据包转发给客户端,完成一次请求响应流程

  • 优点:配置简单,只需要一个公网 IP 地址就可以实现负载均衡。

  • 缺点:LVS 负载均衡器需要处理所有的请求和响应,容易成为性能瓶颈;而且后端服务器必须将网关指向 LVS 负载均衡器。

特性

1. dip和rip在同一网段

2.RS使用私有地址,网关指向DIP

3.请求和响应报文都需要经过Director Server

案例
ip配置

lvs配置

在 lvs 中启用内核路由功能

[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

添加策略 

设置lvs策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[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
[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   

安装ipvsadm 

[root@lvs ~]# yum install ipvsadm -y
在rs1和r2中安装httpd,关闭防火墙
[root@webserver1 ~]# yum install httpd -y 
[root@webserver1 ~]# echo "welcome to webserver1 - 192.168.0.10" > /var/www/html/index.html
[root@webserver1 ~]# systemctl restart httpd
[root@webserver1 ~]# systemctl stop firewalld
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo "welcome to webserver2 - 192.168.0.20" > /var/www/html/index.html
[root@webserver2 ~]# systemctl restart httpd
[root@webserver2 ~]# systemctl stop firewalld
测试
[root@client ~]# for i in {1..10}; do curl 172.25.254.100; done
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10

LVS的TUN模式

Tunnel 模式在国内使用的比较少,不过据说腾讯使用了大量的 Tunnel 模式。它也是一种单臂的模式,只有请求数据会经过 lvs,响应数据直接从后端服务器发送给客户端,性能也很强大,同时支持跨机房。下边继续看图分析原理

  1. 客户端请求阶段

    • 客户端发送请求到调度器的 VIP,数据包的目标 IP 为 VIP,源 IP 为客户端 IP。

    • 调度器接收数据包,根据负载均衡算法选择 RS。

    • 关键操作:调度器将原始数据包封装在新的 IP 数据包中(外层 IP 头的源 IP 为调度器 IP,目标 IP 为 RS 的 IP),通过 IP 隧道转发给 RS。此时原始数据包的目标 IP 仍为 VIP,源 IP 为客户端 IP。

  2. RS 解封装与响应阶段

    • RS 收到隧道数据包后,解封装获取原始数据包,发现目标 IP 是自身配置的 VIP,于是处理请求并生成响应。

    • RS 直接将响应数据包返回给客户端(源 IP 为 VIP,目标 IP 为客户端 IP),无需经过调度器。

    • 关键逻辑:RS 响应时使用 VIP 作为源 IP,客户端认为响应来自调度器(VIP),实现跨网段的负载均衡

  • 优点:后端服务器可以分布在不同的地理位置,扩展性好;LVS 负载均衡器只处理请求的转发,压力相对较小。

  • 缺点:配置复杂,需要支持 IP 隧道协议;增加了数据包的封装和解封装过程,会带来一定的性能开销。

调度算法

静态算法
rr

RR(轮询:Round Robin), 算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。特点是将收到的访问请求按顺序轮流分配给集群中的各节点真实服务器中,不管服务器实际的连接数和系统负载。轮询 RS分别被调度,当RS配置有差别时不推荐

wrr

WRR(加权轮询:Weighted Round Robin),算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

sh

SH( 源地址散列调度:Source Hashing )源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

dh

目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

DH(目标地址散列调度:Destination Hashing )算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

动态算法
  1. LC(最小连接调度:Least Connections )算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数) (集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)  

  1. WLC(加权最少连接:(Weight Least Connections )算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

  2. LBLC(基于局部的最少连接调度:Locality-Based Least Connections )算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

  3. LBLCR(带复制的基于局部性的最少连接:Locality-Based Least Connections with Replication )算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

  4. SED (最短的期望的延迟调度:Shortest Expected Delay )算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算 A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。 预期的延迟时间为(Ci +1)/ Ui,其中 Ci 是第 i 个服务器上的连接数,而 Ui 是第 i 个服务器的固定服务速率(权重)

初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接  

  1. NQ(最少队列调度:Never Queue )算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

软件相关信息

配置文件:/etc/sysconfig/ipvsadm-config
程序包: ipvsadm
Unit File: ipvsadm.service
主程序: /usr/sbin/ipvsadm
规则保存工具: /usr/sbin/ipvsadm-save
规则重载工具: /usr/sbin/ipvsadm-restore
ipvs 调度规则文件: /etc/sysconfig/ipvsadm

ipvsadm

ipvsadm命令是LVS在应用层的管理命令,我们可以通过这个命令去管理LVS的配置。
ipvsadm是一个工具,同时它也是一条命令,用于管理LVS的策略规则。

子命令
--add-service     -A        添加一个集群服务,需要使用选项--edit-service    -E        编辑一个集群服务,需要使用选项--delete-service  -D        删除指定集群服务,需要使用选项--clear           -C        删除所有集群服务,包括真实服务器转发策略规则--restore         -R        从标准输入中恢复策略规则--save            -S        保存策略规则到标准输出--add-server      -a        添加一个真实服务器,需要使用选项--edit-server     -e        编辑一个真实服务器,需要使用选项--delete-server   -d        删除一个真实服务器,需要使用选项--list            -L|-l     查看集群服务列表,包括真实服务器转发策略规则--zero            -Z        计数器清零。清除连接数、包转发等数量统计信息
--set <超时时间>            设置TCP、TCPFIN(TCP关闭连接状态)、UDP连接超时时间,用于会话保持。一般情况下TCP和UDP超时时间保持默认就好,TCPFIN可以根据情况设定,指定它则用户请求连接关闭,该连接则会变为非活跃(InActive)空闲等待状态,在空闲等待时间内,如果来自同一源IP的请求,则还会转发给后端的同一台真实服务器上--start-daemon              开启连接同步守护进程。在选项后面指定自己是Master(主)还是backup(备),主负载调度器会同步所有策略及连接状态到备负载调度器,当主故障,备可以接替其工作--stop-daemon               停止连接同步守护进程--help            -h        显示帮助信息

选项
--tcp-service  -t  <集群服务地址>   允许集群服务使用的传输协议为TCP。<IP:Port>--udp-service  -u <集群服务地址>    允许集群服务使用的传输协议为UDP。<IP:Port>--fwmark-service  -f <防火墙标识>   使用一个整数值来防火墙标识集群服务,而不是地址、端口和协议使用它,我们可以通过结合IPtables将多个以调度器为目标的端口定义成一个防火墙标识,由ipvsdam通过此项关联标识,则可以实现对一个IP多端口调度,即实现后端服务器可以开放多个服务--scheduler    -s scheduler         指定集群服务使用的调度算法:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认为wlc--persistent   -p <超时时间>        开启持久化服务,开启它则表示在指定时间内,来自同一IP的请求都会转发到后端同一台真实服务器上--netmask      -M <网络掩码>        使用网络掩码来屏蔽持久化来源IP的地址范围,默认值为255.255.255.255,即所有来源IP请求都会享受持久化服务--real-server  -r <真实服务器地址>  指定真实服务器的主机IP与端口--gatewaying   -g                   指定真实服务器转发工作模式,使用DR模式,默认--ipip         -i                   指定真实服务器转发工作模式,使用TUN模式--masquerading -m                   指定真实服务器转发工作模式,使用NAT模式--weight       -w <权重值>          指定真实服务器的权重值--u-threshold  -x <上阀值>          设置转发请求的最大上连接阀值,范围为0~65535,当当连接数超过指定上限时,LVS则不会转发请求                                   --l-threshold  -y <下阀值>          设置转发请求的下连接阀值,范围为0~65535,当连接数降低至指定值时,LVS则继续提供服务,默认值为0--mcast-interface interface         设置用于连接同步守护进程的组播接口--syncid sid                        设置连接同步守护进程的SID号,用于标识,范围0~255--connection   -c                   显示连接信息,一般与"-l"连用--timeout                           显示TCP、TCPFIN、UDP超时时间信息,一般与"-l"连用--daemon                            显示连接同步守护信息,一般与"-l"连用--stats                             显示统计信息,一般与"-l"连用--rate                              显示转发速率信息,一般与"-l"连用--exact                             显示数据包和字节计数器的确切值,扩大字符长度--thresholds                        显示阀值信息,一般与"-l"连用--persistent-conn                   显示持久化连接信息,一般与"-l"连用--numeric      -n                   地址和端口以数字格式显示,一般与"-l"连用--sched-flags  -b <标识>            设置调度算法的范围标识,用于SH算法,有两个标识:sh-fallback,如果真实服务器不可用,则将其转发到其他真实服务器上。sh-port,将源地址的端口号也添加到散列键=值中
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89525.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89525.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89525.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核设计与实现 - 第5章 系统调用

目录一、系统调用概述二、系统调用实现机制四、性能优化技术五、常见问题排查六、安全注意事项一、系统调用概述 定义 用户空间访问内核功能的唯一合法入口提供硬件抽象接口&#xff0c;保证系统稳定和安全 与API区别 特性系统调用API执行层级内核态用户态实现方式软中断(int …

纸板制造糊机操作

糊机操作技巧:开机流程&#xff1a;首先&#xff0c;一切的一切&#xff0c;要看懂生管&#xff0c;我们要用哪个楞别&#xff0c;再看哪个门幅和材质。 也就是说&#xff0c;一切的一切&#xff0c;要生产了&#xff0c;原纸不能用错了吧&#xff01; 第一步&#xff1a; 压压…

WPF 多窗口分文件实现方案

WPF 多窗口分文件实现方案 项目文件结构 WindowSwitcher/ ├── App.xaml ├── App.xaml.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Views/ │ ├── SettingsWindow.xaml │ ├── SettingsWindow.xaml.cs │ ├── DataWindow.xaml │ ├─…

在服务器(ECS)部署 MySQL 操作流程

在部署 MySQL 数据库之前需要准备好服务器环境。可以通过以下两种方式来准备部署服务器&#xff1a;云服务器&#xff08;ECS&#xff09;&#xff0c;如&#xff1a;阿里云、华为云、腾讯云等。IDC服务器。 现以阿里云服务器&#xff08;ECS&#xff09;Windows版本来进行部署…

Java File 类详解:从基础操作到实战应用,掌握文件与目录处理全貌

作为一名 Java 开发工程师&#xff0c;你一定在实际开发中遇到过需要操作文件或目录的场景&#xff0c;例如&#xff1a;读写配置文件、上传下载、日志处理、文件遍历、路径管理等。Java 提供了 java.io.File 类来帮助开发者完成这些任务。本文将带你全面掌握&#xff1a;File …

嵌入式学习-PyTorch(9)-day25

进入尾声&#xff0c;一个完整的模型训练 &#xff0c;点亮的第一个led#自己注释版 import torch import torchvision.datasets from torch import nn from torch.utils.tensorboard import SummaryWriter import time # from model import * from torch.utils.data import Dat…

用AI做带货视频评论分析进阶提分【Datawhale AI 夏令营】

文章目录回顾赛题优化1️⃣优化2️⃣回顾赛题 模块内容类型说明/示例赛题背景概述参赛者需构建端到端评论分析系统&#xff0c;实现商品识别、多维情感分析、评论聚类与主题提炼三大任务。商品识别输入video_desc&#xff08;视频描述&#xff09; video_tags&#xff08;标签…

Redis常见数据结构详细介绍

Redis 作为一款高性能的开源内存数据库&#xff0c;凭借其丰富多样的数据结构和出色的性能&#xff0c;在缓存、会话存储、实时分析等众多场景中得到了广泛应用。下面将详细介绍 Redis 主要的数据结构&#xff0c;包括它们的类型、具体用法和适用场景。1、字符串&#xff08;St…

HAMR硬盘高温写入的可靠性问题

热辅助磁记录(HAMR)作为突破传统磁记录密度极限的下一代存储技术,其在数据中心大规模应用的核心挑战在于可靠性保障。 扩展阅读: 下一个存储战场:HAMR技术HDD HAMR技术进入云存储市场! 漫谈HAMR硬盘的可靠性 随着存储密度向4Tbpsi迈进,传统磁记录技术遭遇"三难困境…

使用llama-factory进行qwen3模型微调

运行环境 Linux 系统(ubuntu) Gpu (NVIDIA) 安装部署 llama factory CUDA 安装 首先,在 https://developer.nvidia.com/cuda-gpus 查看您的 GPU 是否支持CUDA 保证当前 Linux 版本支持CUDA. 在命令行中输入 uname -m && cat /etc/*release,应当看到类似的输出 x8…

tcp/udp调试工具

几款tcp/udp调试工具 下载地址&#xff1a;夸克网盘

智慧光伏发电信息化系统需求文档

以下是从产品经理角度撰写的智慧光伏发电信息化系统需求文档&#xff0c;聚焦光伏行业痛点与业务价值&#xff0c;遵循标准PRD结构&#xff1a;智慧光伏发电信息化系统需求文档 版本&#xff1a;1.0 日期&#xff1a;2025年7月19日 作者&#xff1a;产品经理视角一、文档概述 1…

ARCS系统机器视觉实战(直播回放)

ARCS系统机器视觉实战本次培训主要围绕ARCS操作系统中的视觉与机器人同步应用展开&#xff0c;详细讲解了网络配置、视觉软件设置、九点标定、机器人程序编写以及数据通信等内容。以下是关键要点提炼&#xff1a; 网络配置 为机器人、相机和电脑分别设置静态IP地址&#xff0c;…

Http请求中的特殊字符

问题 一个 springboot 应用&#xff0c;包含如下 controller RestController public class DemoController {GetMapping("/get")public ResponseEntity<String> get(RequestParam(value "cid2") String cid2) 准备测试数据 String cid2 "…

告别手动报表开发!描述数据维度,AI 自动生成 SQL 查询 + Java 导出接口

Java 开发中&#xff0c;报表模块往往是 “隐形耗时大户”—— 产品经理要 “按地区、月份统计订单量”&#xff0c;开发者需先编写 SQL 查询&#xff0c;再手动开发导出接口&#xff0c;稍作调整又要重新调试&#xff0c;耗费大量时间在重复劳动上。飞算 JavaAI 通过 “数据维…

函数设计测试用例

//归并排序:public static void mergeSort(int[] a,int left,int right){if(left > right)return;int mid left(right -left)/2;mergeSort(a,left,mid);mergeSort(a,mid1,right);int[] tmp new int[a.length];int l left,r mid1,k left;while(l<mid && r<…

Vmware虚拟机使用仅主机模式共享物理网卡访问互联网

一、概述 Vmware虚拟机网卡模式有三种&#xff1a;桥接模式、仅主机模式、NAT模式。默认情况下&#xff0c;Vmware虚拟机使用仅主机模式不能访问互联网。因此&#xff0c;虚拟机可以共享宿主机的物理网卡访问互联网。 三种网卡模式的区别二、Vmware网络设置 2.1、调整虚拟网络 …

声画同步!5 个音视频素材适配的网站,创作更和谐

视频画面和背景音乐不搭&#xff1f;音效和动作不同步&#xff1f;好的作品&#xff0c;声音和画面必须像齿轮一样咬合。这 5 个专注 “声画同步” 的素材网站&#xff0c;能让音视频素材精准匹配&#xff0c;从旋律到节奏&#xff0c;从音效到画面&#xff0c;都默契十足&…

13.多种I/O函数

前言 之前的示例中&#xff0c;基于Linux的使用read&write函数完成数据I/O&#xff0c;基于Windows的则使用send&recv函数。这次的Linux示例也将使用send& recv函数&#xff0c;并讲解其与read&write函数相比的优点。还将介绍几种其他的I/O函数。 一、send &am…

设计模式五:桥模式(Bridge Pattern)

桥模式是一种结构型设计模式&#xff0c;它将抽象部分与其实现部分分离&#xff0c;使它们可以独立变化。这种模式通过提供桥梁结构将抽象和实现解耦。桥模式的结构桥模式包含以下主要角色&#xff1a;Abstraction&#xff08;抽象类&#xff09;&#xff1a;定义抽象接口&…