HAProxy 简单介绍
一 HAProxy介绍
(一)发展历史
HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.2。
HAProxy是可提供高可用性、负载均衡以及基于TcP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HProxy非常适用于并发大(并发达1w以上) web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。
(二) 支持功能功能
-
TCP 和 HTTP反向代理
-
SSL/TSL服务器
-
可以针对HTTP请求添加cookie,进行路由后端服务器
-
可平衡负载至后端服务器,并支持持久连接
-
支持所有主服务器故障切换至备用服务器 keepalive
-
支持专用端口实现监控服务
-
支持停止接受新连接请求,而不影响现有连接
-
可以在双向添加,修改或删除HTTP报文首部字段
-
响应报文压缩
-
支持基于pattern实现连接请求的访问控制
-
通过特定的URI(url)为授权用户提供详细的状态信息
(三) 主要特性
-
可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
-
最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
-
支持多达8种负载均衡算法,同时也支持会话保持;
-
支持虚拟机主机功能,从而实现web负载均衡更加灵活;
-
支持连接拒绝、全透明代理等独特的功能;
-
拥有强大的ACL支持,用于访问控制; sendfile
-
其独特的弹性二x树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条日的增加而速度有所下降;·支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;
-
支持TCP加速,零复制功能,类似于mmap机制;
-
支持响应池(response buffering) ;
-
支持RDP协议;
-
基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;·更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;
-
详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;
-
基于流量的健康评估机制;
-
基于http认证;
-
基于命令行的管理接口;
-
日志分析器,可对日志进行分析
(四) 负载均衡策略
静态调度算法:不管后端,按照调度器的算法进行 分配
动态调度算法:会考虑后端服务器的负载情况
(调度动态时,服务在运行 也可以不影响服务 不需要重新加载 直接生效)
(1) roundrobin,表示简单的轮询 rr
(2) static-rr,表示根据权重
(3) leastconn,表示最少连接者先处理
( 4) source,表示根据请求源IP
(5) uri,表示根据请求的URI,做cdn需使用;
(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name
(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
(五) LVS、Nginx、HAproxy的区别
1 IVS基于Linux操作系统实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
(lvs 是内核中的功能 nginx haproxy 是第三方实现的功能)
2. LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
(Ivs只能提供四层负载均衡无法提供7层负载(无法控制 7层协议 http 头部 url 等)功能单一 nginx, haproxy 可以实现 4层和7层负载,功能较多,但是 性能不如lvs )
3 LVs因为工作在TCP模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URI等多种状态检测方式;
4 HAProxy功能强大,但整体性能低于4层模式的IVS负载均衡。
5 Ngrinx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。
性能:haproxy 对比 nginx 性能优越,功能又单一了,haprox只做反向代理。
性能排序:Ivs> haproxy > nginx
Ivs 没有 后端服务器健康性检测, nginx和haproxy 有后端服务器健康性检测
(六) 调度算法对比
二 安装haproxy
(一)下载源码包
本地yum源的版本比较老旧,可以从官方下载较新版本的源码包进行编译安装
将源码包解压后,可以看到,与之前的nginx、php等编译安装不同,它没有configure执行文件
configuse执行文件主要生成的是Makefile文件,解压完源码包后就已经生成了该文件。
可以查看INSTALL文件,查看如何安装
make clean
#清除之前编译过程中产生的目标文件和临时文件,确保从一个干净的状态开始新的编译过程。make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1-j $(nproc)
#使用系统的逻辑处理器数量同时进行编译,以加快编译速度。TARGET=linux-glibc
#指定目标平台为基于glibc的Linux系统。USE_OPENSSL=1
#启用OpenSSL库支持,使得软件可以利用OpenSSL提供的加密和安全功能。USE_LUA=1
#启用Lua脚本语言支持,允许在软件中编写和运行Lua脚本来扩展功能。USE_PCRE=1
#启用PCRE(Perl Compatible Regular Expressions)库支持,提供强大的正则表达式处理能力。USE_SYSTEMD=1
#启用Systemd支持,使软件能够更好地与Systemd初始化系统集成,例如注册systemd服务等。sudo make install
#完成编译后,使用管理员权限执行此命令将编译好的软件安装到系统预设的安装路径下。
在安装之前,需要解决依赖环境的问题
(二) 解决依赖环境
yum -y install gcc openssl-devel pcre-devel systemd-devel
由于CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy
下载方法在官方文档Lua 官网:www.lua.org
安装LUA:
(三)编译安装
make ARCH=x86_64
#指定要构建的目标处理器架构为x86_64,即适用于64位Intel/AMD处理器的版本。TARGET=linux-glibc
#设置目标平台为基于glibc的Linux系统,glibc是Linux系统中最常用的C语言标准库实现。USE_PCRE=1
#启用PCRE支持,这将允许软件使用复杂的正则表达式进行匹配和处理。USE_OPENSSL=1
#启用OpenSSL支持,提供加密算法、SSL/TLS协议等功能。USE_ZLIB=1
#启用Zlib支持,用于数据压缩和解压缩功能。USE_SYSTEMD=1
#启用Systemd支持USE_LUA=1
#启用Lua脚本语言支持,允许在软件中编写和运行Lua脚本来扩展功能。LUA_INC=/usr/local/lua/src/
#指定Lua头文件目录,编译时需要用到这些头文件来链接到Lua库。LUA_LIB=/usr/local/lua/src/
#指定Lua库文件目录,编译时会链接到这个目录下的库文件以支持Lua功能
(四)配置system管理文件
需要在/usr/lib/systemd/system/目录下建立管理文件
Description=HAProxy Load Balancer
#这一行定义了服务的简要描述,说明该服务是用于提供负载均衡功能的HAProxy
After=syslog.target network.target
#表示此服务在syslog日志系统和网络服务完全启动之后开始启动。[Service] #服务部分包含了与服务运行相关的各种设置。ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
#指定服务启动前执行haproxy命令。表示启动HAProxy前检查配置文件/etc/haproxy/haproxy.cfg
#是否有效,-c表示仅检查配置文件,-q表示静默模式,不输出多余信息。
#该文件需要手动建立并配置信息。
'具体信息在下一目录介绍'ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
#执行haproxy命令,并指定配置文件路径为 /etc/haproxy/haproxy.cfg,
#-Ws:表示以守护进程模式运行并打开Unix套接字以便进行管理操作,
#同时将PID写到/var/lib/haproxy/haproxy.pid 文件中。该文件也需要手动创建ExecReload=/bin/kill -USR2 $MAINPID
#设置当服务收到reload信号时需要执行的操作,这里是发送USR2信号给主进程($MAINPID),
#使得haproxy能够平滑重载配置文件而无需停止服务。LimitNOFILE=100000
#服务的最大打开文件数量限制为100000[Install]
#安装部分定义了如何将此服务与系统的启动目标关联WantedBy=multi-user.target#表明该服务应随多用户目标启动,即在系统进入多用户模式时自动启动haproxy服务
建立system管理时需要加载的文件,及相关配置信息
建立完毕后,启动服务:systemctl enable --now haproxy
(五)配置文件介绍
编译安装完毕后。它的默认配置文件位置是源码包目录下的examples/option-http_proxy.cfg文件
而在system管理文件中并没有加载此目录,而是指向了/etc/haproxy/haproxy.cfg,新建的文件,便于自定义信息。
1,全局设置(global)
global #全局,表示该段信息为全局配置
maxconn 100000 #置全局的最大并发连接数为100000
chroot /usr/local/haproxy
#使运行中的haproxy进程被限制在/usr/local/haproxy目录下,以增强安全性。stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
#创建一个Unix套接字用于本地管理统计信息,权限为0600,只允许管理员访问。uid 99 gid 99 #设置HAProxy进程运行时的用户ID和组ID
daemon #使haproxy以守护进程模式运行于后台。
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info
#定义日志记录,将日志信息发送到本地IP地址127.0.0.1,并使用syslog标识符local3,
#记录级别为info以上的日志信息
2.默认参数(defaults)、
defaults #定义默认的参数设置
option http-keep-alive #用HTTP长连接支持
option forwardfor #开启X-Forwarded-For头部的插入
maxconn 100000 #设置每个frontend或backend的最大并发连接数为100000
mode http #指定默认的模式为HTTP
timeout connect 300000ms #设置建立连接超时时间为300秒
timeout client 300000ms #设置客户端超时时间也为300秒
timeout server 300000ms #置后端服务器超时时间同样为300秒
3.监听设置(listen)
listen stats #监听范围mode http #设置监听器的工作模式为HTTP。bind 0.0.0.0:9999 #将监听器绑定到所有网络接口的9999端口,用于接收外部请求。stats enable #启用统计信息收集和展示功能,允许通过HTTP访问查看自身状态信息log global #使用全局日志设置记录与该监听器相关的活动stats uri /status #设置访问统计信息页面的URI路径为/status。stats auth hauser:123456
#配置基本的HTTP身份验证,用户名为 hauser密码为 123456
#这意味着只有知道此凭据的用户才能访问统计信息。listen web_portbind 0.0.0.0:8899 #创建另一个监听器并将其绑定到所有网络接口的8899端口,对外提供服务mode http #设置该监听器也以HTTP模式工作。log global #使用全局日志设置记录与该监听器相关的活动
三、haproxy调优
(一)进程
服务启动以后,可以看到默认开启一个主进程,带一个工作进程以及三个线程
可以根据cpu个数来决定开机时启动的work进程数量:在全局配置中添加nbproc参数
nbproc n #开启的haproxy work 进程数,默认进程数是一个
重启之后打开的工作进程就是设置的数量
(二)cpu亲缘性
CPU亲缘性(CPU Affinity)是指将进程或线程绑定到特定的CPU核心上运行的技术。通过设置CPU亲缘性,可以避免进程在不同核心之间频繁迁移,从而减少缓存失效、上下文切换等开销,提高系统的整体性能和效率
通过添加cpu-map参数将工作进程与cpu绑定:cpu-map n(work) n(cpu)
这样设置后,haproxy的工作进程将会在指定的核心上运行,有利于优化并行处理能力和减少资源竞争。使得每个进程都在固定的核心上执行,有助于提升数据包处理的稳定性和一致性,尤其在多核处理器环境中更为重要。当然,实际应用时需要根据具体的硬件环境和负载情况合理配置CPU亲缘性。
(三)状态页
可以通过http服务来查看状态页,在写配置文件时就已经添加好了
使用浏览器进行访问
可以看到服务的一些状态信息,所以需要妥善保管密码
(四)日志管理
1.本地日志
haproxy服务没有单独的日志管理文件,它的默认日志文件位置在/var/log/messages
由于该文件的日志信息相对比较重要,建议单独存放
在配置文件的第14行已经定义的日志的格式,只需要在rsyslog日志管理的配置文件中指定信息即可
取消/etc/rsyslog.conf文件中的15,16行的注释信息
$ModLoad imudp: 这是在rsyslog配置文件中加载UDP模块的命令。imudp表示输入模块(Input Module)用于处理UDP协议的数据。通过此命令,系统将能够监听并接收通过UDP端口发送过来的日志消息。
$UDPServerRun 514: 这个指令告诉rsyslog服务在指定的UDP端口(这里为514)上启动一个UDP服务器以监听日志事件。默认情况下,许多网络设备和服务会使用514端口通过UDP协议发送syslog日志信息给日志收集服务器
在第74行添加日志配置
修改完毕后,重启服务:systemctl restart haproxy.service rsyslog.service
重启完毕后,会在/var/log/目录下自动生成日志文件 、
2.远端日志
由于haproxy服务只能做代理服务,对资源消耗较大,建议将日志文件放在远程的日志文件服务器上,专门建立日志文件查看
在haproxy服务的配置文件中,首先定义日志的标识符及信息
修改完毕后重启服务:systemctl restart haproxy.service
在远端服务器上设置同样修改rsyslog日志管理服务的配置文件
有访问时,日志就会记录在该文件中,想要把只记录在远端服务去,只需要把haproxy服务器中的日志配置删除即可
四、Proxies配置
Proxies"配置通常是指对网络流量进行负载均衡和管理的代理设置。具体选项有以下几种:
defaults [<name>]
#默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
frontend <name>#前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。frontend是haproxy接收客户端请求的地方,它定义了对外暴露的服务端口、协议以及处理请求的方式。
backend <name>#后端服务器组,等于nginx的upstream和LVS中的RS服务器
#Backend包含了实际提供服务的一组服务器,haproxy会根据预设的负载均衡算法将来自前#端的请求分发到这些后端服务器上。
listen <name>
#将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用
(一)defaults配置
defaults配置基本为一些调优选项
option redispatch
#当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
option abortonclose#当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务情况选择开启
option http-keep-alive #开启与客户端的会话保持
option forwardfor #透传客户端真实IP至后端web服务器
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 #指定后端服务器的默认设置
(二)frontend与backend
1.基本服务
frontend与backend定义了haproxy服务的反向代理与负载均衡
在配置文件中添加frontend与backend语句块
frontend
#定义了一个名为 "apache" 的前端代理,它监听来自客户端的请求。bind 192.168.83.40:80
#表示该前端代理将绑定到IP地址为 192.168.83.40 的服务器上的80端口,对外提供HTTP服务。use_backend web
#指定当接收到请求时,应将请求转发到名称为 "web" 的后端集群进行处理。backend web
#定义了一个名为 "web" 的后端集群server rs1 192.168.83.30:80 和 server rs2 192.168.83.50:80
#分别定义了两台后端服务器。其中,rs1 对应的实际服务器IP地址是 192.168.83.30,
#并且在该服务器上运行的服务也监听80端口;同样地,rs2 对应的服务器IP地址是 192.168.83.50。
修改完毕后重启服务:systemctl restart haproxy.servic
开服后端服务器
使用客户端进行访问
2.开启健康性检测
当一台服务器意外掉线后,haproxy并不能自动进行健康性检测
需要手动在backend后端语句块中添加check开启
添加完毕后重启服务:systemctl restart haproxy.service
再去访问就会自动过滤不在线的后端服务器
(三)listen配置
listen 配置块是用于定义虚拟服务(Virtual Service)或前端代理(Frontend)。这个配置项结合了frontend和backend的概念,可以简化配置并集中管理同一逻辑服务的所有相关设置
在配置文件中将frontend和backend删除,防止端口与地址冲突,再去配置listen语句
listen web
#创建一个名为 "web" 的监听器,这个监听器将处理相关的网络流量。bind 192.168.83.40:80
#绑定到IP地址为 192.168.83.40(本机)的服务器上的80端口,以接收HTTP请求。mode http
#设置工作模式为HTTP,在defaults配置中已经设置完毕,在此可以不用添加log global
#在全局配置中定义了日志参数,该监听器使用全局日志设置记录与该监听器相关的活动server rs1 192.168.83.30:80 check inter 3000 fall 2 rise 5
#定义后端服务器rs1,其IP地址为 192.168.83.30 并且监听80端口。
#check:启用健康检查健康
#inter 3000:检查间隔时间为30秒 (默认单位为ms毫秒)。
#fall 2:表示如果服务器在两次连续的健康检查中失败,则标记为不可用
#rise 5:而当服务器在连续5次健康检查中成功响应,则恢复其为可用状态server rs2 192.168.83.50:80 check inter 3000 fall 2 rise 5
#原理同上一个后端服务器
使用客户端进行访问,同样达到了反向代理与负载均衡的效果
相关文章:

HAProxy 简单介绍
一 HAProxy介绍 (一)发展历史 HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换…...
SpringBoot集成Swagger3.0
一:前言 Swagger 是一个 RESTful API 的开源框架,它的主要目的是帮助开发者设计、构建、文档化和测试 Web API。Swagger 的核心思想是通过定义和描述 API 的规范、结构和交互方式,以提高 API 的可读性、可靠性和易用性,同时降…...

计算机网络-第5章 运输层(1)
主要内容:进程之间的通信与端口、UDP协议、TCP协议、可靠传输原理(停止等待协议、ARQ协议)、TCP报文首部、TCP三大题:滑动窗口、流量控制、拥塞控制机制 5.1 运输层协议概述 运输层向它上面的应用层提供通信服务,真正…...
性能优化-卡牌项目渲染优化
优化的方向 CPU 影响帧率 GPU 影响帧率 内存 超了会崩 显存 显存超了画面会异常,甚至可能导致游戏崩溃 带宽 影响耗电 分辨率 设备性能不行又要求流畅,降低目标渲染分辨率,立竿见影,但是会牺牲画质 场景 1 使用烘焙…...

STM32FreeRTOS任务通知(STM32cube高效开发)
文章目录 一、任务通知(一)任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify()发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR()发送通知函数ISR版本3、x…...

基于element-plus的Dialog选择控件
翻看之前工程师写的vue2的代码,很多都是复制、粘贴,也真是搞不懂,明明可以写一个控件,不就可以重复使用。很多前端总喜欢element搞一下,ant-design也搞一下,有啥意义,控件也不是自己写的&#x…...

手把手教使用静默 搭建Oracle 19c 一主一备ADG集群
一、环境搭建 主机IPora19192.168.134.239ora19std192.168.134.240 1.配置yum源 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包; rpm -qa|grep yum >oldyum.pkg 备份原信息rpm -qa|grep yum|xargs rpm -e --nodeps 不检查依赖,直接删除…...
使用协程库httpx并发请求
httpx和aiohttp都是比较常用的异步请求库,当然requests多线程或requestsgevent也是不错的选择。 一个使用httpx进行并发请求的脚本如下: import functools import sys import timeimport anyio import httpxasync def fetch(client, results, index) -…...
js的同步异步
JavaScript(JS)是一门单线程的编程语言,这意味着它一次只能处理一个任务。然而,JS 支持同步和异步操作。 同步操作是指代码按照顺序执行,每个操作必须在前一个操作完成后才能进行。这意味着当一个操作在执行时&#x…...
C# MG.CamCtrl 工业相机库(开源) 海康 大恒
C# MG.CamCtrl 相机库(开源) 海康 大恒 介绍工厂模式创建实例选取对应SN号的相机,初始化启动相机取图注销相机参数设置/获取接口 介绍 c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回调信号量模式封装 ,最…...

【Redis】redis的基本使用
📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的概述 为什么要有redis? redis是数据库,mysql也是数据库,redis做缓存的意义就是为了减轻数据库压力 数据库为什么…...

植物病害识别:YOLO水稻病害识别数据集(3000多张,3个类别,yolo标注)
YOLO水稻病害识别数据集,包含细菌性枯萎病,水稻瘟疫,褐斑病3个常见病害类别,共3000多张图像,yolo标注完整,可直接训练。 适用于CV项目,毕设,科研,实验等 需要此数据集或…...

Java实现Tron(波场)区块链的开发实践(三)波场链水龙头、WEB3测试实战
上一节我们具体讲到Java实现Tron波场链的逻辑代码实现。 这一节我们通过部署和开发好的代码,针对测试链进行自测开发,准备测试环境。 1. 创建离线地址 首先我们需要一个离线地址,我们不需要在线进行创建,直接可以通过第一节的离…...
010-$nextTick
$nextTick 1、问题2、$nextTick3、应用场景 1、问题 Vue 实现响应式,在 data 更新后,一定时间内,没有继续操作DOM,然后会触发浏览器渲染引擎去更新DOM,更新DOM也是需要时间的,所以 data 更新引起的 DOM更新…...
[IAGC] Kafka消费者组的负载均衡策略
在Apache Kafka中,负载均衡是通过将主题的每个分区分配给消费者组中的一个消费者来实现的。Kafka的负载均衡算法会尽可能平均地将分区分配给每个消费者。 文章目录 分配策略Kafka的重新平衡扩展性参考资源 分配策略 在Kafka中,有两种内置的分区分配策略…...

2024年会声会影 迎接来了七大新功能
我喜欢Corel VideoStudio 会声会影2024旗舰版,因为它使用起来很有趣。它很容易使用,但仍然给你很多功能和力量。VideoStudio让我与世界分享我的想法!“这个产品的功能非常多,我几乎没有触及它的表面,我可以做大量的编辑…...

AIGC、3D模型、轻量化、格式转换、可视化、数字孪生引擎等(老子云三维模型可视化优化服务平台)
老子云概述 老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 基于 H…...

JMM(Java Memory Model)内存模型
Java内存模型,规范了计算机内存与java虚拟机之间的协调工作,即规定了 将java 虚拟机中的变量存储到内存中和从内从中取出来的内存细节。 Java内存模型中规定了所有的变量都存储在内存中,每条线程还有自己的工作内存,线程对变量的…...
.NET 简介:跨平台、开源、高性能的开发平台
.NET 简介 .NET 是微软开发的一个免费、开源、跨平台的开发人员平台,用于构建各种类型的应用程序。它可以运行使用多种语言编写的程序,其中 C# 是最常用的语言。.NET 依赖于许多大规模应用在生产中使用的高性能运行时。 .NET 平台具有以下特点…...
m序列生成器
function [m] mserial_generator(tap_set) % m序列产生器 % 输出为m序列,未进行极性变换。 L 2^(length(tap_set)-1)-1; x [zeros(1,(length(tap_set)-2)) 1]; for i 1:1:Lm(i)x(end);for j 1:1:length(tap_set)-1sum_vector(j)tap_set(j1)*x(j);endsum_x mod…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...