Haproxy集群与常见的Web集群调度器

文章目录

  • 1. Web集群调度器概述
    • 1.1 Web集群调度器简介
    • 1.2 调度器类别
      • 1.2.1 常用软件类
      • 1.2.2 常用硬件类
  • 2. Haproxy软件介绍
    • 2.1 Haproxy简介
    • 2.2 支持功能
    • 2.3 主要特性
    • 2.4 常用调度算法
      • 2.4.1 轮询:RR(Round Robin)
      • 2.4.2 最小连接数:LC(Least Connections)
      • 2.4.3 基本来源访问:SH(Source Hashing)
      • 2.4.4 uri
      • 2.4.5 url_param
      • 2.4.6 rdp—cookie(name)
      • 2.4.7 source
      • 2.4.8 static-rr
  • 3. Haproxy与其他调度器对比分析
    • 3.1 LVS与Haproxy对比
    • 3.2 LVS、Nginx与Haproxy
    • 3.3 Haproxy的优点
  • 4. Keepalived + Haproxy实现动静分离、负载均衡、高可用
    • 4.1 前置准备
    • 4.2 配置tomcat动态服务器
    • 4.3 配置nginx静态页面服务器1
    • 4.4 配置nginx静态页面服务器2
    • 4.5 配置主服务器
    • 4.6 配置备服务器
    • 4.7 测试

1. Web集群调度器概述

1.1 Web集群调度器简介

web集群调度器是用于管理和调度web服务器集群的工具。
它的主要功能是根据特定的算法和策略将请求分配给不同的服务器,以实现负载均衡和高可用性

1.2 调度器类别

1.2.1 常用软件类

  • LVS:性能最好,但是搭建相对复杂
  • Nginx:其中upstream模块支持群集功能,且性能不错,但对群集节点健康检查功能不强,高并发性能没有Haproxy好
  • Haproxy:高并发性能较好,适用于负载大的web站点

1.2.2 常用硬件类

国内的:梭子鱼、绿盟等…
国外的:F5、Array

2. Haproxy软件介绍

2.1 Haproxy简介

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。

2.2 支持功能

  • TCP 和 HTTP反向代理
  • SSL/TSL服务器
  • 可以针对HTTP请求添加cookie,进行路由后端服务器
  • 可平衡负载至后端服务器,并支持持久连接
  • 支持所有主服务器故障切换至备用服务器
  • 支持专用端口实现监控服务
  • 支持停止接受新连接请求,而不影响现有连接
  • 可以在双向添加,修改或删除HTTP报文首部
  • 响应报文压缩
  • 支持基于pattern实现连接请求的访问控制
  • 通过特定的URI为授权用户提供详细的状态信息

2.3 主要特性

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  • 支持多达8种负载均衡算法
  • 支持Session会话保持,Cookie的引导;
  • 支持通过获取指定的url来检测后端服务器的状态;
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制;
  • 支持TCP和HTTP协议的负载均衡转发;
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成

2.4 常用调度算法

Haproxy支持多种调度算法,最常用的有8种

2.4.1 轮询:RR(Round Robin)

RR算法是最简单最常用的一种算法,即轮询调度

2.4.2 最小连接数:LC(Least Connections)

最小连接数算法,根据后端的节点连接数大小动态分配前端请求

2.4.3 基本来源访问:SH(Source Hashing)

基于来源访问调度算法,用于一些有Session会话记录在服务端的场景,可以基于来源的IP、Cookie等做集群调度

2.4.4 uri

表示根据请求的URI,做cdn需使用

2.4.5 url_param

表示根据HTTP请求头来锁定每 一 次HTTP请求。

2.4.6 rdp—cookie(name)

表示根据据cookie (name)来锁定并哈希每一次TCP请求。

2.4.7 source

表示根据请求的源IP,类似Nginx的IP hash机制。

2.4.8 static-rr

表示根据权重,轮询

3. Haproxy与其他调度器对比分析

3.1 LVS与Haproxy对比

LVS在企业应用中抗负载能力很强,但存在不足

LVS不支持正则处理,不能实现动静分离
对于大型网站,LVS的实施配置复杂,维护成本相对较高
Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件

适用于负载大的web站点
运行在硬件上可支持数以万计的并发连接的连接请求

3.2 LVS、Nginx与Haproxy

LVS基于Linux操作系统实现软负载均衡,而Haproxy和Nginx是基于第三方应用实现的软负载均衡

LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而实现Haproxy和Nginx都可以实现4层和7层技术,Haproxy可提供TCP和Http应用的负载均衡综合解决方案

LVS因为工作在ISO模型的第四层,其状态监测功能单一,而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态监测方式

Haproxy功能强大,但整体性能低于4层模式的LVS负载均衡

Nginx主要用于web服务器或缓存服务器

3.3 Haproxy的优点

Haproxy也是支持虚拟主机的

Haproxy支持8种负载均衡器策略

Haproxy的优点能补充nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定url来检测后端服务器的状态

Haproxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

Haproxy支持TCP协议的负载均衡转发

4. Keepalived + Haproxy实现动静分离、负载均衡、高可用

4.1 前置准备

#客户机
192.168.67.100
#虚拟vip地址
192.168.67.200#主服务器
192.168.67.101
#备服务器
192.168.67.102#nginx静态服务器1
192.168.67.103
#nginx静态服务器2
192.168.67.104#tomcat动态服务器1/2
192.168.67.105:8081
192.168.67.105:8082

4.2 配置tomcat动态服务器

#配置tomcat多实例systemctl stop firewalld
setenforce 0
#关闭防火墙#所需安装包
apache-tomcat-9.0.16.tar.gz  
jdk-8u201-linux-x64.rpmrpm -ivh jdk-8u201-linux-x64.rpm  
#安装jdk插件

在这里插入图片描述

#设置JDK环境变量
vi /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_201-amd64   
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

在这里插入图片描述

source /etc/profile.d/java.sh
#调用Java脚本java -version
#查看当前JDK版本

在这里插入图片描述

#部署tomcat多实例服务cd /opt
tar xf apache-tomcat-9.0.16.tar.gz
#解压tomcat源码包

在这里插入图片描述

cp -r apache-tomcat-9.0.16/ /usr/local/tomcat1
cp -r apache-tomcat-9.0.16/ /usr/local/tomcat2#将tomcat复制到usr/local ,并且改名,方便管理

在这里插入图片描述

#更改tomcat1、2 server.xhl文件
vi /usr/local/tomcat1/conf/server.xml
vi /usr/local/tomcat2/conf/server.xml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重复上述操作

#修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
#tomcat1
vi /usr/local/tomcat1/bin/startup.sh 
#编辑启动文件#添加
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1

在这里插入图片描述

vi /usr/local/tomcat1/bin/shutdown.sh
#编辑关闭文件#添加内容
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1

在这里插入图片描述
重复上述操作

#路径启动
/usr/local/tomcat1/bin/startup.sh
/usr/local/tomcat2/bin/startup.shss -natp |grep java
#查看进程

在这里插入图片描述

#准备动态资源
mkdir /usr/local/tomcat1/webapps/test
mkdir /usr/local/tomcat2/webapps/test
#创建动态资源根目录
#创建动态页面#tomcat1
vi /usr/local/tomcat1/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>#tomcat2
vi /usr/local/tomcat2/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   
</head>
<body>
<% out.println("动态页面 2,http://www.test1.com");%>
</body>
</html>
#重启服务/usr/local/tomcat1/bin/shutdown.sh 
/usr/local/tomcat1/bin/startup.sh /usr/local/tomcat2/bin/shutdown.sh 
/usr/local/tomcat2/bin/startup.sh ss -natp |grep java
#查看运行情况

在这里插入图片描述

#配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0

在这里插入图片描述

#设置路由
route add -host 192.168.67.200 dev lo:0
route -n

在这里插入图片描述

#配置内核参数
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
#刷新内核参数

在这里插入图片描述

4.3 配置nginx静态页面服务器1

systemctl disable --now forewalld
setenforce 0
#关闭防火墙yum install -y epel-release
yum install -y nginx
#yum安装nginx

在这里插入图片描述
在这里插入图片描述

rpm -ql nginx
#查看主页文件所在路径

在这里插入图片描述

echo this is nginx1 > /usr/share/nginx/html/index.html
#编辑静态页面1
cat /usr/share/nginx/html/index.html

在这里插入图片描述

systemctl start nginx
#启动服务
#配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0

在这里插入图片描述

#设置路由
route add -host 192.168.67.200 dev lo:0
route -n

在这里插入图片描述

#配置内核参数
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
#刷新内核参数

在这里插入图片描述

4.4 配置nginx静态页面服务器2

systemctl disable --now forewalld
setenforce 0
#关闭防火墙yum install -y epel-release
yum install -y nginx
#yum安装nginx

在这里插入图片描述

