Haproxy讲解

news2024/9/19 13:44:55

Haproxy:

haproxy是一个开源的高性能反向代理和负载均衡器,主要用于‌TCP和‌HTTP流量管理

  •  

    功能和特点:haproxy能够处理大量的并发连接,支持TCP和HTTP协议,具有高可用性和负载均衡功能。它特别适用于需要处理大量流量的网站,能够保护web服务器不被直接暴露在网络中,同时提供基于cookie的会话保持、健康检查、动态和静态负载均衡策略等功能。‌23

  •  

    应用场景:haproxy被广泛应用于各种需要高性能网络流量管理的场景,包括网站、应用服务等。由于其高性能和可靠性,haproxy已经成为许多高流量网站的负载均衡解决方案。‌36

  •  

    技术细节:haproxy采用事件驱动、单一进程模型,这种模型在处理大量并发连接时表现出色。此外,haproxy还支持多种负载均衡算法,如轮询、最少连接等,以及健康检查功能,能够在后端服务器出现问题时自动剔除,恢复后自动重新加入。‌24 

  总之,haproxy是一个功能强大且高效的工具,适用于需要高性能网络流量管理的各种环境。

1.haproxy七层代理

1.1负载均衡

Haproxy负载均衡是一种建立在现有网络结构之上,‌提供廉价有效透明的方法扩展网络设备和服务器的方法,‌通过数据流量分摊到多个服务器上执行,‌减轻每台服务器的压力,‌从而提高网络的灵活性和可用性。‌Haproxy特别适用于负载特大的web站点,‌这些站点通常需要会话保持或七层处理。‌Haproxy运行在时下的硬件上,‌可以支持数以万计的并发连接,‌并且它的运行模式使得它可以简单安全地整合进用户当前的架构中,‌同时保护web服务器不被暴露到网络上。‌Haproxy实现了一种事件驱动、‌单一进程模型,‌支持非常大的并发连接数,‌这种模型在用户空间实现所有任务,‌没有多进程或多线程模型所面临的内存限制、‌系统调度器限制以及锁限制等问题,‌从而能够处理高并发连接。‌此外,‌Haproxy还支持连接拒绝和全透明代理等特性,‌为网站提供了额外的安全保障。

1.2四层负载均衡

Haproxy的四层负载均衡是基于传输层(‌TCP/UDP)‌的负载均衡技术。‌它通过发布三层(‌网络层)‌的IP地址(‌VIP)‌加上四层(‌传输层)‌的端口号来决定哪些流量需要进行负载均衡。‌这种负载均衡架构不需要解析报文消息内容,‌因此在网络吞吐量与处理能力上相对较高。‌四层负载均衡主要基于IP地址和端口号进行流量分发,‌例如,‌通过VIP和特定的端口号(‌如HTTP的80端口)‌来辨别是否需要处理的流量,‌并进行NAT处理后转发至后台服务器。‌此外,‌四层负载均衡还记录下哪个服务器处理的TCP或UDP流量,‌确保后续该连接的所有流量都同样转发到同一台服务器处理,‌从而实现负载均衡。‌

Haproxy作为一款基于事件驱动、‌单进程模型设计的负载均衡器,‌能够实现在TCP/UDP层面以及HTTP(S)等应用层协议上的高效流量分发,‌包括四层和七层负载均衡。‌四层负载均衡在传输层及以下工作,‌主要依据IP地址和端口号进行流量分发,‌其优势在于性能较高,‌因为不需要解析应用层的报文内容,‌从而在网络吞吐量和处理能力上表现出色

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

1.3七层负载均衡

Haproxy七层负载均衡是一种基于HTTP(‌第七层)‌应用的负载均衡技术,‌它可以根据用户请求的内容将请求转发到不同的后端服务器。‌这种负载均衡方法更加复杂,‌因为它允许负载均衡器根据HTTP请求的内容(‌如URL、‌请求头等信息)‌来决定如何路由请求到后端服务器,‌从而实现更精细的控制和优化。‌Haproxy七层负载均衡特别适合需要会话保持或七层处理的高负载web站点,‌能够提供快速、‌可靠的负载均衡解决方案。‌

