haproxy总结与实验

news2024/11/24 22:41:42

一、负载均衡

1.1 简述负载均衡

        在高并发的业务场景下,解决单个节点压力过大,导致Web服务响应过慢,特别是严重的情况下导致服务瘫痪,无法正常提供服务的问题,而负载均衡的目的就是为了维护系统稳定可靠。负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

1.2 负载均衡的好处

1.对web服务器进行动态的水平扩展,使用户无感知

2.增加业务并发访问及处理能力,解决服务器瓶颈问题

3.节约公网IP地址,降低IT支出成本

4.隐藏内部服务器IP,提高内部服务器安全性

5.配置简单,固定格式的配置文件

6.功能简单,支持四层和七层,支持动态下线主机

7.性能较强,并发数万甚至数十万

1.3负载均衡类型

1.3.1 硬件负载均衡

        硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常是一个独立于系统的硬件,我们称之为负载均衡器。由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器使用方便,但价格较贵,是将一些开源软件集成到硬件设备里。例如:F5,Netscaler,Array,AD-1000。

1.3.2 四层负载均衡

        四层负载均衡通过IP加port决定负载均衡的去向,对流量请求进行NAT处理,转发至后台服务器,记录TCP、UDP流量分别是由哪台后台管理器处理,后续该请求连接的流量都通过该服务器处理

        支持四层的软件:lvs、nginx、haproxy

1.3.3 七层负载均衡

        通过虚拟url或主机IP进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡,代理后台服务器与客户端建立连接,如nginx可代理前后端,与前段客户端tcp连接,与后端服务器建立tcp连接

        支持七层代理的软件:nignx,haproxy

1.3.4软、硬件负载均衡的对比

软件负载均衡

优点:需求环境明确,配置简单,操作灵活,成本低廉,效率不高,能满足普通的企业需求

缺点:依赖于系统,增加资源开销;软件的优劣决定环境的性能;系统的安全,软件的稳定性均会影响到整个环境的安全。

        硬件负载均衡

优点:独立于系统,整体性能大量提升,在功能、性能上优于软件方式;智能的流量管理,多种策略可选,能达到最佳的负载均衡效果

缺点:价格昂贵(F5硬件服务器不低于20万/台)。

1.3.5 四层与七层的对比

区别四层负载均衡七层负载均衡
分层位置传输层以下应用层以下
性能无需解析报文信息,网络吞吐量和处理能力较高支持解析应用层报文信息,识别URL、cookie、http header等信息
原理基于ip+port基于URL或主机IP等
功能类比类似于路由器类似于代理服务器
安全性无法识别DDos攻击可防御SYN Cookie/Flood攻击

拓展:

二层负载均衡(mac地址):数据链路层,使用虚拟MAC地址方式,外部请求流量经过虚拟MAC地址,负载均衡收到流量请求后分配后端实际的MAC地址进行响应。
三层负载均衡(ip地址):网络层,使用虚拟ip地址方式,外部请求流量经过虚拟IP地址,负载均衡收到流量请求后分配后端实际的IP地址进行响应。
四层负载均衡(tcp、udp):传输层,使用IP+PORT接收外部流量请求,转发到对应的机器上。
七层负载均衡(http):应用层,使用虚拟的URL或IP地址接收外部流量请求,转发到对应的处理服务器。

二、Haproxy

2.1 Haproxy简述

        Haproxy是一个使用C语言编写的开源代码,其提供高可用性、负载均衡,以及基于tcp和http的应用程序代理。适用于负载很大的web站点,这些站点通常需要会话保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全地整合进用户当前的架构中, 同时可以保护用户的web服务器不被暴露到网络上。Haproxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。

2.2 配置参数

2.2.1 global配置

        进程及安全配置相关的参数;性能调整相关参数;Debug参数

