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

haproxy高级功能配置

介绍HAProxy高级配置及实用案例

一.基于cookie会话保持

  • cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少,已经被session共享服务器代替

注意:不支持 tcp mode,使用 http mode

配置选项

cookie name [rewrite linsertl prefix ][ indirect ][ nocache ][ postonly ] [preserve ][ httponly][ secure ][ domain ]*[ maxidle <idle> ][ maxlife ]
name:            #cookie的key名称,用于实现持久连接
insert:          #插入新的cookie,默认不插入cookie
indirect:        #如果客户端已经有cookie,则不会再发送cookie信息
nocache:         #当client和hapoxy之间有缓存服务器(如:CDN)时,不允许中间缓存缓存cookie,#因为这会导致很多经过同一个CDN的请求都发送到同一台后端服务器

 配置举例

listen webclusterbind *:80mode httpbalance roundrobin#balance static-rr#balance first#balance leastconn#balance source#balance uri#balance url_param name,userid#balance hdr(User-Agent)#hash-type consistentcookie WEBCOOKIE insert nocache indirectserver web1 172.25.254.10:80 cookie lee1 check inter 2 fall 3 rise 5 weight 1server web2 172.25.254.20:80 cookie lee2 check inter 2 fall 3 rise 5 weight 1验证[root@haproxy ~]# curl -b WEBCOOKIE=lee1 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# curl -b WEBCOOKIE=lee2 172.25.254.100
172.25.254.20 - index.html

haproxy状态页

通过web界面,显示当前HAProxy的运行状态

状态页配置

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<cond> 
stats admin{if | unless }       #启用stats page中的管理功能

启用状态页

listen statsmode httpbind 0.0.0.0:8888stats enablelog globalstats uri /statusstats auth lee:lee

80e7f07f47bb41228d2a5c40921d6626.png

4859a7395d194d12ae0036609c833e26.png 登录状态页