Haproxy七层负载均衡的主要特点包括:‌

  • 会话保持:‌能够根据会话信息(‌如cookie)‌将用户的请求路由到同一个后端服务器,‌保持会话的连续性。‌
  • 灵活性:‌支持多种负载均衡算法,‌可以根据服务器的负载情况、‌响应时间等因素进行动态调整,‌实现负载的均衡分配。‌
  • 高性能:‌Haproxy能够支撑数以万计的并发连接,‌处理大量请求,‌具有高性能的特点。‌
  • 安全性:‌通过HAProxy的代理,‌可以避免Web服务器直接暴露给外部网络,‌增加安全性。‌
  • 监控与管理:‌拥有强大的服务器状态监控页面,‌可以实时了解系统的运行状况,‌便于管理和维护。‌

Haproxy七层负载均衡通过这些特点,‌为高负载的web应用提供了可靠、‌高效的负载均衡解决方案,‌特别适用于需要会话保持或七层处理的应用场景。

支持七层的软件:nginx,haproxy

1.4区别

四层和七层负载均衡的主要区别在于它们在网络OSI模型中的操作层次、功能和处理能力。

  •  

    操作层次和功能

    • 四层负载均衡 主要工作在OSI模型的传输层(第4层),基于IP地址和端口号进行负载均衡。它主要负责简单的数据包转发,不涉及应用层数据的解析或修改。‌12
    • 七层负载均衡 则工作在应用层(第7层),能够根据应用层协议(如‌HTTP、FTP等)的信息进行负载均衡。它能够解析和应用层的数据,如URL、HTTP头部等,从而实现更复杂的负载均衡策略,如内容交换和代理。
  •  

    应用场景

    • 四层负载均衡 适用于对性能要求较高,且不需要复杂应用层处理的场景,如简单的TCP应用。‌35
    • 七层负载均衡 更适合需要智能处理的应用,如网站或内部信息平台等基于B/S开发的系统,因为它可以根据应用层信息优化流量分配,提高系统灵活性和安全性。
  •  

    技术特点

    • 四层负载均衡处理速度快,但功能相对简单;七层负载均衡虽然处理开销较大,但提供了更强大的功能和灵活性。‌4

总结来说,选择四层还是七层负载均衡取决于具体的应用需求和技术要求。

2.Haproxy软件下载

LINUX中:dnf install haproxy -y

实验环境:三台主机,haproxy,web1,web2

分别对三台主机进行如下配置

haproxy ip配置

web1 ip配置

web2 ip配置

三台主机均关闭防火墙和SELINUX

 下载安装包
 

#haproxy
dnf install haproxy -y
dnf install socat   -y #可调整服务器动态权重和其它状态
 
#server1、server2
dnf install nginx
echo webserver1 -172.25.250.10 > /usr/share/nginx/html/index.html #server1的访问页面
echo webserver2 -172.25.250.20 > /usr/share/nginx/html/index.html #server2的访问页面
systemctl enable --now nginx
curl 172.25.250.10
curl 172.25.250.20    #测试web服务是否正常运行
rpm -qc haproxy    #查询配置文件
vim /etc/haproxy/haproxy.cfg    #修改配置文件
systemctl start haproxy.service    #重启服务
cat /var/log/messages #查看错误日志

对配置文件/etc/haproxy/haproxy.cfg 进行配置并测试:

修改权限

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#关闭web1
echo "enable server webcluster/web1 " | socat stdio /var/lib/haproxy/stats#开启web1

仅展示了部分命令,了解更多可以去haproxy网站查询

3.haproxy算法

‌HAProxy支持多种调度算法,包括静态和动态调度算法。 这些算法可以根据服务器的状态和负载情况进行动态调整,以提高系统的整体性能和稳定性。