echo this is nginx2 > /usr/share/nginx/html/index.html
#编辑静态页面2
cat /usr/share/nginx/html/index.html

在这里插入图片描述

systemctl start nginx
#启动服务
#配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0

在这里插入图片描述

#设置路由
route add -host 192.168.67.200 dev lo:0
route -n

在这里插入图片描述

#配置内核参数
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
#刷新内核参数

在这里插入图片描述

4.5 配置主服务器

systemctl stop firewalld
setenforce 0
#关闭防火墙cd /opt
#配置haproxy服务
haproxy-2.8.3.tar.gz     #所需安装包
#安装依赖环境
yum install -y  pcre-devel bzip2-devel gcc gcc-c++ make  zlib-devel pcre-devel openssl-devel systemd-devel

在这里插入图片描述

tar xf haproxy-2.8.3.tar.gz
#解压缩软件包

在这里插入图片描述

cd haproxy-2.8.3
#进入源码包内
ls

在这里插入图片描述

make PREFIX=/usr/local/haproxy ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1
#指定安装目录并开启一些功能make install PREFIX=/usr/local/haproxy
#安装到该目录

在这里插入图片描述

useradd -M -s /sbin/nologin haproxy
#创建用户
chown haproxy.haproxy /usr/local/haproxy -R
#指定属主和属组
mkdir /etc/haproxy
#创建配置文件目录cd examples/

在这里插入图片描述

cd /etc/haproxy
vim haproxy.cfg
#创建配置文件#以下是一些全局配置和默认认配置,可以直接拷global		#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关#将info(及以上)的日志发送到rsyslog的local0接口,将warning(及以上)的日志发送到rsyslog的local1接口log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning	maxconn 30000			            #最大连接数,HAProxy 要求系统的 ulimit -n 参数大于 maxconn*2+18#chroot /var/lib/haproxy            #修改haproxy工作目录至指定目录,一般需将此行注释掉pidfile     /var/run/haproxy.pid    #指定保存HAProxy进程号的文件user haproxy            #以指定的用户名身份运行haproxy进程group haproxy           #以指定的组名运行haproxy,以免因权限问题带来风险daemon					#让haproxy以守护进程的方式工作于后台#nbproc 1				#指定启动的haproxy进程个数,只能用于守护进程模式的haproxy,默认只启动一个进程。haproxy是单进程、事件驱动模型的软件,单进程下工作效率已经非常好,不建议开启多进程spread-checks 2         #在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。defaults   	#配置默认参数,这些参数可以被用到listen,frontend,backend组件     log     global			#所有前端都默认使用global中的日志配置mode    http			#模式为http(7层代理http,4层代理tcp)option  http-keep-alive #使用keepAlive连接,后端为静态建议使用http-keep-alive,后端为动态应用程序建议使用http-server-closeoption  forwardfor      #记录客户端IP在X-Forwarded-For头域中,haproxy将在发往后端的请求中加上"X-Forwarded-For"首部字段option  httplog			#开启httplog,在日志中记录http请求、session信息等。http模式时开启httplog,tcp模式时开启tcplogoption  dontlognull		#不在日志中记录空连接option  redispatch		#当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时,将其转发到别的后端上option  abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接maxconn 20000			#最大连接数,“defaults”中的值不能超过“global”段中的定义retries 3               #定义连接后端服务器的失败重连次数,连接失败次数超过此值后会将对应后端服务器标记为不可用#contimeout 5000        #设置连接超时时间,默认单位是毫秒#clitimeout 50000       #设置客户端超时时间,默认单位是毫秒#srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒timeout http-request 2s 	#默认http请求超时时间,此为等待客户端发送完整请求的最大时长,用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发timeout queue 3s   	    #默认客户端请求在队列中的最大时长timeout connect 1s		#默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容timeout client 10s		#默认和客户端保持空闲连接的超时时长,在高并发下可稍微短一点,可设置为10秒以尽快释放连接,新版本中替代clitimeouttimeout server 2s		#默认和服务端保持空闲连接的超时时长,局域网内建立连接很快,所以尽量设置短一些,特别是高并发时,新版本中替代srvtimeouttimeout http-keep-alive 10s		#默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout clienttimeout check 2s		#和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间,只是读取到检查结果的时长)
#可以根据直接需求自行修改#直接拷贝版
globallog 127.0.0.1 local0 infolog 127.0.0.1 local1 warningmaxconn 30000pidfile     /var/run/haproxy.piduser haproxygroup haproxydaemonspread-checks 2defaultslog     globalmode    httpoption  http-keep-aliveoption  forwardforoption  httplogoption  dontlognulloption  redispatchoption  abortonclosemaxconn 20000retries 3timeout http-request 2stimeout queue 3stimeout connect 1stimeout client 10stimeout server 2stimeout http-keep-alive 10stimeout check 2s
#以下为自定义配置frontend http-in   bind *:80     #监听任意地址的80号端口acl url_jsp path_end -i .jsp use_backend tomcat_server if url_jsp #定义以.jsp结尾的访问路径,转发给名字叫做tomcat_server的服务器default_backend nginx_serverbackend nginx_serverbalance roundrobin      #定义轮询算法option httpchk GET /index.html  #定义路径server nginx1 192.168.67.103:80 check inter 2000 fall 3 rise 2  #定义服务器地址,定义健康检查,2秒做一次检查,连续失败3次直接隔离,连续成功2次将这带入到集群中   server nginx2 192.168.67.104:80 check inter 2000 fall 3 rise 2
backend tomcat_serverbalance roundrobinoption http-server-close #关闭长连接cookie HA_STICKY_dy insert indirect nocache #在后端服务器启用基于cookie的会话保持策略server tomcat1 192.168.67.105:8081 cookie tomcat1 check inter 2000 fall 3 rise 2server tomcat2 192.168.67.105:8082 cookie tomcat2 check inter 2000 fall 3 rise 2listen stats    #定义监控页面bind *:1080                   #绑定端口1080stats enable                  #启用统计报告监控stats refresh 30s             #每30秒更新监控数据stats uri /stats              #访问监控页面的uristats realm HAProxy\ Stats    #监控页面的认证提示stats auth admin:admin        #监控页面的用户名和密码#直接拷贝版
frontend http-inbind *:80acl url_jsp path_end -i .jspuse_backend tomcat_server if url_jspdefault_backend nginx_serverbackend nginx_serverbalance roundrobinoption httpchk GET /index.htmlserver nginx1 192.168.67.103:80 check inter 2000 fall 3 rise 2server nginx2 192.168.67.104:80 check inter 2000 fall 3 rise 2
backend tomcat_serverbalance roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocacheserver tomcat1 192.168.67.105:8081 cookie tomcat1 check inter 2000 fall 3 rise 2server tomcat2 192.168.67.105:8082 cookie tomcat2 check inter 2000 fall 3 rise 2
listen statsbind *:1080stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:admin
cd /opt/haproxy-2.8.3
cp examples/haproxy.init /etc/init.d/haproxy
#拷贝管理脚本文件
vim /etc/init.d/haproxy