参数类型作用
chroot全局锁定运行目录
deamon全局以守护进程运行
user,group,uid,gid全局运行haproxy的用户身份
stats socket全局套接字文件
nbproc N 全局开启的进程数,默认为一个
bnthread N全局开启的线程数,默认为一个,与进程互斥
cpu-map 1 0全局绑定haproxyworker进程至指定CPU ,将第一个work进程绑定至0号CPU
maxconn N 全局每个haproxy进程的最大并发连接数
maxsslconn N全局每个haproxy进程ssl最大连接数,用于haproxy配置了证书的 场景下
maxconnrate N全局每个进程每秒创建的最大连接数量
spread-checks N 全局后端server状态check随机提前或延迟百分比时间,建议2- 5(20%-50%)之间,默认值0
pidfile全局指定pid文件路径
log 127.0.0.1 local2 info全局定义全局的syslog服务器;日志服务器需要开启UDP协议, 最多可以定义两个

2.2.2代理配置

defaults:为frontend, backend, listen提供默认配置

frontend:前端,相当于nginx中的server {}

backend:后端,相当于nginx中的upstream {}

listen:同时拥有前端和后端配置,配置简单,生产推荐使用

2.2.3 server配置

check         #对指定real进行健康状态检查,如果不加此设置,默认不开启检查,只有check后面没 有其它配置也可以启用检查功能

                  #默认对相应的后端服务器IP和端口,利用TCP连接进行周期性健康性检查,注意必须指定 端口才能实现健康性检查

addr          #可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量

port           #指定的健康状态监测端口

inter          #健康状态检查间隔时间,默认2000 ms

fall            #后端服务器从线上转为线下的检查的连续失效次数,默认为3

rise           #后端服务器从下线恢复上线的检查的连续有效次数,默认为2

weight      #默认为1,最大值为256,0(状态为蓝色)表示不参与负载均衡,但仍接受持久连接

backup     #将后端服务器标记为备份状态,只在所有非备份主机down机时提供服务,类似Sorry Server

disabled       #将后端服务器标记为不可用状态,即维护状态,除了持久模式

                    #将不再接受连接,状态为深黄色,优雅下线,不再接受新用户的请求

redirect prefix http://www.baidu.com/   #将请求临时(302)重定向至其它URL,只适用于http模 式

maxconn       #当前后端server的最大并发连接数

2.3 实验环境

主机名IP角色
haproxy172.25.254.100调度器
server1172.25.254.10web服务器1
server2172.25.254.20web服务器2

注意:防火墙和Selinux都需要关闭

2.2.1网络配置

haproxy

server1

server2

nmcli connection reload
nmcli connection up eth0

2.2.2 下载安装包

#haproxy
dnf install haproxy
dnf install socat    #可调整服务器动态权重和其它状态

#server1、server2
dnf install nginx
echo webserver1 -172.25.254.10 > /usr/share/nginx/html/index.html #server1的访问页面
echo webserver2 -172.25.254.20 > /usr/share/nginx/html/index.html #server2的访问页面
systemctl enable --now nginx
curl 172.25.254.10
curl 172.25.254.20    #测试web服务是否正常运行
rpm -qc haproxy    #查询配置文件
vim /etc/haproxy/haproxy.cfg    #修改配置文件
systemctl start haproxy.service    #重启服务
cat /var/log/messages #查看错误日志

对配置文件进行修改并测试:

利用sacat工具对服务器进行调整

echo "help" |socat stdio /var/lib/haproxy/stats    #查看帮助
echo "show info" |socat stdio /var/lib/haproxy/stats     #查看haproxy状态
echo "show server stats" |socat stdio /var/lib/haproxy/stats #查看服务器状态
echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats#查看集群中server1的权重
echo "set weight webcluster/web1 1" | socat stdio /var/lib/haproxy/stats#修改集群权重
echo "disable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats
echo "enable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats

三、haproxy的算法

HAProxy通过固定参数 balance 指明对后端服务器的调度算法

balance参数可以配置在listen或backend选项中。

HAProxy的调度算法分为静态和动态调度算法

有些算法可以根据参数在静态和动态算法中相互转换。

3.1 静态算法

        静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度 等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。

3.1.1static-rr:基于权重的轮询调度

不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)

不支持端服务器慢启动

其后端主机数量没有限制,相当于LVS中的 wrr

3.1.2 first

根据服务器在列表中的位置,自上而下进行调度