pid = 3698 (process #2, nbproc = 2, nbthread = 2)#pid为当前pid号,process为当前进程号,nbproc和nbthread为一共多少进程和每个进程多少个线程uptime = 0d 0h00m08s #启动了多长时间system limits: memmax = unlimited; ulimit-n = 131124 #系统资源限制:内存/最大打开文件数/maxsock = 131124; maxconn = 65536; maxpipes = 0 #最大socket连接数/单进程最大连接数/最大管道数maxpipescurrent conns = 1; current pipes = 0/0;conn rate = 1/sec #当前连接数/当前管道数/当前连接速率 (取决于访问量: 访问量越大,值越大)Running tasks: 1/9;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 or backup DOWN for maintenance (MAINT) #active或者backup服务器 手动下线的
active or backup SOFT STOPPED for maintenance #active或者backup被认为软下线(人为将weight改成0)

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:拒绝回复量

ip透传

web服务器中需要记录客户端的真实IP地址,用于做访问统计、安全防护、行为分析、区域排行等场景

layer 4 与 layer 7

四层ip透传与七层ip透传

四层:IP+PORT转发

七层:协议+内容交换

四层负载

在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据,而四层负载自身不参与建立连接,而和LVS不同,haproxy是伪四层负载均衡,因为haproxy 需要分别和前端客户端及后端服务器建立连接

七层代理

七层负载均衡服务器起了一个反向代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用,七层代理需要和Client和后端服务器分别建立连接

七层ip透传

当haproxy工作在七层的时候,也可以透传客户端真实IP至后端服务器

HAProxy配置


option forwardfor [ except <network> ] [ header <name> ] [ if-none ]
[ except <network> ]:请求报请来自此处指定的网络时不予添加此首部,如haproxy自身所在网络
[ header <name> ]: 使用自定义的首部名称,而非“X-Forwarded-For",示例:X-client
[ if-none ] 如果没有首部才添加首部,如果有使用默认值

 例:

[root@webserver1 ~]# systemctl disable nginx.service 
Removed "/etc/systemd/system/multi-user.target.wants/nginx.service".
[root@webserver1 ~]# systemctl stop nginx.service[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1 172.25.254.10 > /var/www/html/html.index
[root@webserver1 ~]# systemctl start httpd验证
172.25.254.10 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html[root@webserver1 ~]# cat /etc/httpd/logs/access_log 
172.25.254.100 - - [11/Aug/2024:22:49:45 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"
172.25.254.100 - - [11/Aug/2024:22:50:06 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"
172.25.254.100 - - [11/Aug/2024:22:50:08 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"
# 没有日志

四层ip透传

开始四层穿透[root@webserver2 ~]# vim /etc/nginx/nginx.conf
http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''"$proxy_protocol_addr"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';[root@webserver2 ~]# vim /etc/nginx/nginx.confserver {listen       80 proxy_protocol;[root@webserver2 ~]# systemctl restart nginx.service 访问
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html#查看日志
[root@webserver2 ~]# tail /var/log/nginx/access.log 172.25.254.100 - - [11/Aug/2024:23:07:38 +0800] "GET / HTTP/1.1" 200 27 "-" "curl/7.76.1" "-"
172.25.254.100 - - [11/Aug/2024:23:11:57 +0800] "GET / HTTP/1.1" "172.25.254.100"200 27 "-" "curl/7.76.1" "-"
透传成功
[root@webserver1 ~]# dnf install httpd-manual
[root@webserver1 ~]# systemctl restart httpd[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg listen webclusterbind *:80mode tcpbalance roundrobin#balance static-rr#balance first#balance leastconn#balance source#balance uri#balance url_param name,userid#balance hdr(User-Agent)#hash-type consistent#cookie WEBCOOKIE insert nocache indirectserver web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1server web2 172.25.254.20:80 send-proxy check inter 2 fall 3 rise 5 weight 1[root@haproxy ~]# systemctl restart haproxy.service
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html查看日志
nginx
[root@webserver2 ~]# tail /var/log/nginx/access.log 
172.25.254.100 - - [11/Aug/2024:23:11:57 +0800] "GET / HTTP/1.1" "172.25.254.100"200 27 "-" "curl/7.76.1" "-"
172.25.254.100 - - [11/Aug/2024:23:18:04 +0800] "GET / HTTP/1.1" "172.25.254.100"200 27 "-" "curl/7.76.1" "-"
172.25.254.100 - - [11/Aug/2024:23:18:06 +0800] "GET / HTTP/1.1" "172.25.254.100"200 27 "-" "curl/7.76.1" "-"

web服务器日志格式配置

配置web服务器,记录负载均衡透传的客户端IP地址

参数Forwarded[root@webserver1 ~]# vim /etc/httpd/conf/httpd.conf 
###省略###LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#combined 混合形式,全部控制验证
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# # 查看日志
[root@webserver1 ~]# cat /etc/httpd/logs/access_log 
172.25.254.100 - - [11/Aug/2024:22:49:45 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"
172.25.254.100 - - [11/Aug/2024:22:50:06 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"
172.25.254.100 - - [11/Aug/2024:22:50:08 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"
172.25.254.100 172.25.254.100 - - [11/Aug/2024:22:55:57 +0800] "GET / HTTP/1.1" 403 27 "-" "curl/7.76.1"

ACL(访问控制列表)

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

 ACL 配置选项

#用ac1来定义或声明一个ac1 
acl <aclname>    <criterion> [f1ags]   [operator]   [<value>]
ac1 名称匹配规范   匹配模式    匹配模式    具体操作符   操作对象类型

ACL-Name名称

 acl test path_end -m sub /a
#ACL名称,可以使用大字母A-Z、小写字母a-z、数字0-9、冒号:、点.、中横线和下划线,并且严格区分大
小写,比如:my_acl和My_Acl就是两个完全不同的acl5.8.1.2 ACL-criterion

ACL-flags 匹配模式

-i   不区分大小写
-m   使用指定的正则表达式匹配方法
-n   不做DNS解析
-u   禁止ac1重名,否则多个同名ACL匹配或关系

ACL-operator 操作对象

The ACL engine can match these types against patterns of the following types
-Boolean #布尔值-integer or integer range #整数或整数范围,比如用于匹配端口范围
-IP addressnetwork #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进制

ACL-criterion 匹配规范

定义ACL匹配规范,即判断条件

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg frontend webclusterbind *:80mode httpacl test hdr(dom) -i www.timinglee.orguse_backend webcluster-host if testdefault_backend default-hostbackend webcluster-hostmode httpserver web1 172.25.254.10:80 check inter 2 fall 2 rise 5backend default-hostmode httpserver web2 172.25.254.20:80 check inter 2 fall 2 rise 5[root@haproxy ~]# systemctl restart haproxy.service 

ACL-value操作对象

The ACL engine can match these types against patterns of the following types :
- Boolean #布尔值
- integer or integer range #整数或整数范围,比如用于匹配端口范围
- IP address / network #IP地址或IP范围, 192.168.0.1 ,192.168.0.1/24
- string--> www.timinglee.orgexact #精确比较substring #子串suffix #后缀比较prefix #前缀比较subdir #路径, /wp-includes/js/jquery/jquery.jsdomain #域名,www.timinglee.org
- regular expression #正则表达式
- hex block #16进制

多个ACL的组合调用方式

多个ACL的逻辑处理

与:隐式(默认)使用或:使用“or" 或 “||"表示否定:使用 "!" 表示

多个ACL调用方式:

#示例:
if valid_src valid_port #与关系,ACL中A和B都要满足为true,默认为与
if invalid_src || invalid_port  #或,ACL中A或者B满足一个为true
if ! invalid_src #非,取反,不满足ACL才为true

 

 hdr(<string>)用于测试请求头部首部指定内容

frontend webclusterbind *:80mode httpacl test hdr_end(host) -i .orguse_backend webcluster-host if testdefault_backend default-host[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html
[root@haproxy ~]# curl 172.25.254.100
172.25.254.10 - index.html

hdr(<string>)用于测试请求头部首部指定内容

frontend webclusterbind *:80mode httpacl test hdr_beg(host) -i bbsuse_backend webcluster-host if testdefault_backend default-host

配置前做好wndows解析

988d3a51800f4083b3ef540860f596d4.png

base:string

frontend webclusterbind *:80mode http#acl test hdr_beg(host) -i leeacl test base_sub -m sub bbsuse_backend webcluster-host if testdefault_backend default-host验证
[root@haproxy ~]# curl www.test.com
webserver2 - 172.25.254.20[root@webserver1 ~]# mkdir /var/www/html/lee -p
[root@webserver1 ~]# echo 172.25.254.10 lee > /var/www/html/lee/index.html[root@webserver1 ~]# curl 172.25.254.10/lee/index.html
172.25.254.10 lee
frontend webclusterbind *:80mode http#acl test hdr_beg(host) -i bbs#acl test base_sub -m sub leeacl test base_reg -i lee/$use_backend webcluster-host if testdefault_backend default-host[root@haproxy ~]# curl www.test.com/lee/
172.25.254.10 lee

path:string

frontend webclusterbind *:80mode http#acl test hdr_beg(host) -i bbs#acl test base_sub -m sub lee#acl test base_reg -i lee/$acl test path_sub -m sub leeuse_backend webcluster-host if testdefault_backend default-host同一网址,不同路径,访问的同一主机
[root@haproxy ~]# curl www.timimglee.org/lee/
172.25.254.10 lee[root@haproxy ~]# curl www.test.com lee/
172.25.254.10 lee

ACL示例-域名匹配

frontend webclusterbind *:80mode httpacl test hdr_dom(host) -i www.timinglee.orguse_backend webcluster-host if domaindefault_backend default-host[root@haproxy ~]# curl www.timimglee.org
webserver1 - 172.25.254.10 [root@haproxy ~]# curl www.test.com 
webserver2 - 172.25.254.20

ACL示例-基于源ip或子网调度方向


frontend webclusterbind *:80mode httpacl ctrl_ip src -i 172.25.254.1 172.25.254.20 192.168.0.0/24use_backend webcluster-host if ctrl_ipdefault_backend default-host符合条件
[root@webserver2 ~]# curl 172.25.254.100
172.25.254.10 - index.html
不符合
[root@haproxy ~]# curl 172.25.254.100
172.25.254.20 - index.html拒绝frontend webclusterbind *:80mode httpacl ctrl_ip src -i 172.25.254.1 172.25.254.20 192.168.0.0/24#use_backend webcluster-host if ctrl_iphttp-reqoest deny if ctrl_ipdefault_backend default-host

 ACL示例-基于文件后缀域名实现动静分离

[root@webserver1 ~]# dnf install php -y[root@webserver1 ~]# systemctl restart httpd[root@webserver1 ~]# vim /var/www/html/index.php
<?phpphpinfo();
?>[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
frontend webclusterbind *:80mode httpacl static path_end -i .html .jpg .png .css .jsacl php    path_end -i .php#use_backend webcluster-host if ctrl_ipuse_backend default-host if phpdefault_backend default-host
[root@haproxy ~]# systemctl restart haproxy.service 

 验证

 2ac99188ba084a4b9a5b5fb909747a4d.png

自定义haproxy错误界面

对指定的报错进行重定向,进行优雅的显示错误页面

使用errorfile和erroroc指令的两种方法,可以实现自定义各种错误页面

#haproxy默认使用的错误错误页面
[root@haproxy ~]# rpm -ql haproxy24z-2.4.27-1.el7.zenetys.x86_64 | grep -E http$
/usr/share/haproxy/400.http
/usr/share/haproxy/403.http
/usr/share/haproxy/408.http
/usr/share/haproxy/500.http
/usr/share/haproxy/502.http
/usr/share/haproxy/503.http
/usr/share/haproxy/504.http

 基于自定义的错误页面文件

#自定义错误页
errorfile <code> <file> 
<code> #HTTP status code.支持200, 400, 403, 405, 408, 425, 429, 500, 502,503,504
<file> #包含完整HTTP响应头的错误页文件的绝对路径。 建议后缀".http",以和一般的html文件相区分
#示例:
errorfile 503 /haproxy/errorpages/503page.http 

示例 

[root@webserver1 ~]# systemctl stop httpd.service [root@webserver2 ~]# systemctl stop nginx.service [root@haproxy ~]# mkdir /etc/haproxy/errorpage -p[root@haproxy ~]# vim  /etc/haproxy/503.http
HTTP/1.0 503 Service Unavailable
Cache-Control:no-cache
Connection:close
Content-Type:text/html;charset=UTF-8
<html><body><h1>什么动物生气最安静</h1>
大猩猩!!
</body></html>[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg errorfile 503   /etc/haproxy/errorpage/503.http[root@haproxy ~]# systemctl restart haproxy.service 

验证

测试:关闭webserver主机,去访问172.25.254.100

a7fa2e4d89ba4deb8844f3cda058f879.png

基于http中定向错误页面

#错误页面重定向[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg #   errorfile 503 /etc/haproxy/errorpage/503.httperrorloc 503 https://www.baidu.com[root@haproxy ~]# systemctl restart haproxy.service #浏览器访问172.25.254.100自动跳转到百度

访问172.25.254.100

6c7ada1da6da4e7eb36eb638f7b35936.png

 haproxy四层负载

针对除HTTP以外的TCP协议应用服务访问的应用场景


MySQL
Redis
Memcache
RabbitMQ

四层负载示例

注意:如果使用frontend和backend,一定在 frontend 和 backend 段中都指定mode tcp

listen mysql-portbind 10.0.0.7:6379mode tcpbalance leastconnserver server1 10.0.0.17:3306 checkserver server2 10.0.0.27:3306 check backup

HAProxy https 实现

haproxy可以实现https的证书安全,从用户到haproxy为https,从haproxy到后端服务器用http通信 但基于性能考虑,生产中证书都是在后端服务器比如nginx上实现

#配置HAProxy支持https协议,支持ssl会话;bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE 
#指令 crt 后证书文件为PEM格式,需要同时包含证书和所有私钥cat demo.key demo.crt > demo.pem 
#把80端口的请求重向定443bind *:80redirect scheme https if !{ ssl_fc } 

证书制作

[root-haproxy ~]# mkdir /etc/haproxy/certs/
[root-haproxy ~]# openssl req -newkey rsa:2048 \ 
-nodes -sha256 –keyout /etc/haproxy/certs/timinglee.org.key \ 
-x509 -days 365 -out /etc/haproxy/certs/timinglee.org.crt

https配置示例

haproxy ~]# vim /etc/haproxy/haproxy.cfg
frontend webserverbind *:80redirect scheme https if !{ ssl_fc }mode httpuse_backend webcluster
frontend webserver-httpsbind *:443 ssl crt /etc/haproxy/timinglee.org.pemmode httpuse_backend webcluster
backend webclustermode httpbalance roundrobinserver web1 172.25.254.10:80 check inter 3 fall 3 rise 5server web2 172.25.254.20:80 check inter 3 fall 3 rise 5

 

 

相关文章:

haproxy高级功能配置

介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值&#xff0c;实现基于cookie的会话黏性&#xff0c;相对于基于 source 地址hash 调度算法对客户端的粒度更精准&#xff0c;但同时也加大了haproxy负载&#xff0c;目前此模式使用…...

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…...

直流电机及其驱动

直流电机是一种将电能转换为机械能的装置&#xff0c;有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转。 直流电机属于大功率器件&#xff0c;GPIO口无法直接驱动&#xff0c;需要配合电机驱动电路来操作 TB6612是一款双…...

Java-判断一个字符串是否为有效的JSON字符串

在 Java 中判断一个字符串是否为有效的 JSON 字符串&#xff0c;可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类&#xff0c;用于判断给定的字符串…...

FPGA开发板的基本知识及应用

FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路&#xff0c;能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口&#xff0c;以便…...

JVM知识总结(性能调优)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 性能调优 何时进行JVM调优&#xff1f; 遇到以下情况&#xff0c…...

基于Ascend C的Matmul算子性能优化最佳实践

矩阵乘法是深度学习计算中的基础操作&#xff0c;对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器&#xff0c;其AI Core采用达芬奇架构&#xff0c;以高性能Cube计算引擎为基础&#xff0c;针对矩阵运算进行加速&#xff0c;可大幅提高单位面…...

SQL注入之EVAL长度限制突破技巧

要求&#xff1a; PHP Eval函数参数限制在16个字符的情况下 &#xff0c;如何拿到Webshell&#xff1f; widows小皮环境搭建&#xff1a; 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件&#xff0c;并在其输入代码环境 解题思路&#xff1a; 通…...

稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈

时间序列预测是许多领域的重要问题&#xff0c;包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中&#xff0c;提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻&#xff0c;但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...

详谈系统中的环境变量

目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们&#xff0c;基本都配置过环境变量&#xff08;windows环境下&#xff09;&#xff0c;如果你也…...

RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想

目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…...

JavaScript模拟空调效果

JavaScript模拟空调效果https://www.bootstrapmb.com/item/15074 在JavaScript中模拟空调效果主要依赖于前端界面的交互和状态变化&#xff0c;因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过&#xff0c;我们可以通过JavaScript来模…...

14.2 Pandas数据处理

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

python学习7---多进程

一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间&#xff0c;相互之间不干扰。 因为GIL锁的存在&#xff0c;对于CPU密集型任务&#xff08;例如计算密集型操作&#xff09;&#xff0c;使用多进程可以提高程序的效率。 优点&am…...

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员&#xff1a;订单数量统计&#xff0c;订单交易额统计&#xff0c;客房统计饼图&#xff0c;酒店…...

Java后端面试题

Redis缓存穿透、雪崩、击穿&#xff0c;布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上&#xff0c; 现在已经完成了分库分表&#xff0c; 现在的问题出现了&#xff0c; 需要继续新增数据库节点&#xff0c; 请…...

【Git】远程仓库新建分支后,拉到本地开发

1. 在远程仓库上创建分支 2. git fetch origin&#xff1a;在本地同步远程仓库的分支&#xff08;获取远程仓库所有分支的所有修改&#xff09; 3. git remote -a&#xff1a;查看所有分支&#xff08;远程&#xff0b;本地&#xff09; 4. git checkout -b 本地名 远程仓库…...

React H5设置企业级v6版本路由的配置

路由配置是项目开发的必要一环&#xff0c;尤其是目前流行SPA&#xff0c;下面看看如何使用v6版本路由进行合理的H5路由配置 一、基本页面结构&#xff08;目录根据开发要求建&#xff0c;下面仅用于展示配置路由&#xff09; 二、具体文件实现 1. index.tsx import React f…...

【微信小程序】全局配置

1. 全局配置文件及常用的配置项 2.window (1).小程序窗口的组成部分 (2). 了解 window 节点常用的配置项 (3). 设置导航栏的标题 (4). 设置导航栏的背景色 (5). 设置导航栏的标题颜色 (6). 全局开启下拉刷新功能 (7). 设置下拉刷新时窗口的背景色 (8).设置下拉刷新时 loading …...

25届秋招网络安全面试资料库

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…...

Adobe Dimension DN v4.0.2 解锁版下载安装教程 (专业的三维3D建模工具)

前言 Adobe Dimension&#xff08;简称DN&#xff09;是一款3D设计软件&#xff0c;三维合成和渲染工具&#xff0c;2D平面的二维转为3D立体的三维合成工具&#xff0c;用于3Dmax\C4D\MAYA等三维软件生成的效果图&#xff0c;在3D场景中排列对象、图形和光照。3D应用程序使用的…...

Python中*args 和 **kwargs作参数时有什么区别

*args 和 **kwargs 是 Python 函数定义中用于处理可变数量的参数的语法&#xff0c;初学者对于二者总是傻傻区分不了&#xff0c;今天我们就来详细解读一下这两个在参数传递时有什么不同。 首先要明白单个星号可以解包元组或者列表&#xff0c;两个星号可以解包字典。如&#…...

[CSS3]2D与3D变换技术详解

文章目录 2D变换&#xff08;2D Transform&#xff09;3D变换&#xff08;3D Transform&#xff09;结语 CSS3中的2D变换与3D变换是指通过transform属性对HTML元素进行几何操作&#xff0c;使其在二维或三维空间中进行移动、旋转、缩放和倾斜等变换。这些变换为前端开发者提供了…...

大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光

大恒相机通过Line2或Line3直接给出3.3V触发&#xff0c;形成分时曝光 一、分时曝光需求二、3.3V信号分时曝光设计 写在前面 上班了&#xff0c;没多少时间再去精度论文了&#xff0c;大多是项目上的事情。 一、分时曝光需求 一般的12V光源通过光源控制器与大恒相机Line1线连接…...

electronjs实现打开的网页密码自动保存

在 Electron 中实现自动保存网页密码的功能涉及到几个步骤&#xff0c;以下是一个基本的实现思路&#xff1a; 1. 监听登录事件 首先&#xff0c;你需要监听用户的登录事件。当用户在一个网页上登录后&#xff0c;通常会有一个 POST 请求发送到服务器验证凭据。你可以监听这个…...

观测云的自动化监控:CRD 资源与自动发现

在云原生技术快速发展的今天&#xff0c;Kubernetes已成为企业容器化应用的中心舞台。随着应用的规模化和动态化&#xff0c;传统的监控方法已经难以满足需求。自动化监控&#xff0c;以其高效性和准确性&#xff0c;成为云原生监控的新趋势。观测云平台通过与Kubernetes的深度…...

九、OpenCVSharp 中的图像形态学操作

文章目录 简介一、腐蚀1. 腐蚀的原理和数学定义2. 结构元素的形状和大小选择3. 腐蚀操作的代码实现和效果展示二、膨胀1. 膨胀的概念和作用2. 与腐蚀的对比和组合使用(如开运算、闭运算)三、开运算1. 开运算的定义和用途(去除小的明亮区域)2. 开运算在去除噪声和分离物体方…...

http和websocket

http和websocket是什么 网络通信的协议 区别 http: 只能客户端发送&#xff0c;服务端接收。 websocket: 客户端和服务端都可以发送和接收数据。 链接...

Go 语言错误处理

不管使用哪种语言&#xff0c;程序代码都可能包含各种错误&#xff0c;例如语法错误、逻辑错误、除 0 错误和文件缺失等。因此&#xff0c;每种编程语言都有处理错误的内置机制。 1. Go 程序中的错误 需要指出的是&#xff0c;错误有多种类型。语法错误通常是开发人员在编写代…...

LVS部分配置1

LVS nat服务器&#xff08;作时间服务器&#xff09; [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# yum -y install ntpdate [rootlocalhost ~]# ntpdate cn.ntp.org.cn [rootlocalhost ~]# which ntpdate [rootlocalhost…...

美团网站怎么做/学网络运营需要多少钱

php header方法跳转页面&#xff1a;1、立即跳转&#xff0c;代码为【header(Location:other.php)】&#xff1b;2、提示跳转&#xff0c;代码为【header(Refresh:3,Urlother.php);echo 3s 后跳转】。php header方法跳转页面&#xff1a;header()为php函数&#xff0c;向浏览器…...

绿色系的网站/电商网页制作教程

在asp.net编程开发中&#xff0c;有时需要动态变换CSS&#xff0c;比如有的时候做个性化页面&#xff0c;可以这样做 1.<head> 2.  <link id"MyStyleSheet" rel"stylesheet" type"text/css" runat"server" /> 3.<…...

king wordpress theme/外链网站是什么

“近日&#xff0c;水韵城商业管理有限公司与竞优软件达成战略合作协议&#xff0c;在水韵城天虹商业地产管理信息化方面开展合作关系&#xff0c;深化合作内容。水韵城天虹将使用竞优的商业运营管理系统&#xff0c;搭建一体化管控和运营信息化平台&#xff0c;实现从传统管理…...

免费动漫软件app下载大全/嘉兴关键词优化报价

租下店面后的第一件事情就是装修了&#xff0c;装修就面临着一大笔钱要出去了&#xff0c;但是你也要面临着种种装修陷阱&#xff0c;下面小编就带大家了解下店面装修大概多少钱&#xff0c;带大家避开装修陷阱&#xff0c;感兴趣的一起来了解吧。店面装修大概多少钱店面装修根…...

如何查询一个app的开发信息/aso优化重要吗

简介&如何使用HDLBits0 不会吧看不懂英文&#xff1f;1 简介1.1 刷题目录1.2 简介摘要&#xff08;以官方给的讲解为例&#xff09;2 使用2.1 界面2.2 开始刷题2.3 提交2.4 提交之后2.5 参考答案网站是这个 HDLBits.0 不会吧看不懂英文&#xff1f; 这是翻译过来的 . 非常…...

做淘宝设计能做网站吗/搜索引擎谷歌

大概是在4月底入的坑吧&#xff0c;当时看掘金有文章介绍Flexbox在移动端有了一个实现&#xff0c;就是Facebook的yoga&#xff0c;而iOS对应的实现叫做YogaKit。 原来Flexbox布局方式在web端比较流行&#xff0c;仔细研读该文&#xff0c;发现布局方式是盒子模型的概念&#x…...