以下是HAProxy中常见的几种调度算法及其特点:

  1.  

    ‌Round Robin(轮询):这是最简单常用的一种算法,基于权重进行轮询调度。在服务器的处理时间保持均匀分布时,这是一种最平衡、最公平的算法。此算法是动态的,表示其权重可以在运行时进行调整。‌

  2.  

    ‌Least Connections(最少连接数):新的连接请求被派发至具有最少连接数目的后端服务器。在有着较长时间会话的场景中推荐使用此算法,如LDAP、‌SQL等,其并不太适用于较短会话的应用层协议,如‌HTTP。‌

  3.  

    ‌Source IP Hash:基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。这种方式可以使同一个客户端IP的请求始终被转发到某特定的后端服务器。‌

  4.  

    ‌URI Hash:基于请求的URI将请求转发至同一个后端节点上。这种模式在缓存代理实现中,对于增加缓存命中率非常理想。‌

  5.  

    ‌URL Parameter:基于请求的URL参数进行调度。

这些调度算法可以根据具体的应用场景和需求进行选择,以达到最佳的负载均衡效果。

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

4.Haproxy高级功能及配置、

4.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.2、基于cookie的会话保持


在一个浏览器访问后,会记住选择,之后刷新一直是该后端主机,另一个浏览器访问则是另一个后端主机

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
    balance roundrobin
    cookie WEBCOOKIE insert nocache indirect
    server web1 172.25.250.10:80 cookie aaa1 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.250.20:80 cookie aaa2 check inter 2 fall 3 rise 5 weight 1
[root@haproxy ~]# systemctl restart haproxy.service 
[root@haproxy ~]# curl -b WEBCOOKIE=aaa1 172.25.250.100
webserver1 - 172.25.250.10
[root@haproxy ~]# curl -b WEBCOOKIE=aaa2 172.25.250.100
webserver2 - 172.25.250.20

4.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.4ip透传

七层代理


