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
登录状态页
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解析
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
验证
自定义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
基于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
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值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用…...
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 配置…...
直流电机及其驱动
直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作 TB6612是一款双…...
Java-判断一个字符串是否为有效的JSON字符串
在 Java 中判断一个字符串是否为有效的 JSON 字符串,可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类,用于判断给定的字符串…...
FPGA开发板的基本知识及应用
FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路,能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口,以便…...
JVM知识总结(性能调优)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 性能调优 何时进行JVM调优? 遇到以下情况,…...
基于Ascend C的Matmul算子性能优化最佳实践
矩阵乘法是深度学习计算中的基础操作,对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器,其AI Core采用达芬奇架构,以高性能Cube计算引擎为基础,针对矩阵运算进行加速,可大幅提高单位面…...
SQL注入之EVAL长度限制突破技巧
要求: PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? widows小皮环境搭建: 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件,并在其输入代码环境 解题思路: 通…...
稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈
时间序列预测是许多领域的重要问题,包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中,提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻,但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...
详谈系统中的环境变量
目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们,基本都配置过环境变量(windows环境下),如果你也…...
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中模拟空调效果主要依赖于前端界面的交互和状态变化,因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过,我们可以通过JavaScript来模…...
14.2 Pandas数据处理
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...
python学习7---多进程
一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。 因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。 优点&am…...
基于Spring + Vue的旅游景区项目+源代码+文档说明
文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…...
Java后端面试题
Redis缓存穿透、雪崩、击穿,布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上, 现在已经完成了分库分表, 现在的问题出现了, 需要继续新增数据库节点, 请…...
【Git】远程仓库新建分支后,拉到本地开发
1. 在远程仓库上创建分支 2. git fetch origin:在本地同步远程仓库的分支(获取远程仓库所有分支的所有修改) 3. git remote -a:查看所有分支(远程+本地) 4. git checkout -b 本地名 远程仓库…...
React H5设置企业级v6版本路由的配置
路由配置是项目开发的必要一环,尤其是目前流行SPA,下面看看如何使用v6版本路由进行合理的H5路由配置 一、基本页面结构(目录根据开发要求建,下面仅用于展示配置路由) 二、具体文件实现 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(简称DN)是一款3D设计软件,三维合成和渲染工具,2D平面的二维转为3D立体的三维合成工具,用于3Dmax\C4D\MAYA等三维软件生成的效果图,在3D场景中排列对象、图形和光照。3D应用程序使用的…...
Python中*args 和 **kwargs作参数时有什么区别
*args 和 **kwargs 是 Python 函数定义中用于处理可变数量的参数的语法,初学者对于二者总是傻傻区分不了,今天我们就来详细解读一下这两个在参数传递时有什么不同。 首先要明白单个星号可以解包元组或者列表,两个星号可以解包字典。如&#…...
[CSS3]2D与3D变换技术详解
文章目录 2D变换(2D Transform)3D变换(3D Transform)结语 CSS3中的2D变换与3D变换是指通过transform属性对HTML元素进行几何操作,使其在二维或三维空间中进行移动、旋转、缩放和倾斜等变换。这些变换为前端开发者提供了…...
大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光
大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光 一、分时曝光需求二、3.3V信号分时曝光设计 写在前面 上班了,没多少时间再去精度论文了,大多是项目上的事情。 一、分时曝光需求 一般的12V光源通过光源控制器与大恒相机Line1线连接…...
electronjs实现打开的网页密码自动保存
在 Electron 中实现自动保存网页密码的功能涉及到几个步骤,以下是一个基本的实现思路: 1. 监听登录事件 首先,你需要监听用户的登录事件。当用户在一个网页上登录后,通常会有一个 POST 请求发送到服务器验证凭据。你可以监听这个…...
观测云的自动化监控:CRD 资源与自动发现
在云原生技术快速发展的今天,Kubernetes已成为企业容器化应用的中心舞台。随着应用的规模化和动态化,传统的监控方法已经难以满足需求。自动化监控,以其高效性和准确性,成为云原生监控的新趋势。观测云平台通过与Kubernetes的深度…...
九、OpenCVSharp 中的图像形态学操作
文章目录 简介一、腐蚀1. 腐蚀的原理和数学定义2. 结构元素的形状和大小选择3. 腐蚀操作的代码实现和效果展示二、膨胀1. 膨胀的概念和作用2. 与腐蚀的对比和组合使用(如开运算、闭运算)三、开运算1. 开运算的定义和用途(去除小的明亮区域)2. 开运算在去除噪声和分离物体方…...
http和websocket
http和websocket是什么 网络通信的协议 区别 http: 只能客户端发送,服务端接收。 websocket: 客户端和服务端都可以发送和接收数据。 链接...
Go 语言错误处理
不管使用哪种语言,程序代码都可能包含各种错误,例如语法错误、逻辑错误、除 0 错误和文件缺失等。因此,每种编程语言都有处理错误的内置机制。 1. Go 程序中的错误 需要指出的是,错误有多种类型。语法错误通常是开发人员在编写代…...
LVS部分配置1
LVS nat服务器(作时间服务器) [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# yum -y install ntpdate [rootlocalhost ~]# ntpdate cn.ntp.org.cn [rootlocalhost ~]# which ntpdate [rootlocalhost…...
美团网站怎么做/学网络运营需要多少钱
php header方法跳转页面:1、立即跳转,代码为【header(Location:other.php)】;2、提示跳转,代码为【header(Refresh:3,Urlother.php);echo 3s 后跳转】。php header方法跳转页面:header()为php函数,向浏览器…...
绿色系的网站/电商网页制作教程
在asp.net编程开发中,有时需要动态变换CSS,比如有的时候做个性化页面,可以这样做 1.<head> 2. <link id"MyStyleSheet" rel"stylesheet" type"text/css" runat"server" /> 3.<…...
king wordpress theme/外链网站是什么
“近日,水韵城商业管理有限公司与竞优软件达成战略合作协议,在水韵城天虹商业地产管理信息化方面开展合作关系,深化合作内容。水韵城天虹将使用竞优的商业运营管理系统,搭建一体化管控和运营信息化平台,实现从传统管理…...
免费动漫软件app下载大全/嘉兴关键词优化报价
租下店面后的第一件事情就是装修了,装修就面临着一大笔钱要出去了,但是你也要面临着种种装修陷阱,下面小编就带大家了解下店面装修大概多少钱,带大家避开装修陷阱,感兴趣的一起来了解吧。店面装修大概多少钱店面装修根…...
如何查询一个app的开发信息/aso优化重要吗
简介&如何使用HDLBits0 不会吧看不懂英文?1 简介1.1 刷题目录1.2 简介摘要(以官方给的讲解为例)2 使用2.1 界面2.2 开始刷题2.3 提交2.4 提交之后2.5 参考答案网站是这个 HDLBits.0 不会吧看不懂英文? 这是翻译过来的 . 非常…...
做淘宝设计能做网站吗/搜索引擎谷歌
大概是在4月底入的坑吧,当时看掘金有文章介绍Flexbox在移动端有了一个实现,就是Facebook的yoga,而iOS对应的实现叫做YogaKit。 原来Flexbox布局方式在web端比较流行,仔细研读该文,发现布局方式是盒子模型的概念&#x…...