其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务

其会忽略服务器的权重设置

不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效

3.2 动态算法

        基于后端服务器状态进行调度适当调整, 新请求将优先调度至当前负载较低的服务器 权重可以在haproxy运行时动态调整无需重启

3.2.1 roundrobin

1. 基于权重的轮询动态调度算法,

2. 支持权重的运行时调整,不同于lvs中的rr轮训模式,

3. HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),

4. 其每个后端backend中最多支持4095个real server,

5. 支持对real server权重动态调整,

6. roundrobin为默认调度算法,此算法使用广泛

3.2.2 leastconn

eastconn加权的最少连接的动态

支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户 端连接)

比较适合长连接的场景使用,比如:MySQL等场景

3.3 其他算法

        其它算法即可作为静态算法,又可以通过选项成为动态算法

3.3.1 source

源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一 个后端web服务器。此方式当后端服务器数据量发生变化时,会导致很多用户的请求转发至新的后端服 务器,默认为静态方式,但是可以通过hash-type支持的选项更改这个算法一般是在不插入Cookie的TCP

模式下使用,也可给拒绝会话cookie的客户提供最好的会话粘性,适用于session会话保持但不支持

cookie和缓存的场景源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法和一致性hash

3.3.1.1 map-base取模法

map-based:取模法,对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此请 求转发至对应的后端服务器。 此方法是静态的,即不支持在线调整权重,不支持慢启动,可实现对后端服务器均衡调度 缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因总权重发生变化而导致调度结果 整体改变

hash-type 指定的默值为此算法

map-based算法:基于权重取模,hash(source_ip)%所有后端服务器相加的总权重

3.3.1.2 一致性hash

一致性哈希,当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动hash(o)mod n

该hash算法是动态的,支持使用 socat等工具进行在线权重调整,支持慢启动

算法:

1、后端服务器哈希环点keyA=hash(后端服务器虚拟ip)%(2^32)

2、客户机哈希环点key1=hash(client_ip)%(2^32) 得到的值在[0---4294967295]之间,

3、将keyA和key1都放在hash环上,将用户请求调度到离key1最近的keyA对应的后端服务器

3.3.2 uri

基于对用户请求的URI的左半部分或整个uri做hash,再将hash结果对总权重进行取模后,根据最终结果将请求转发到后端指定服务器,适用于后端是缓存服务器场景,默认是静态算法,也可以通过hash-type指定map-based和consistent,来定义使用取模法还是一致性hash

此算法基于应用层,所以只支持 mode http ,不支持 mode tcp

3.3.3 url_param

url_param对用户请求的url中的 params 部分中的一个参数key对应的value值作hash计算,并由服务器 总权重相除以后派发至某挑出的服务器,后端搜索同一个数据会被调度到同一个服务器,多用与电商 通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个real server

如果无没key,将按roundrobin算法

3.3.4 hdr

针对用户每个http头部(header)请求中的指定信息做hash, 此处由 name 指定的http首部将会被取出并做hash计算, 然后由服务器总权重取模以后派发至某挑出的服务器,如果无有效值,则会使用默认的轮询调度

3.4 算法总结

算法状态使用协议使用场景
static-rr静态tcp/http做了session共享的web集群
first静态tcp/http使用较少
roundrobin动态tcp/http
leastconn动态tcp/http数据库
source其他tcp/http
uri其他http缓存服务器,CDN服务商,蓝汛、百度、阿里云、腾讯
url_param其他http可以实现session保持
hdr其他http基于客户端请求报文头部做下一步处理

        其他算法的静态和动态取决于hash_type是否consistent

四、高级功能配置

4.1 状态页

4.1.1状态页配置项

stats enable   #基于默认的参数启用stats page

stats hide-version   #将状态页中haproxy版本隐藏

stats refresh <delay> #设定自动刷新时间间隔,默认不自动刷新

stats uri <prefix> #自定义stats page uri,默认值:/haproxy?stats

stats auth <user>:<passwd> #认证时的账号和密码,可定义多个用户,每行指定一个用户

                                                 #默认:no authentication

stats admin { if | unless } #启用stats page中的管理功能

