haproxy基础
目录
1 HAProxy介绍
1.1 版本对比
1.2 HAProxy功能
2 参数介绍与实践
2.1 global参数说明
2.2 真实代码格式实例
2.3 常用全局参数
2.3.1 nbproc -- 开启几个进程
2.3.2 cpu-map(CUP绑定)
2.3.3 nbthread 2 --开启2个线程
3 Proxies配置
3.1 Proxies配置-defaults
3.2 Proxies配置-frontend(和backend组合使用)
3.3 Proxies配置-backend(与frontend混合使用)
3.4 frontend+backend配置实例
3.5 Proxies配置-listen替代 frontend+backend
3.6 使用子配置文件保存配置
4 Socat 工具
4.1 下载工具
4.2 Socat 工具的使用
4.2.1 查看帮助
4.2.2 套接字文件添加管理员权限
4.2.3 常用实例
4.2.4 套接字文件配合CPU核心分批次管理
1 HAProxy介绍
HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.0
历史版本:
历史版本更新功能:1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2-dev
1.8:多线程,HTTP/2缓存……
1.7:服务器动态配置,多类型证书……
1.6:DNS解析支持,HTTP连接多路复用……
1.5:开始支持SSL,IPV6,会话保持……
企业版网站:[HAProxy Technologies | World's Fastest Load Balancer]
社区版网站:[http://www.haproxy.org/]

1.1 版本对比
| 功能 | 社区版 | 企业版 |
|---|---|---|
| 高级HTTP / TCP负载平衡和持久性 | 支持 | 支持 |
| 高级健康检查 | 支持 | 支持 |
| 应用程序加速 | 支持 | 支持 |
| 高级安全特性 | 支持 | 支持 |
| 高级管理 | 支持 | 支持 |
| HAProxy Dev Branch新功能 | 支持 | |
| 24*7 支持服务 | 支持 | |
| 实时仪表盘 | 支持 | |
| VRRP和Route Health Injection HA工具 | 支持 | |
| ACL,映射和TLS票证密钥同步 | 支持 | |
| 基于应用程序的高级DDoS和Bot保护(自动保护) | 支持 | |
| Bot(机器人)监测 | 支持 | |
| Web应用防火墙 | 支持 | |
| HTTP协议验证 | 支持 | |
| 实时集群追踪 | 支持 |
1.2 HAProxy功能

2 参数介绍与实践
2.1 global参数说明
| 参数 | 类型 | 作用 |
|---|---|---|
| chroot | 全局 | 锁定运行目录 |
| deamon | 全局 | 以守护进程运行 |
| user, group, uid, gid | 全局 | 运行haproxy的用户身份 |
| stats socket | 全局 | 套接字文件 |
| nbproc N (和nbproc互斥) | 全局 | 开启的haproxy worker 进程数,默认进程数是一个 |
| nbthread 1 | 全局 | 指定每个haproxy进程开启的线程数,默认认为每个进程一个线程 |
| cpu-map 0 1 | 全局 | 绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU |
| cpu-map 1 1 | 全局 | 绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1号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 真实代码格式实例
global# 将工作目录锁定在/var/haproxychroot /var/haproxy# 以守护进程运行daemon# 以haproxy用户和组的身份运行user haproxygroup haproxy# 打开了一个套接字文件,允许管理员通过socket与Haproxy交互stats socket /run/haproxy/admin.sock mode 660 level admin# 开启了两个worker进程nbproc 2# 让每个Haproxy进程开启两个线程nbthread 2# 将第一个worker进程绑定了到0号CPU,第二个worker进程绑定了到1号CPUcpu-map 0 0cpu-map 1 1# 设置每个Haproxy进程的最大并发连接数为4000maxconn 4000# 设置每个Haproxy进程SSL最大连接数为4000maxsslconn 4000# 设置每个进程每秒创建的最大连接数量为1000maxconnrate 1000# 设置后端server状态check随机提前或延迟百分比时间为2%spread-checks 2# 指定了pid文件路径pidfile /var/run/haproxy.pid# 定义全局的syslog服务器,日志服务器需要开启UDP协议,最多可以定义两个log 127.0.0.1 local2 info
2.3 常用全局参数
2.3.1 nbproc -- 开启几个进程
查看此时haproxy的进程数
[root@haproxy ~]# pstree -p | grep haproxy|-haproxy(2307)---haproxy(2309)---{haproxy}(2310)
打开配置文件,增加以下行
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

重启服务再次查看进程,由原先的一个进程变成了两个
[root@haproxy ~]# systemctl restart haproxy.service
[root@haproxy ~]# pstree -p | grep haproxy|-haproxy(2375)-+-haproxy(2377)| `-haproxy(2378)
但这样子设置会照成一个不好的效果,会使得CPU抖动
CPU抖动:
CPU抖动是指CPU在短时间内频繁地在不同任务间切换,导致性能下降的现象。这种现象通常发生在多核处理器上,因为操作系统会在不同的核心上调度不同的任务,如果任务之间的切换过于频繁,就会出现CPU抖动。
2.3.2 cpu-map(CUP绑定)
所以为了解决这一问题,就得使用到一个新的参数cpu-map(CUP绑定)

2.3.3 nbthread 2 --开启2个线程
注意:多进程与多线程不能同时开多个,不然会报错


查看系统日志文件,说明如果使用多个线程就不能使用多个进程

注释

重启服务
[root@haproxy ~]# systemctl restart haproxy.service
[root@haproxy ~]# pstree -p | grep haproxy|-haproxy(3388)---haproxy(3390)---{haproxy}(3391)[root@haproxy ~]# cat /proc/3390/status | grep -i thread
Threads: 2
Speculation_Store_Bypass: thread vulnerable

3 Proxies配置
| 参数 | 类型 | 作用 |
|---|---|---|
| defaults | proxies | 默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name |
| frontend | proxies | 前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群 |
| backend | proxies | 后端服务器组,等于nginx的upstream和LVS中的RS服务器 |
| listen | proxies | 将frontend和backend合并在一起来配置,相对于frontend和backend配置更简洁,生产常用 |
3.1 Proxies配置-defaults
| 参数 | 功能 |
|---|---|
| option abortonclose | 当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务情况选择开启 |
| option redispatch | 当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发 |
| option http-keep-alive | 开启与客户端的会话保持 |
| option forwardfor | 透传客户端真实IP至后端web服务器(在apache配置文件中加入:%{X-Forwarded-For}i后在webserer中看日志即可看到地址透传信息) |
| mode http|tcp | 设置默认工作类型,使用TCP服务器性能更好,减少压力 |
| timeout http-keep-alive 120s | session 会话保持超长时间,此时间段内会转发出相同的后端服务器 |
| timeout connect 120s | 客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),默认单位ms |
| timeout server 600s | 客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms,如果超时,会出现502错误,此值建议设置较大些,防止502错误 |
| timeout client 600s | 设置haproxy与客户端的最长非活动时间,默认单位ms,建议和timeout server相同 |
| timeout check 5s | 对后端服务器的默认检测超时时间 |
| default-server inter 1000 weight 3 | 指定后端服务器的默认设置 |
3.2 Proxies配置-frontend(和backend组合使用)
frontend 配置参数:
bind: #指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中#格式:
bind [<address>]:<port_range> [, ...] [param*]#注意:如果需要绑定在非本机的IP,需要开启内核参数:net.ipv4.ip_nonlocal_bind=1
生产示例:
frontend webcluster #可以采用后面形式命名:业务-服务-端口号bind :80,:8080bind 10.0.0.7:10080,:8801-8810,10.0.0.17:9001-9010mode http|tcp #指定负载协议类型use_backend <backend_name> #调用的后端服务器组名称
3.3 Proxies配置-backend(与frontend混合使用)
定义一组后端服务器,backend服务器将被frontend进行调用。
mode http|tcp #指定负载协议类型,和对应的frontend必须一致
option #配置选项
server #定义后端real server
注意:option后面加 httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更多应用层检测功能。
server 配置
check #对指定real进行健康状态检查,如果不加此设置,默认不开启检查addr <IP> #可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量port <num> #指定的健康状态监测端口inter <num> #健康状态检查间隔时间,默认2000 msfall <num> #后端服务器从线上转为线下的检查的连续失效次数,默认为3rise <num> #后端服务器从下线恢复上线的检查的连续有效次数,默认为2
weight <weight> #默认为1,最大值为256,0表示不参与负载均衡,但仍接受持久连接
backup #将后端服务器标记为备份状态,只在所有非备份主机down机时提供服务,类似Sorry Server
disabled #将后端服务器标记为不可用状态,即维护状态,除了持久模式,将不再接受连接
redirect prefix http://www.baidu.com/ #将请求临时(302)重定向至其它URL,只适用于http模式
redir http://www.baidu.com #将请求临时(302)重定向至其它URL,只适用于http模式
maxconn <maxconn> #当前后端server的最大并发连接数
backlog <backlog> #当前端服务器的连接数达到上限后的后援队列长度,注意:不支持backend
3.4 frontend+backend配置实例
frontend webclusterbind *:80mode httpuse_backend webcluster-hostbackend webcluster-host# 使用 roundrobin 动态算法balance roundrobinserver web1 192.168.239.10:80 check inter 3000 fall 3 rise 5server web2 192.168.239.20:80 check inter 3000 fall 3 rise 5# check 关键字表示启用健康检查。
# inter 3000 表示健康检查的间隔时间为 3 秒钟。
# fall 3 表示连续失败 3 次之后,HAProxy 认为这个服务器不可用。
# rise 5 表示连续成功 5 次之后,HAProxy 认为这个服务器可用
3.5 Proxies配置-listen替代frontend+backend
使用listen替换上面的frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用
#官网业务访问入口
listen webclusterbind *:80mode httpbalance roundrobin# inter 健康检查的时间 每隔2毫秒进行一次健康检查# fall 如果连续三次健康检查都失败,那么HAProxy会认为该服务器不可用.# rise 如果连续五次健康检查都成功,那么HAProxy会认为该服务器可用。server web1 192.168.239.10:80 check inter 2 fall 3 rise 5 weight 1server web2 192.168.239.20:80 check inter 2 fall 3 rise 5 weight 1
3.6 使用子配置文件保存配置
当业务众多时,将所有配置都放在一个配置文件中,会造成维护困难。可以考虑按业务分类,将配置信息拆分,放在不同的子配置文件中,从而达到方便维护的目的。
#创建子配置文件,注意:必须为cfg后缀
[root@node1 ~]# vim /etc/haproxy/conf.d/test.cfg
listen WEB_PORT_80bind *:80mode httpbalance roundrobinserver web1 192.168.239.14:80 check inter 3000 fall 3 rise 5server web2 192.168.239.15:80 check inter 3000 fall 3 rise 5
在使用yum安装的版本中服务脚本中是默认加载子配置文件的,不需要在主配置文件里增加配置

4 Socat 工具
Socat 是 Linux 下的一个多功能的网络工具,名字来由是Socket CAT,Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、Socket文件等
静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和响应速度等,且无法实时修改权重,只能靠重启HAProxy生效。可以利用 socat工具对服务器动态权重和其它状态的调整
4.1 下载工具
[root@haproxy ~]# yum -y install socat
4.2 Socat 工具的使用
4.2.1 查看帮助
# 查看帮助[root@haproxy ~]# socat -h
# stdio 是 socat 的一个选项,它表示标准输入/输出。在这个命令中,stdio 用来接收来自 echo 的输入,并将其传递给 /var/lib/haproxy/stats
[root@haproxy ~]# echo help | socat stdio /var/lib/haproxy/stats
4.2.2 套接字文件添加管理员权限
打开haproxy的配置文件

4.2.3 常用实例
[root@haproxy ~]# echo show servers state | socat - /var/lib/haproxy/stats
1
# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_port srv_check_addr srv_agent_addr srv_agent_port
2 webcluster 1 web1 192.168.239.10 2 0 1 1 171 6 3 7 6 0 0 0 - 80 - 0 0 - - 0
2 webcluster 2 web2 192.168.239.20 2 0 1 1 172 6 3 7 6 0 0 0 - 80 - 0 0 - - 0
2 webcluster 3 web3_sorry 192.168.239.100 2 0 1 1 15732 1 0 2 0 0 0 0 - 8080 - 0 0 - - 0[root@haproxy ~]# echo get weight webcluster/web1 | socat - /var/lib/haproxy/stats
1 (initial 1)# 修改weight,注意只针对单进程有效
[root@haproxy ~]# echo set weight webcluster/web1 2 | socat stdio /var/lib/haproxy/stats[root@haproxy ~]# echo get weight webcluster/web1 | socat - /var/lib/haproxy/stats
2 (initial 1)# 将后端服务器禁用,注意只针对单进程有效
[root@haproxy ~]# echo disable server webcluster/web1 | socat stdio /var/lib/haproxy/stats# 将后端服务器启用
[root@haproxy ~]# echo enable server webcluster/web1 | socat stdio /var/lib/haproxy/stats# 将后端服务器软下线,即weight设为0
[root@haproxy ~]# echo set weight webcluster/web1 0 | socat - /var/lib/haproxy/stats
[root@client ~]# while true;do curl 192.168.239.100; sleep 0.1; done
this is web2
this is web2
this is web2
this is web2
this is web2# 如果静态算法,如:static-rr,可以更改weight为0或1,但不支持动态更改weight为其它值,否则会提示下面信息
[root@haproxy ~]# echo set weight webcluster/web1 0 | socat - /var/lib/haproxy/stats
[root@haproxy ~]# echo set weight webcluster/web1 1 | socat - /var/lib/haproxy/stats
[root@haproxy ~]# echo set weight webcluster/web1 2 | socat - /var/lib/haproxy/stats
Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.
4.2.4 套接字文件配合CPU核心分批次管理
设置第一个套接字文件由第一个进程管,第二个进程管第二个套接字

# nbproc 2:这行配置指定了 HAProxy 进程的数量,这里是 2 个进程。
#
# cpu-map 1 0 cpu-map 2 1:这两行配置指定了每个进程应该绑定到哪个 CPU 核心上。1 0 表示第一个进程
# 绑定到第 0 个核心,2 1 表示第二个进程绑定到第 1 个核心>。这意味着 HAProxy 将创建两个进程,其中一
# 个进程将被绑定到 CPU 的第一个核心,另一个进程将被绑定到 CPU 的第二个核心。这样做的目的是为了更好地
# 利用多核处>理器,提高性能。
#
# stats socket /var/lib/haproxy/stats1 mode 600 level admin process 1:
# 这行配置打开了一个名为 /var/lib/haproxy/stats1 的套接字文件,用于收集 HAProxy 的统计信息。
# mode 600 表示权限为 600,level admin 表示管理员级别,process 1 表示仅限于第一个进程。这意味着
# 只有拥有足够权限的用户才能访问这个套接字,而且>只能访问第一个进程的信息。
#
# stats socket /var/lib/haproxy/stats2 mode 600 level admin process 2:这行配置同上,但仅限于
# 第二个进程。这意味着只有拥有足够权限的用户才能访问这个套接字,而且只能访问第二个进程的信息。
#
# 总的来说,这段代码的作用是启动两个 HAProxy 进程并将它们绑定到不同的 CPU 核心,同时开放了两个套接
# 字供管理员获取这两个进程的统计信息。这样做的好处是可>以更有效地监控和管理 HAProxy,在多核环境中充
# 分利用硬件资源# 这样每个进程就会有单独的sock文件来进行单独管理[root@haproxy ~]# ll /var/lib/haproxy/
总用量 0
srw-------. 1 root root 0 8月 10 00:24 stats
srw-------. 1 root root 0 8月 10 00:33 stats1
srw-------. 1 root root 0 8月 10 00:33 stats2相关文章:
haproxy基础
目录 1 HAProxy介绍 1.1 版本对比 1.2 HAProxy功能 2 参数介绍与实践 2.1 global参数说明 2.2 真实代码格式实例 2.3 常用全局参数 2.3.1 nbproc -- 开启几个进程 2.3.2 cpu-map(CUP绑定) 2.3.3 nbthread 2 --开启2个线程 3 Proxies配置 3.1 Proxies配置-defaults 3.2 Proxi…...
C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)
📚 本文主要总结了一些常见的C面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C的岗位技能(红色标记为重点内容),欢迎大家前来学习指正&…...
LVS实验——部署DR模式集群
目录 一、实验环境 二、配置 1、LVS 2、router 3、client 4、RS 三、配置策略 四、测试 1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP 2.Web服务器采用和DIP相同的网段和Director连接 3.每个Web服务器配置VIP 4.每个web服务器可以出外网…...
pythonUI自动化008::allure测试报告(安装及应用)
allure报告预览 1 下载jdk,配置jdk Path变量: https://www.cnblogs.com/FBGG/p/15103119.html(这里不作阐述,请看该偏文章配置即可) 2 下载allure驱动,配置allure Path变量: 下载allure驱动&a…...
常用的 git 和 linux 命令有哪些?
对于 Git 命令: 1. git init:初始化一个新的 Git 仓库。 2. git clone:克隆一个远程仓库到本地。 3. git add:将文件添加到暂存区。 4. git commit:提交暂存区的更改。 5. git status:查看工作区和暂存…...
MYSQL 删除一个字段前,判断字段是否存在
开发过程中经常需要提交可以重复执行的sql,当设计到需要增加字段时,可以参考如下办法: 1.如果是mysql 版本高于5.7.5 ALTER TABLE table_name DROP COLUMN IF EXISTS column_name; 2.通用方法 写一个存储过程,然后用存储过程取…...
vulnstack-5
环境搭建 靶场虚拟机共用两个,一个外网一个内网,用来练习红队相关内容和方向,主要包括常规信息收集、Web攻防、代码审计、漏洞利用、内网渗透以及域渗透等相关内容学习。 虚拟机密码 win7 sun\heart 123.com sun\Administrator dc123.com # …...
回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出
回归预测|基于灰狼优化GWO-Transformer-LSTM组合模型的数据回归预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出GWO-Transformer-BiLSTM 一、GWO-Transformer-BiLSTM模型二、实验…...
STM32的USB接口介绍
STM32 USB接口是STM32微控制器系列中集成的一种通信接口,它允许STM32微控制器与外部设备或计算机进行高速的数据传输和通信。以下是STM32 USB接口的简要介绍: 1. 接口类型 STM32的USB接口通常支持USB 2.0标准,部分高端型号可能还支持USB 3.…...
【中等】 猿人学web第一届 第2题 js混淆 动态cookie 1
目录 调试干扰Hook Function 加密参数定位hook Cookie AST 解混淆字符串解密还原解密函数AST 配合解密函数还原字符串 ASCII 编码字符串还原字符串相加花指令(对象)剔除无用代码虚假 if剔除无引用代码剔除无引用的对象数值还原 switch 还原完整的 AST 代码代码注意 还原加密 请…...
ubuntu 22.04 安装 docker(服务器从毛胚到精装)
1、用户操作 阿里云默认是 root 用户,我们一般要自己创建一个用户,然后给该用户 sudo 权限 添加用户 sudo adduser newUserName赋予sudo权限 sudo usermod -aG sudo newUserName删除用户 sudo deluser --remove-home --remove-all-files newUserNam…...
Vue3从零开始——如何巧妙使用setup语法糖、computed函数和watch函数
文章目录 一、setup语法糖二、computed函数2.1 computed的基本用法2.2 computed vs methods2.3 注意事项 三、watch函数3.1 watch的基本用法3.2 immediate和deep选项 四、综合小Demo五、总结 一、setup语法糖 之前我们在编写代码时每次都要编写setup() ,默认导出配置&#x…...
【C++】 特殊类设计:从构思到实现,引领设计新潮流
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 🚀 前言 一: 🔥 不能被拷贝的类 二: 🔥 只能在堆上创建对象的类 三: 🔥 只能在栈上创建对象的…...
性能调优 18. Tomcat整体架构及其设计精髓分析
1. Tomcat介绍 1.1. 介绍 这边使用的是Tomcat9来做说明,本章节先对Tomcat架构和设计有个整体认识。后续章节会对Tomcat性能调优做说明。 官方文档介绍 https://tomcat.apache.org/tomcat-9.0-doc/index.html1.2. Tomcat概念 …...
【C++高阶】:特殊类设计和四种类型转换
✨ 人生如梦,朝露夕花,宛若泡影 🌏 📃个人主页:island1314 🔥个人专栏:C学习 ⛺️ 欢迎关注:👍点赞 👂&am…...
kafka基础概念二
1.Kafka中主题和分区的概念 1.主题Topic 主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费 但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因…...
牛客-热身小游戏
题目链接:热身小游戏 第一种写法:线段树 介绍第二种写法:并查集 对于一些已经查询过的点,我们可以往后跳,进行路径压缩,他们的父亲为下一个点。 a数组记录[ l , r ] 之间的乘积,初始值为1。…...
Python 深度学习调试问题
Python–深度学习解决的常见问题 1.在自己写测试样例的时候,有时候可能将要传入的是input_size,不小心传入为input_dim,这个时候会导致出现问题,自定义的卷积模块或者池化等模块会提示类型问题。 解决的策略是: 1.进行assert i…...
linux恶意请求
nginx访问日志: 162.243.135.29 - - [05/Jan/2024:00:12:07 0800] "GET /autodiscover/autodiscover.json?zdi/Powershell HTTP/1.1" 404 153 "-" "Mozilla/5.0 zgrab/0.x"107.151.182.54 - - [04/Mar/2024:11:30:06 0800] "G…...
Java 反射笔记总结(油管)
Java系列文章目录 IDEA使用指南 Java泛型总结(快速上手详解) Java Lambda表达式总结(快速上手详解) Java Optional容器总结(快速上手图解) Java 自定义注解笔记总结(油管) Jav…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