七层代理 mode--->http
#webserver1
[root@webserver1 ~]# systemctl disable nginx
[root@webserver1 ~]# systemctl stop nginx
[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1 - 172.25.250.10 > /var/www/html/index.html
[root@webserver1 ~]# vim /etc/httpd/conf/httpd.conf 
如下图标注
%{X-Forwarded-For}i
[root@webserver1 ~]# systemctl enable --now httpd

​#测试
[root@webserver1 ~]# tail -n 3 /etc/httpd/logs/access_log
[root@webserver2 ~]# tail -3 /var/log/nginx/access.log

 

四层代理


四层代理mode--->tcp
看不到IP地址
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
    mode tcp
    server web1 172.25.250.10:80  check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.250.20:80 send-proxy check inter 2 fall 3 rise 5 weight 1
[root@haproxy ~]# systemctl restart haproxy.service

#webserver2
[root@webserver2 ~]# 
 vim /etc/nginx/nginx.conf
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
    ' "$proxy_protocol_addr"'
    
server {
        listen       80 proxy_protocol;

[root@webserver2 ~]# systemctl restart nginx
 
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
 server web1 172.25.250.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.250.20:80 send-proxy check inter 2 fall 3 rise 5 weight 1
[root@haproxy ~]# systemctl restart haproxy.service

​# 测试
[root@webserver2 ~]# tail -n 3 /var/log/nginx/access.log
[root@webserver1 ~]# tail -n 3 /etc/httpd/logs/access_log

4.5基于文件后缀名实现动静分离


[root@webserver1 ~]# dnf install php -y
[root@webserver1 ~]# systemctl restart httpd
[root@webserver1 ~]# vim /var/www/html/index.php
[root@webserver1 ~]# cat /var/www/html/index.php 
<?php
    phpinfo();
?>

#haproxy
frontend webcluster
    bind *:80
    mode http
    acl static path_end -i .html .jpg .png .css .js
    acl php    path_end -i .php
    use_backend webcluster-host if php
    default_backend default-host

5.自定义HAProxy错误界面


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

#webserver1\2主机上
system stop httpd

#haproxy主机上
[root@haproxy ~]# mkdir /etc/haproxy/errorpage -p
[root@haproxy ~]# vim /etc/haproxy/errorpage/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.conf
defaults
    errorfile 503   /etc/haproxy/errorpage/503.http
[root@haproxy ~]# systemctl restart haproxy.service 
​然后用浏览器去访问172.25.250.130

6、haproxy https实现


#证书制作
[root@haproxy ~]# mkdir -p /etc/haproxy/certs
[root@haproxy ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/timinglee.org.key -x509 -days 356 -out /etc/haproxy/certs/timinglee.org.crt
CD shannxi XIan timinglee webserver www.timinglee.org admin@timinglee.org

[root@haproxy ~]# ls /etc/haproxy/certs/
[root@haproxy ~]# cat /etc/haproxy/certs/timinglee.org.key /etc/haproxy/certs/timinglee.org.crt > /etc/haproxy/certs/timinglee.pem

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
frontend webcluster
    bind *:80
    mode http
    redirect scheme https if !{ ssl_fc }  #全网站加密

backend webcluster-host
    mode http
    server web1 172.25.250.10:80 check inter 2 fall 2 rise 5

backend default-host
    mode http
    server web2 172.25.250.20:80 check inter 2 fall 2 rise 5

listen web-https
    bind *:443 ssl crt /etc/haproxy/certs/timinglee.pem
    mode http
    balance roundrobin
    server web1 172.25.250.10:3306 check inter 2 fall 2 rise 5
    server web2 172.25.250.20:3306 check inter 2 fall 2 rise 5

[root@haproxy ~]# systemctl restart haproxy
[root@haproxy ~]# netsata -antup | grep 443

开启web1,web2服务
访问https://172.25.250.130

完成

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

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

相关文章

AI终于会画手了,Flux.1一出世就直接碾压Stable Diffusion(SD)和Midjourney(MJ)

Flux.1模型一发布&#xff0c;AI文生图终于会画手了&#xff0c;Flux.1模型比Stable Diffusion&#xff08;SD&#xff09;和Midjourney&#xff08;MJ&#xff09;更能将手部和长文本生成得更好更合理。 Flux.1模型生成的图&#xff0c;现在手部不再有畸形了。 同时&#xff…

hfs通过stunnel实现https访问

hfs通过stunnel实现https访问 REF:官方文档&#xff0c;有点老旧 https://blog.51cto.com/u_15015155/2554641 步骤 下载stunnel工具 download (笔者用的是windows的) 下载stunnel途中会进行本地证书的制作&#xff08;也可以用openssl自定义证书&#xff09;&#xff0c;如…

C++ 适配器

适配器 适配器是一种设计模式&#xff0c;我们最终实现的功能可以通过不同的路径来实现&#xff0c;那么这个路径就可以称作适配器。 例如下面的例子&#xff1a; 那么在c中也有适配器&#xff0c;例如stack、queue、priority_queue&#xff0c;它们并不是使用了什么新的内存…

【python爬虫】利用Python爬取天气数据,并做可视化分析

首先登录网站&#xff0c;查看网页内容及数据格式(使用代码查看内容)&#xff0c;选择两个城市及对应月份&#xff0c;爬取对应天气数据&#xff0c;进行数据预处理(如缺失值处理、数据类型转换、字符串截取等)&#xff0c;数据的初步探索性分析(如描述性统计、数据可视化查看数…

应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK

随着养宠人群的增多&#xff0c;铲屎官们的需求日益增长&#xff0c;市场上出现了很多品牌的宠物空气净化器。然而&#xff0c;产品质量参差不齐&#xff0c;给消费者选择带来不少困难。劣质宠物空气净化器不仅无法有效去除宠物毛发、皮屑、异味及空气中的有害微粒&#xff0c;…

启动虚拟机:另一个程序已锁定文件的一部分,进程无法访问,打不开磁盘xxx或它所依赖的某个快照磁盘

theme: nico 你们好&#xff0c;我是金金金。 场景 启动虚拟机时报错如下 造成error的原因 这是一种虚拟机的保护机制 虚拟机在运行时&#xff0c;为了防止数据被篡改&#xff0c;会将所运行的文件保护起来。 当虚拟机突然崩溃或强制结束导致异常退出&#xff08;我昨天是直接…

【C++】设计模式 — 从零开始认识单例模式

人的一生本来就是一场有来无回的冒险。 --- priest 《残次品》--- 设计模式 — 单例模式 1 设计模式2 单例模式2.1 饿汉模式2.2 懒汉模式 3 总结 1 设计模式 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结…

YZ系列工具之YZ05:代码运行中调用“计算器”使用说明

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…

语音播报加入预警系统

语音播报加入预警系统 引言 引入语音警报 我们前一章, 已经把jq8900-16p模块, 单独进行了测试, 可以通过发送命令, 让模块播报设定好的声音。那么语音播报&#xff0c; 在预警系统中&#xff0c; 也必不可少&#xff0c; 我们现在有了led灯光警报,如果主人在睡觉, 是不能及时…

redis列表若干记录

2、列表 ziplist ziplist参数 entry结构 entry-data:节点存储的元素prelen&#xff1a;记录前驱节点长度encoding&#xff1a;当前节点编码格式encoding encoding属性 使用多个子节点存储节点元素长度&#xff0c;这种多字节数据存储在计算机内存中或者进行网络传输的时的字节…

排序算法——插入排序

一、插入排序概念 直接插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插…

ubuntu、cpolar、api开启映射之路

1.国内cpolar安装 curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash或 cpolar短链接安装方式&#xff1a;(国外使用&#xff09; curl -sL https://git.io/cpolar | sudo bash2.查看版本号&#xff0c;正常显示即为安装成功 cpolar …

HR系统怎么选?2024年10大热门工具评测

本文中介绍的工具有&#xff1a;Moka、名才MCHR、HiHR、华天动力HRM、红海eHR、易路eRoad、宏景HJSOFT、Gusto、Zenefits、BambooHR。 在当今竞争激烈的商业环境中&#xff0c;找到一个适合企业的HR系统可能是一个令人头疼的问题。市面上的HR工具琳琅满目&#xff0c;各有千秋&…

Django 自定义用户 VS 用户资料

Django是一个流行的Web框架&#xff0c;它提供了一套完整的用户认证系统&#xff0c;其中包括内置的User模型用于存储基本的用户信息&#xff0c;如用户名、密码等。然而&#xff0c;如果我们需要更详细的用户资料管理&#xff0c;比如添加更多的字段或者自定义验证规则&#x…

Linux 常见的冷知识集锦

一、前言 本文旨在记录那些常见的Linux概念和名词&#xff0c;但这些又没经常直接使用到&#xff0c;更多在底层运行&#xff0c;见过却又不是特别清楚的碎片知识&#xff0c;以温故知新。 二、知识点和概念说明 2.1、POSIX标准/协议 POSIX&#xff08;Portable Operating S…

股票技术指标 RSI KDJ MACD

具体指标解释&#xff0c;大模型都有&#xff0c;只说作用 RSI&#xff08;Relative Strength Index&#xff0c;相对强弱指数&#xff09; 超买和超卖水平&#xff1a;通常情况下&#xff0c;RSI值超过70表示市场可能超买&#xff0c;而低于30表示可能超卖。这并不意味着价格…

数据结构:顺序二叉树(堆)

目录 前言 一、堆的实现 1.1 头文件 1.2 堆的初始化及销毁 1.3 堆的插入 1.4 堆的删除 1.5 取堆顶数据和判空 前言 前面我们讲了二叉树有顺序结构和链式结构&#xff0c;今天就来讲一下顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间…

HTTP请求的流转路径,从Tomcat到SpringMVC

本文主要讲一下&#xff0c;一个HTTP请求在后端服务的流转路径&#xff0c;Tomcat等一众servlet容器如何定义了Web应用的基础样貌&#xff0c;后来的MVC框架又是如何弱化了servlet的存在&#xff0c;改为自己实现请求派发的。 前些日子我写了十几篇文章来介绍Tomcat的架构&…

AI在医学领域:联邦学习 (FL) 在肿瘤学的应用综述

关键词&#xff1a;联邦学习 (Federated Learning, FL)、机器学习 (Machine Learning, ML)、肿瘤学 (Oncology)、数据隐私 (Data Privacy)、精准医疗 (Precision Medicine)、多模态 (Multi-modal) 肿瘤学正在经历快速的变革&#xff0c;这得益于机器学习&#xff08;ML&#xf…

tinymce字体为48px后再设置numlist数字列表导致前面的序号字体不对--【已解决】

问题描述&#xff1a; tinymce选择完大号字体&#xff0c;如48px&#xff0c;再选择数字列表&#xff0c;会导致数字列表的序号字体不对。 解决&#xff1a; 演示效果