在这里插入图片描述

ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
#添加软连接
chmod +x /etc/init.d/haproxy
#添加执行权限
chkconfig --add /etc/init.d/haproxy
#添加到系统服务
chkconfig --list haproxy
#查看当前状态

在这里插入图片描述

service haproxy start
#开启服务
或
systemctl start haproxy
#开启服务ss -natp |grep haproxy
#查看进程

在这里插入图片描述
在这里插入图片描述

yum install keepalived -y
#安装keepalived服务

在这里插入图片描述

vim /etc/keepalived/check_keepalived.sh
#编写一个简单的keepalived的安全检查脚本#!/bin/bashif ! killall -0 haproxythen
systemctl stop keepalivedfichmod +x check_haproxy.sh
#添加可执行权限

在这里插入图片描述

vim keepalived.conf
#编辑配置文件

在这里插入图片描述
剩下没用的全部删除

#配置好配置文件后,将配置文件传给备服务器
#默认备服务器已经安装好keepalivedscp check_keepalived.sh keepalived.conf 192.168.67.102:`pwd`
#将当前脚本和配置文件传给192.168.67.102相应目录

在这里插入图片描述

#前往备服务器
vim /etc/keepalived/keepalived.conf
#编辑配置文件

在这里插入图片描述

#返回主服务器
systemctl start keepalived
#开启服务ip a
#查看vip是否配置完成

在这里插入图片描述

4.6 配置备服务器

#按照主服务器配置haproxy服务
service haproxy start
#开启服务ss -natp |grep haproxy
#查看进程

在这里插入图片描述

4.7 测试

#前往主服务器
ip a

在这里插入图片描述

#前往备服务器
ip a

在这里插入图片描述

#现在关掉主服务器的keepalived服务
systemctl stop keepalivedip a

在这里插入图片描述

#前往备服务器查看ip a