4.1.2 登录状态页

#pid为当前pid号,process为当前进程号,nbproc和nbthread为一共多少进程和每个进程多少个线程

pid = 27134 (process #1, nbproc = 1, nbthread = 1)

#启动了多长时间

uptime = 0d 0h00m04s

#系统资源限制:内存/最大打开文件数

 system limits: memmax = unlimited; ulimit-n = 200029

#最大socket连接数/单进程最大连接数/最大管道数

maxpipes maxsock = 200029; maxconn = 100000; maxpipes = 0

#当前连接数/当前管道数/当前连接速率

current conns = 2; current pipes = 0/0; conn rate = 2/sec; bit rate = 0.000 kbps

####      

#运行的任务/当前空闲率

Running tasks: 1/14; idle = 100 % active UP: #在线服务器

backup UP: #标记为backup的服务器

active UP, going down: #监测未通过正在进入down过程

backup UP, going down: #备份服务器正在进入down过程

active DOWN, going up: #down的服务器正在进入up过程

backup DOWN, going up: #备份服务器正在进入up过程

active or backup DOWN: #在线的服务器或者是backup的服务器已经转换成了down状态

not checked: #标记为不监测的服务器

#active或者backup服务器人为下线的

active or backup DOWN for maintenance (MAINT) #active或者backup被人为软下线(人为将weight改成0) active or backup SOFT STOPPED for maintenance

4.1.3 backend server信息

session rate(每秒的连接会话信息): Errors(错误统计信息):

cur:每秒的当前会话数量 : Req:错误请求量

max:每秒新的最大会话数量 conn:错误链接量

limit:每秒新的会话限制量 Resp:错误响应量

sessions(会话信息): Warnings(警告统计信息):

cur:当前会话量 Retr:重新尝试次数

max:最大会话量 Redis:再次发送次数

limit: 限制会话量

Total:总共会话量 Server(real server信息):

LBTot:选中一台服务器所用的总时间 Status:后端机的状态,包括UP和DOWN Last:和服务器的持续连接时间 LastChk:持续检查后端服务器的时间

Wght:权重

Bytes(流量统计): Act:活动链接数量

In:网络的字节输入总量 Bck:备份的服务器数量

Out:网络的字节输出总量 Chk:心跳检测时间

Dwn:后端服务器连接后都是DOWN的数量

Denied(拒绝统计信息): Dwntme:总的downtime时间

Req:拒绝请求量 Thrtle:server 状态

Resp:拒绝回复量

4.2 保持cookie会话

4.3 IP透传

apache和四层负载默认没有透传,需要设定。(apache四层没有透传)

apache七层

vim /etc/httpd/conf/httpd.conf    #修改配置文件,如下图
cat /etc/httpd/logs/access_log     #查看日志

nginx 四层

vim /etc/nginx/nginx.cfg

透传测试

4.4 ACL(访问控制列表)

ACL是一种基于包过滤的访问控制技术 它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过 滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内 容进行匹配并执行进一步操作,比如允许其通过或丢弃。

4.4.1 ACL配置选项

aclaclnamecriterionflagsoperatorvalue
acl名称匹配规范匹配模式具体操作符操作对象类型

ACL名称:可以使用大字母A-Z、小写字母a-z、数字0-9、冒号:、点.、中横线和下划线,并且严格区分大小写

4.4.1.1 匹配规范

4.4.1.2 匹配模式

-i 不区分大小写

-m 使用指定的正则表达式匹配方法

-n 不做DNS解析

-u 禁止acl重名,否则多个同名ACL匹配或关系

4.4.1.3 具体操作符

- exact match     (-m str) :字符串必须完全匹配模式

- substring match (-m sub) :在提取的字符串中查找模式,如果其中任何一个被发现,ACL将匹配

- prefix match   (-m beg) :在提取的字符串首部中查找模式,如果其中任何一个被发现,ACL将匹配

- suffix match   (-m end) :将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则ACL进行匹配

- subdir match   (-m dir) :查看提取出来的用斜线分隔(“/")的字符串,如其中任一个匹配,则ACL进行匹配

- domain match   (-m dom) :查找提取的用点(“.")分隔字符串,如果其中任何一个匹配,则ACL进行匹配

4.4.1.4 ACL-value操作对象

#value类型

- Boolean #布尔值

- integer or integer range #整数或整数范围,比如用于匹配端口范围

- IP address / network #IP地址或IP范围, 192.168.0.1 ,192.168.0.1/24

- string--> www.timinglee.org

        exact #精确比较

        substring #子串

        suffix #后缀比较

        prefix #前缀比较

        subdir #路径, /wp-includes/js/jquery/jquery.js

        domain #域名,www.timinglee.org

- regular expression #正则表达式

- hex block #16进制

4.4.2 多个ACL组合调用方式

与:隐式(默认)使用

或:使用“or" 或 “||"表示

否定:使用 "!" 表示

4.5 自定义错误页面

mkdir /etc/haproxy/errorpage    
touch /etc/haproxy/errorpage/503.http
cat /usr/share/haproxy/503.http    #查看503错误页并复制内容
vim /etc/haproxy/errorpage/503.http    #将503错误页复制
vim /etc/haproxy/haproxy.cfg
systemctl restart haproxy.service 

4.6 haproxy四层负载

#server1和server2上的配置
dnf instll mariadb-server -y
vim /etc/my.cnf.d/mariadb-server.cnf 
systemctl start mariadb
netstat -atnlup | grep 3306    #查看端口

haproxy配置
dnf instll mariadb -y

4.7 安全证书

mkdir -p /etc/haproxy/certs

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/timinglee.org.key -x509 -days 365 -out/etc/haproxy/certs/timinglee.org.crt

cat /etc/haproxy/certs/timinglee.org.key /etc/haproxy/certs/timinglee.org.crt > /etc/haproxy/certs/timinglee.org.pem

cat /etc/haproxy/certs/timinglee.org.pem

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车补光照明实验太阳光模拟器光源

汽车补光照明实验概览 汽车补光照明实验是汽车照明领域的一个重要环节&#xff0c;它涉及到汽车照明系统的性能测试和优化。实验的目的在于确保汽车在各种光照条件下都能提供良好的照明效果&#xff0c;以提高行车安全。实验内容通常包括但不限于灯光的亮度、色温、均匀性、响应…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满&#xff0c;几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代&#xff0c;AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现&#xff0c;同样值得业界关注&…

洛谷P3919 【模板】可持久化线段树 1(可持久化数组)

目录 tags中文题面思路代码 tags 线段树 主席树 中文题面 如题&#xff0c;你需要维护这样的一个长度为 N 的数组&#xff0c;支持如下几种操作 在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值此外&#xff0c;每进行一次操作&#xff08;对于操作…

Mybatis PLUS代码生成器generate

Mybatis PLUS代码生成器generate 一、2.3版本二、生成代码三、3.5.1版本四、生成代码 一、2.3版本 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>2.3</version> </dep…

Java 随机生成密码包含大写字母、数字、特殊字符且指定长度

一、写在前面 现在网络环境越来越复杂&#xff0c;对密码安全要求也越来越严格&#xff0c;在生产环境种&#xff0c;对密码要求是一个不少于16位的随机密码&#xff0c;要求含有大写字母、小写字母、数字、特殊字符中的三种。我们使用java代码直接来可控的生成这种密码。 二…

数字县域+乡村振兴解决方案

1. 国家大数据战略与乡村振兴 国家大数据战略的核心内容包括加快建设数字中国&#xff0c;推动数据资源整合和开放共享&#xff0c;以大数据助力产业转型升级和社会治理创新&#xff0c;构建数字经济&#xff0c;提升国家治理现代化水平。 2. 乡村振兴战略的重大意义 乡村振…

【C++】特殊类设计 — 不能被拷贝的类 , 只能在堆/栈上创建对象的类 ,不能被继承的类

苟活者在淡红的血色中&#xff0c;会依稀看见微茫的希望&#xff1b; 真的猛士&#xff0c;将更奋然而前行。 --- 鲁迅 --- toc 1 特殊类 在实践中&#xff0c;常常会有一些比较有意思的特殊场景&#xff1a; 不能被拷贝的类 - 独一无二的魔法宝物&#xff1a; 在一个角色…

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…

【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试

【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试 文章目录 【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试1.简介2.验证用例3.指令代码4.链接脚本5.编译脚本6.仿真结果6.1 复位结束6.2 运行成功6.3 终端打印 7.总结 1.简介 借助上一篇文章所提及的验证环境&#xff0c;…

对象引用对于非静态的字段、方法或属性是必需的

CS0120 对象引用对于非静态的字段、方法或属性“Person.FirstName”是必需的 类Person internal class Person{// public static string FirstName { get;set; }"sss";public string FirstName { get; set; } "sss";public static string MiddleName …

k8s挂载nginx配置文件

文章目录 步骤一&#xff1a;启动指定服务的工作负载时&#xff0c;指定需要挂载的配置文件&#xff0c;替换工作负载内置的配置文件步骤二: 在配置字典中新增配置文件步骤三&#xff1a;自定义挂载的配置文件 步骤一&#xff1a;启动指定服务的工作负载时&#xff0c;指定需要…

深度学习 —— 个人学习笔记17(锚框、多尺度锚框)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 三十四、锚框 import torch import matplotlib.pyplot as plt from matplotlib_inline import backend_inlinetorch.…

Python 绘图进阶之箱线图:揭示数据的分布和异常值

Python 绘图进阶之箱线图&#xff1a;揭示数据的分布和异常值 引言 在数据分析中&#xff0c;理解数据的分布情况和识别异常值是非常重要的任务。箱线图&#xff08;Box Plot&#xff09;作为一种简洁有效的统计图表&#xff0c;能够直观地展示数据的中位数、四分位数、极值以…

除了画图,你还需要透视平面设计师的日常工作

平面设计师是市场上较为稀缺且需求旺盛的职业&#xff0c;许多企业都在争相聘请优秀的设计师。平面设计在日常生活中无处不在&#xff0c;应用领域广泛&#xff0c;如广告设计、logo设计和名片设计等。因此&#xff0c;本篇文章将为你详细介绍平面设计。 1、什么是平面设计&am…

YOLT论文精读

引言 很早之前&#xff0c;在本校老师的带领下接触到了目标检测领域。在卫星遥感图像方面有一篇经典的论文《You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery》。科研小白一开始反复看了几遍也没弄懂&#xff0c;决定写博客来加深自己的理解。…

Vue 3+Vite+Eectron从入门到实战系列之(五)一后台管理登录页

前面已经讲了不少基础知识&#xff0c;这篇开始&#xff0c;我们进行实操&#xff0c;做个后台管理系统&#xff0c;打包成多端的,可安装的桌面app!!其中&#xff0c;登录&#xff0c;退出的提示信息用系统的提示&#xff0c;不使用elemengplus的弹窗提示&#xff01;&#xff…

Java生成图形验证码

1、加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> 2、写接口&#xff0c;这块不需要登录成功才能操作的&#xff0c;所以写controller就行了…

基于Hadoop的网购笔记本电脑大数据分析与可视化系统

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍数据采集过程数据预处理Hadoop大数据分析可视化展示每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本项目首先通过爬虫获取京东…

【C++】产生拷贝构造的三种形式

目录 用已存在的类对象去初始化同类另一个对象当函数类的形参是对象&#xff0c;调用函数形参和实参进行结合当函数的返回值是对象&#xff0c;函数执行完成返回调用者时 用已存在的类对象去初始化同类另一个对象 Date d1; Date d2(d1); Date d3 d2; //也会调用拷贝构造注意赋…

谷粒商城实战笔记-168-缓存-SpringCache-整合体验@Cacheable

文章目录 一&#xff0c;168-缓存-SpringCache-整合&体验Cacheable1&#xff0c;引入Spring Cache依赖2&#xff0c;配置3&#xff0c;启用cache4&#xff0c;在查询数据库的方法上加上注解Cacheable5&#xff0c;测试 二&#xff0c;169-缓存-SpringCache-Cacheable细节设…