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

Haproxy讲解

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

完成

相关文章:

Haproxy讲解

Haproxy: haproxy是一个开源的高性能反向代理和负载均衡器&#xff0c;主要用于‌TCP和‌HTTP流量管理。 功能和特点&#xff1a;haproxy能够处理大量的并发连接&#xff0c;支持TCP和HTTP协议&#xff0c;具有高可用性和负载均衡功能。它特别适用于需要处理大量流量的网站&am…...

K8S系列——一、Ubuntu上安装Helm

在使用K8S搭建集群服务时&#xff0c;有时候需要用到Helm&#xff08;一个用于Kubernetes应用管理的工具&#xff09;&#xff0c;下面是在Ubuntu上安装Helm的过程。 1.更新系统软件包列表 sudo apt-get update2.安装必要的依赖项 sudo apt-get install apt-transport-https…...

排序: 插入\希尔\选择\归并\冒泡\快速\堆排序实现

1.排序的概念及应用 1.1概念 排序:所谓排序&#xff0c;就是一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 1.2运用 购物筛选排序&#xff1a; 1.3常见排序算法 2.实现常见的排序算法 int a[ {5,3,9,6,2,4,7,1,8}; 2…...

OpenCV图像处理——按最小外接矩形剪切图像处理ROI后映射回原图像

引言 在图像处理过程中&#xff0c;提取感兴趣区域&#xff08;ROI&#xff09;并在其上进行处理后&#xff0c;往往需要将处理后的结果映射回原图像。这一步通常涉及以下几个步骤&#xff1a; 找到最小外接矩形&#xff1a;使用 cv::boundingRect 或 cv::minAreaRect 提取感兴…...

Linux中以单容器部署Nginx+ASP.NET Core

强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器&#xff0c;本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程。 Nginx->ASP.NET Coe部署架构容器化 在Docker中部署Nginx--->ASP.NETCore 有两种选择&#xff0c; 第一种是在单容器…...

【秋招笔试】8.11大疆秋招(第三套)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…...

标题:打造编程学习的知识宝库:高效笔记记录与整理

标题&#xff1a;打造编程学习的知识宝库&#xff1a;高效笔记记录与整理 在编程学习的征途中&#xff0c;有效的笔记记录和整理技巧对于掌握和回顾知识点至关重要。本文将从笔记工具选择、笔记结构设计、以及实践与复习策略三个方面&#xff0c;探讨如何高效地记录并整理编程…...

【Rust光年纪】Rust 官方提供的关键工具概览:代码检查、格式化和依赖管理

提升 Rust 项目质量和安全性&#xff1a;掌握官方工具的核心功能和使用方法 前言 Rust 作为一种系统编程语言&#xff0c;拥有强大的性能和内存安全特性。然而&#xff0c;随着项目规模增长&#xff0c;代码检查、格式化和依赖管理等工作变得更加重要。因此&#xff0c;Rust …...

【Python学习-UI界面】PyQt5 小部件8-QSlider 数值滑动

样式如下: QSlider 类对象为用户提供一个沟槽&#xff0c;可以在其上移动一个手柄。 它是一个经典的小部件&#xff0c;用于控制有界值。 手柄在沟槽上的位置相当于控件的下限和上限之间的整数。 常用方法如下&#xff1a; 序号方法描述1setMinimum设置滑块的最小值2setMax…...

MapReduce入门教程

这可不是目录 入门定义与说明数据分析Map和Reduce阶段的任务<Kn,Vn>分析MapReduce的数据类型其他说明(持续更新) 开发案例(持续更新)自定义的wordcountcsv文件操作序列化操作 入门 定义与说明 数据分析 以下未数据分析示意图 Map和Reduce阶段的任务 Map阶段的任务&a…...

JDBC1 Mysql驱动,连接数据库

JDBC 一、JDBC Java Database Connectivity&#xff1a;Java访问数据库的解决方案 JDBC定义了一套标准接口&#xff0c;即访问数据库的通用API&#xff0c; 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c;让具体的…...

LeetCode 205 同构字符串

题目 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符上&#xff0c…...

ARM高性能计算(HPC)处理器Neoverse介绍

思考: Neoverse系列中的N、V、E有什么区别? 这三个字母的缩写又是什么? ARM Neoverse架构是ARM专为服务器、数据中心、高性能计算(HPC)和网络基础设施设计的一系列处理器架构。Neoverse架构分为N系列、V系列和E系列,这些系列面向不同的应用场景,各自有不同的设计目标和…...