在这里插入图片描述

#前往客户机
#测试动静分离、负载均衡
curl 192.168.67.200/test/index.jsp #x2
curl 192.168.67.200/index.html #x2

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Streamlit的应用如何通过streamlit-authenticator组件实现用户验证与隔离

Streamlit框架中默认是没有提供用户验证组件的&#xff0c;大家在基于streamlit快速实现web应用服务过程中&#xff0c;不可避免的需要配置该应用的访问范围和权限&#xff0c;即用户群体&#xff0c;一般的做法有两种&#xff0c;一种是通过用户密码验证机制&#xff0c;要求只…

LeetCode每日一题:1222. 可以攻击国王的皇后(2023.9.14 C++)

目录 1222. 可以攻击国王的皇后 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 原理思路&#xff1a; 1222. 可以攻击国王的皇后 题目描述&#xff1a; 在一个 8x8 的棋盘上&#xff0c;放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 …

小美的数组操作2---牛客周赛 Round 11

注意给a[ 0 ]赋一个最小值 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N1e55; int t,n,m,a[N],cnt[N]; int main(){scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i1;i<n;i){scanf(&q…

go语言基础--面向对象杂谈

面向过程 所谓的面向过程就是&#xff1a;强调的是步骤、过程、每一步都是自己亲自去实现的。 面向对象 所谓的面向对象其实就是找一个专门做这个事的人来做&#xff0c;不用关心具体怎么实现的。 所以说&#xff0c;面向过程强调的是过程&#xff0c;步骤。而面向对象强调的…

【计算思维题】少儿编程 蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套

蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套 第十四届蓝桥杯省赛真题 1、要把下面4张图片重新排列成蜗牛的画像,该如何排列这些图片 A、 B、 C、 D、 答案:A 考点分析:主要考查小朋友们的观察能力空

向量的概念、向量组的概念

目录 向量的概念、向量组的概念 向量的基本运算 线性表出、线性相关、线性无关 向量的概念、向量组的概念 向量&#xff08;Vector&#xff09;是一个有次序的数所组成的数组&#xff0c;通常用来表示一个物理量或者一个对象在空间中的移动。向量可以表示位置、速度、力等物…

SpringMVC之文件上传下载以及jrebel的使用

目录 一.文件上传 1.1.导入依赖 1.2.配置文件上传解析器 ​​​​​​​ 1.3 配置服务器存放文件地址 1.3.1.点击编辑Configurations 1.3.2.将项目部署至tomcat服务器上 1.3.3.配置相对路径 1.4.导入PropertiesUtil工具类 1.5.编写resource.properties 1.6.添加sql 1.7.编写…

【C语言】扫雷小游戏(保姆教程)

目录 一、扫雷游戏介绍 二、代码分装 三、代码实现步骤 1. 制作菜单menu函数以及游戏运行逻辑流程 2. 数组棋盘分析 3. 创建棋盘数组 4. 初始化棋盘InitBoard函数 5. 显示棋盘DisplayBoard函数 6. 布置雷SetMine函数 7. 统计雷个数GetMineCount函数 8. 排查雷FindMine函…

算法分析与设计编程题 动态规划

矩阵连乘 题目描述 解题代码 void printOptimalParens(vector<vector<int>>& partition, int i, int j) {if (i j) cout << "A" << i; // 单个矩阵&#xff0c;无需划分else {cout << "(";printOptimalParens(partit…

网络安全中的欺骗攻击与防御技术

在Internet上计算机之间相互进行的交流建立在两个前提之下&#xff1a;认证、信任。 认证是网络上的计算机用于相互间进行识别的一种鉴别过程&#xff0c;经过认证的过程&#xff0c;获准相互交流的计算机之间就会建立起相互信任的关系。信任和认证具有逆反关系&#xff0c;即…

爬虫逆向实战(33)-某联社数据(webpack)

一、数据接口分析 主页地址&#xff1a;某联社 1、抓包 通过抓包可以发现数据接口是/nodeapi/telegraphList 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个sign加密参数 请求头是否加密&#xff1f; 无 响应是否加密&#x…

性能监控-grafana+prometheus+node_exporter

Prometheus是一个开源的系统监控和报警工具。它由SoundCloud开发并于2012年发布&#xff0c;后来成为了一个独立的开源项目&#xff0c;并得到了广泛的应用和支持。 Prometheus的主要功能包括采集和存储各种系统和应用程序的监控数据&#xff0c;并提供强大的查询语言PromQL来…