【每日力扣中医养生】力扣1298. 你能从盒子里获得的最大糖果数

1298. 你能从盒子里获得的最大糖果数 文章目录 【每日力扣&中医养生】力扣1298. 你能从盒子里获得的最大糖果数题目描述示例解析示例 1示例 2 算法思路算法步骤代码实现复杂度分析总结 【每日力扣&中医养生】力扣1298. 你能从盒子里获得的最大糖果数 《黄帝内经》的阴…...

大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

C#创建一个自定义控件类

如果你希望在 TextBox 内部嵌入一个按钮&#xff0c;并且这个按钮用于打开文件选择对话框&#xff0c;可以创建一个自定义控件来实现这一功能。下面是一个示例&#xff0c;展示如何在 Windows 窗体应用程序中创建一个自定义控件&#xff0c;其中 Button 嵌入到 TextBox 内部。 …...

springboot牙科就诊管理系统--论文源码调试讲解

2 相关技术 2.1 MySQL数据库 本设计用到的数据库就是MySQL数据库[3]&#xff0c;之所以用到这个数据库的原因很多。首先&#xff0c;从满足功能需求上面来讲&#xff0c;MySQL是符合的&#xff1b;其次&#xff0c;从学习程度来讲&#xff0c;MySQL相比其他数据库不管是从安装…...

CUDA+tensorflow+python+vscode在GPU下环境安装及问题汇总与解答

2024.8.14 因为要做深度学习&#xff0c;需要安装tensorflowgpu的环境&#xff0c;每次都搞不好整的很生气&#xff0c;本次将安装过程中参考的一些大佬的博客和安装过程中遇到的问题及解决方案总结一下&#xff0c;希望以后不要在这件事情上浪费时间。安装环境其实也没有想象中…...

24/8/14算法笔记 复习_逻辑回归sigmoid

import numpy as np import matplotlib.pyplot as pltdef sigmoid(x):return 1/(1np.exp(-x))x np.linspace(-5,5,100) y sigmoid(x)plt.plot(x,y,colorgreen) #损失函数 from sklearn import datasets from sklearn.linear_model import LogisticRegression from mpl_toolki…...

MySQL忘记/无root密码,强制修改root密码

MySQL忘记/无root密码&#xff0c;强制修改root密码_mysql无root密码登录后设置密码-CSDN博客 sudo vi /etc/mysql/my.cnf 添加如下内容&#xff1a; [mysqld] skip-grant-tablessudo service mysql restart mysql -u root -p use mysql; update mysql.user set authentica…...

探索 MongoDB 的 $currentDate:解决 TTL 时间不同步问题的利器

在我们日常的开发工作中&#xff0c;时间管理是一个非常重要的环节。尤其是在处理数据库中的数据时&#xff0c;时间戳的准确性和一致性至关重要。今天&#xff0c;我们要聊聊 MongoDB 中的一个神奇操作符——$currentDate&#xff0c;它是如何帮助我们解决 TTL&#xff08;Tim…...

defineModel

前言 随着 Vue3.4 版本的发布&#xff0c;defineModel 也正式转正了。它可以简化父子组件之间的双向绑定&#xff0c;是目前官方推荐的双向绑定实现方式。 defineModel 使用 在开发的过程中&#xff0c;如果有需要通过子组件进行状态更新的话&#xff0c;v-model是一个绕不开…...

去中心化技术的崛起:探索Web3的新时代

引言&#xff1a; Web3是互联网发展的新阶段&#xff0c;它通过去中心化技术重新定义了数字世界的运作方式。这一新时代不仅带来了技术上的突破&#xff0c;也为社会互动和数据管理开辟了新的前景。本文将深入探讨Web3的核心技术、应用领域、全球影响以及面临的挑战&#xff0…...

GNU/Linux - copy_{to,from}_user: 用户和内核空间的内存互拷贝

copy_{to,from}_user 函数是 Linux 内核编程的基本组成部分。它用于将数据从用户空间复制到内核空间。在编写内核模块或使用设备驱动程序时&#xff0c;安全地处理用户空间和内核空间之间的数据传输对防止安全漏洞和确保系统稳定至关重要。 The copy_{to,from}_user function i…...

进阶岛任务1: 探索 InternLM 模型能力边界

任务 https://aicarrier.feishu.cn/wiki/QjBswYlmdiSGfskq6vNcBmZCn09 在 CompassArena 中选择双模型对话&#xff0c;与InternLM2.5及另外任意其他模型对话&#xff0c;收集 5 个 InternLM2.5 输出结果不如其他模型的对话案例&#xff0c;以及 InternLM2.5 的 5 个 Good Ca…...

RabbitMQ实现多线程处理接收消息

前言&#xff1a;在使用RabbitListener注解来指定消费方法的时候&#xff0c;默认情况是单线程去监听队列&#xff0c;但是这个如果在高并发的场景中会出现很多个任务&#xff0c;但是每次只消费一个消息&#xff0c;就会很缓慢。单线程处理消息容易引起消息处理缓慢&#xff0…...

AI智能网关 边缘计算 视觉AI

随着人工智能技术的不断发展&#xff0c;AI智能网关正成为连接现实世界和虚拟智能世界的重要桥梁。作为智能化时代的关键设备&#xff0c;AI智能网关在物联网、工业、市政、无人驾驶、农业、环保、水利等领域起到了至关重要的作用。   首先&#xff0c;AI智能网关是物联网的核…...

Java基础之原反补码

原反补码 学习这个知识点之前&#xff0c;我们先来看一个题目&#xff1a;写出10的二进制形式 答案及解读&#xff1a; ​ 0b 0 0(23个) 0000 1010 ​ 10对应的类型为int&#xff0c;在计算机底层占4字节&#xff0c;需要32个比特位表示 ​ 其中最高位为符号位&#xff0c;0表…...

Unity如何使用Spine动画导出的动画

Unity如何使用Spine动画导出的动画 介绍使用版本Spine导出源文件修改Spine3.8.75版本导入Unity的3.8版本Spine的报错Unity辅助修改Json中版本号方式总结 介绍 最近公司在做抖音小程序的小游戏&#xff0c;我们这边动画部分使用的是spine动画&#xff0c;所以会有spine导入的问…...

变量位操作

对变量的某位取反 a ^(1<<2);//bit2取反 把变量的某位清零 a & ~(1<<2);//bit2清0 把变量的某位置1 a | (1<<2);//bit2置1...

辛集哪做网站/江苏网络推广公司

文章目录HEVC中的并行处理技术功能并行和数据并行HEVC解码端的并行处理框架HEVC中编码单元数据之间的依赖关系HEVC编解码的并行策略Tile级别的并行策略CTB级别的并行策略/波前并行处理算法&#xff08;WPP&#xff09;x265多线程实现原理Encoder::create()FrameEncoder::thread…...

重庆网站设计平台/痘痘怎么去除有效果

知识点: Canvas():创建一个空的画布&#xff0c;可以使用setBitmap()方法来设置具体的画布 Canvas(Bitmap bitmap):以bitmap对象创建一个画布&#xff0c;则将内容都绘制在Bitmap上&#xff0c;因此bitmap不能为Null Canvas(GL gl):在绘制3D效果时使用&#xff0c;与OpenGL相关…...

做网站需要什么软件/点击器 百度网盘

参考文章&#xff1a;java 中 “” 和 equals 的区别equals和的区别 - 趙小赵 - 博客园如果一个变量指向的数据是对象类型的&#xff0c;那么&#xff0c;这时候涉及了两块内存&#xff0c;对象本身占用一块内存&#xff08;堆内存&#xff09;&#xff0c;变量也占用一块内存&…...

wordpress右侧悬浮插件/如何注册自己的网站

描述为输入一个整型数组&#xff0c;数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。以下我的代码&#xff1a;public int FindGreatestSumOfSubArray(int[] array) {int max array[0];int temp array[…...

基于拍卖的拍卖网站开发/seo网站优化经理

一. 苹果ios官网 1.主页 http://developer.apple.com/ios 官网上的入门教程 http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOSCh/chapters/Introduction.html 2.管理设备列表页 &#xff08;右上角【IOS provisioning Portal】->左侧…...

手机app开发网站建设/深圳网络推广哪家好

假如没有用分层开发&#xff0c;仔细分析三人的开发过程&#xff0c;很容易发现其中的问题&#xff1a; >三人排队式的轮番工作&#xff0c;花费的时间是三人工作时间之和。 >后面开发的人基本都是要先花费时间熟悉前面人的代码&#xff0c;否则开发难以继续。 >以前的…...