Nginx全家桶配置详解
- 源码包安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http(s)://[Server1]:8080并且回显Web页面。
- 保留Server1,但是不允许直接访问Server 1,再部署1套NGINX B,利用其实现反向代理功能,要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。(截图并详细说明NGINX上配置/参数)
- (加强提升题目)假设再加1套Web Server 2,其8080端口提供与Server 1相同服务,如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2?
- 在上文题目2基础之上,增加节点NGINX B,如何配置实现高可用?demo演示当NGINX A故障时,流量自动切换到NGINX B(客户端访问几乎无感知)。详细说明VRRP协议在本题所述场景下的应用。
- (加强提升题目)在上文题目3基础之上,配置和验证NGINX支持哪些负载均衡算法及其效果?并结合NGINX配置参数详细说明不同负载均衡算法工作原理。
- (加强提升题目)在上文题目3基础之上,配置和验证主动和被动两种健康检查方式及其效果?并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理。
文章目录
- 要求1 nginx的部署
- 要求2 nginx反向代理
- 要求3 nginx负载均衡
- 要求4 nginx高可用
- 要求5 负载均衡算法
- 要求6 健康检查
实验环境:
Ubuntu 20.04 64bit
实验前关闭防火墙和selinux
server1 | 8.140.24.100 |
---|---|
server2 | 8.140.240.19 |
要求1 nginx的部署
要求1. 源码包安装NGINX A,搭建Web Server,任意HTML页面,其18080端口提供Web访问服务,截图成功访问http(s)://[Server1]:18080并且回显Web页面。
注:因为服务器的8080端口没有开放到外网访问,只开放了18080-18086的端口到外网;所以我将题目中的8080端口改成了18080端口来做实验(端口的改变不会影响实验的效果)
获取nginx源码包
wget https://nginx.org/download/nginx-1.22.1.tar.gz
安装源码编译环境
yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel -y
将此目录设置为nginx源码存放目录
/usr/local/src
将源码包移动到该目录下
[root@centos ~]# mv nginx-1.22.1.tar.gz /usr/local/src/
将源码包文件解压缩
[root@centos ~]# cd /usr/local/src/
[root@centos src]# tar xf nginx-1.22.1.tar.gz
编译参数详解
[root@centos nginx-1.22.1]# ./configure --help--prefix= 指向安装目录
--sbin-path 指向(执行)程序文件(nginx)
--conf-path= 指向配置文件(nginx.conf)
--pid-path= 指向 pid 文件( nginx.pid )--lock-path= 指向 lock 文件( nginx.lock)(安装文件锁定,防止安装文件被别人利用
或自己误操作。)
--user= 指定程序运行时的非特权用户
--group= 指定程序运行时的非特权用户组
--builddir= 指向编译目录
--with-rtsig_module 启用rtsig 模块支持(实时信号)--with-select_module 启用 select 模块支持(一种轮询模式,不推荐在高载环境下使用)
禁用:--without-select _module
--with-poll _module 启用 poll 模块支持(功能与select相同,与select特性相同,为
种轮询模式,不推荐在高载环境下使用)
--with-file-aio 启用file aio 支持(一种 APL文件传输格式
--with-ipv6 启用ipv6 支持
--with-file-aio 启用file aio 支持(一种 APL文件传输格式--with-ipv6 启用ipv6支持
--with-http_ssl_module 启用 ngx http_ssl module 支持(使支持https 请求,需已安装
openssl)
--with-http realip_module 启用 ngx http_realip_module 支持 这个模块允许从请求标
头更改客户端的IP 地址值,默认为关 )
--with-http addition module 启用 ngx http addition module 支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求 )
--with-http xslt module 启用 ngx http_xslt _module 支持(过滤转换 XML请求)
--with-http image filter module 启用 ngx http image filter module 支持 ( 传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd 库要用到) --with-http_geoip_module 启用 ngx_http_geoip_module 支持(该模块创建基于与 MaxMind GeoIP 二进制文件相配的客户端 IP 地址的 ngx_http_geoip_module 变量) --with-http_sub_module 启用 ngx_http_sub_module 支持(允许用一些其他文本替换 nginx 响应中的一些文本)
--with-http_dav_module 启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL: 创建集合,COPY 和 MOVE 方法)默认情况下为关闭,需编译开启
--with-http_flv_module 启用 ngx_http_flv_module 支持(提供寻求内存使用基于时间的 偏移量文件)
--with-http_gzip_static_module 启用 ngx_http_gzip_static_module 支持(在线实时压 缩输出数据流)
--with-http_random_index_module 启用 ngx_http_random_index_module 支持(从 目录中随机挑选一个目录索引)
--with-http_secure_link_module 启用 ngx_http_secure_link_module 支持(计算和检 查要求所需的安全链接网址)
--with-http_degradation_module 启用 ngx_http_degradation_module 支持(允许在 内存不足的情况下返回 204 或 444 码)
--with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx 自上次启动以来的工作状态)
--without-http_auth_basic_module 禁用 ngx_http_auth_basic_module(该模块是可以 使用用户名和密码基于 http 基本认证方法来保护你的站点或其部分内容) --without-http_autoindex_module 禁用 disable ngx_http_autoindex_module 支持 (该模块用于自动生成目录列表,只在 ngx_http_index_module 模块未找到索引文件时发 出请求。)
--without-http_geo_module 禁用 ngx_http_geo_module 支持(创建一些变量,其值依 赖于客户端的 IP 地址)
--without-http_map_module 禁用 ngx_http_map_module 支持(使用任意的键/值对设 置配置变量)
--without-http_split_clients_module 禁用 ngx_http_split_clients_module 支持(该模 块用来基于某些条件划分用户。条件如:ip 地址、报头、cookies 等等) --without-http_referer_module 禁用 disable ngx_http_referer_module 支持(该模块 用来过滤请求,拒绝报头中 Referer 值不正确的请求)
--http-proxy-temp-path= 设定 http 代理临时文件路径
--http-fastcgi-temp-path= 设定 http fastcgi 临时文件路径 --http-uwsgi-temp-path= 设定 http uwsgi 临时文件路径
--http-scgi-temp-path= 设定 http scgi 临时文件路径
-without-http 禁用 http server 功能
--without-http-cache 禁用 http cache 功能
--with-mail 启用 POP3/IMAP4/SMTP 代理模块支持
--with-mail_ssl_module 启用 ngx_mail_ssl_module 支持
通用配置选项
--prefix=<path> 指定 Nginx 的安装路径,所有其他的路径都要依赖于该选项
--sbin-path=<path> 指定 Nginx 二进制文件的路径。如果没有指定,那么这 个路径将依赖于--prefix 选项
--conf-path=<path> 指定 Nginx 的配置文件的路径,如果在命令行没有指定 配置文件,那么将会通过这里指定路径。
--error-log-path=<path> 文件,除非有其它的配置。
--pid-path=<path> /var/run 下
--lock-path=<path> 共享存储器互斥锁文件的路径
--user=<user> worker 进程运行的用户
--group=<group> worker 进程运行的组
--with-file-aio. 为 FreeBSD4.3 +和 linux 2.6.22 +系统启用异步 I/O
--with-debug 这个选项用于启用调试日志,在生产环境的系统中不推荐使用
检查安装了nginx后是否有这个用户
[root@centos nginx-1.22.1]# id nginx
uid=997(nginx) gid=995(nginx) 组=995(nginx)
源码编译安装nginx
[root@centos nginx-1.22.1]# ./configure \
> --user=nginx \
> --group=nginx \
> --prefix=/usr/local/nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module
[root@centos nginx-1.22.1]# make && make install
给nginx写启动脚本
[root@centos sbin]# pwd
/usr/local/nginx/sbin
[root@centos sbin]# vim /usr/lib/systemd/system/nginx.service[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop[Install]
WantedBy=multi-user.target
启动报错及原因排查
在这个报错信息里面发现80端口被占用,所以我修改了nginx默认的配置文件,将监听端口设置为81
location匹配优先级
1.精确匹配 (=)
2.字符串匹配,不做正则匹配检查(^~)
3.正则匹配
4.字符串匹配,如果有正则优先正则
5.所有都匹配不到,默认匹配 /
加载并启动配置文件
[root@centos sbin]# systemctl daemon-reload #加载配置文件
[root@centos sbin]# systemctl start nginx #启动nginx
查看服务器IP:
根据题目一的要求,将配置文件改为监听18080端口,访问页面的路径改为/var/www/html
server {listen 18080; #监听18080端口server_name elite.chaitin.com; #指定服务器的域名location / { #/表示匹配任意请求路径root /var/www/html; #指定响应目录index index.html index.htm; #访问该目录下的 index.html 或 index.htm 文件服务器会首先查找 index.html 文件,如果找不到则查找 index.htm 文件。}
写一个访问页面并重启nginx服务
root@iZ2zei3ltzorcuiiynrseqZ:~# echo 'Welcome to Chaitin!' > /var/www/html/index.html
root@iZ2zei3ltzorcuiiynrseqZ:~# systemctl daemon-reload
root@iZ2zei3ltzorcuiiynrseqZ:~# systemctl restart nginx
访问成功!
要求2 nginx反向代理
要求2. 保留Server1,但是不允许直接访问Server 1,再部署1套NGINX B,利用其实现反向代理功能,要求有且仅有访问http://elite.chaitin.com 可以访问到Web Server1的8080服务。(截图并详细说明NGINX上配置/参数)
步骤一:
另开一台server2 服务器 8.140.240.19,直接安装nginx
root@iZ2zei3ltzorcuiiynrsemZ~# apt-get install nginx
将原配置文件备份,避免错误修改配置后不能找回原有文件
root@iZ2zei3ltzorcuiiynrsemZ:cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
因为我的服务器做了限制,两台服务器之间不能互通,所以我们使用两台服务器的内网地址
server2
server1
server2测试与server1的内网连通信
步骤二:
server2的nginx配置文件
server {listen 80; #监听端口server_name _; #所有不匹配elite.chaitin.com的请求全都返回404location / {return 404;}}
#访问elite.chaitin.com的请求都会转发到http://172.28.253.102:18080 并将结果返回给客户端server{listen 80;server_name elite.chaitin.com;location / {proxy_pass http://172.28.253.102:18080;}}
写dns解析:
root@iZ2zei3ltzorcuiiynrsemZ:~# vim /etc/hosts
172.28.253.107 elite.chaitin.com
测试访问:
server2上访问
访问server2的IP只能看到server2的nginx默认页面,看不到server1的页面
要求3 nginx负载均衡
要求3.假设再加1套Web Server 2,其8080端口提供与Server 1相同服务,如何配置NGINX A实现访问http://elite.chaitin.com 的请求可以被负载分发到Server1或者Server2?
这里我用自己的本地虚拟机做实验
server1 | 192.168.15.133 |
---|---|
server2 | 192.168.15.138 |
负载均衡调度器 | 192.168.15.140 |
所有服务器都关闭防火墙和selinux
步骤一:server1和server2基础配置
每台服务器上都安装nginx服务
server1和server2都做:
server1和server2的配置相同
server {listen 8080;server_name elite.chaitin.com;root /chaitin/www; #自己定义的访问页面# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
加载启动配置文件,创建web页面,拷贝给server2
域名解析
测试访问页面
步骤二:负载均衡调度器配置:
upstream server_pools { #接收来自server中的请求server 192.168.15.138:8080 weight=1; #两个服务器的权重都一样,会把所有请求相对均匀的分配到两台服务器上server 192.168.15.133:8080 weight=1;}server{listen 8080;server_name _; #所有不是请求elite.chaitin.com域名的8080服务都会被禁止并返回403的状态码location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools; #访问8080端口且以elite.chaitin.com为域名的请求,会把请求转发到server_pools的负载均衡池}}
}
域名解析
启动nginx并访问测试
请求能够被均匀的分配到两台服务器上
要求4 nginx高可用
要求4. 在上文题目2基础之上,增加节点NGINX B,如何配置实现高可用?demo演示当NGINX A故障时,流量自动切换到NGINX B(客户端访问几乎无感知)。详细说明VRRP协议在本题所述场景下的应用。
server1和server2安装keepalived
[root@server1 ~]# yum install keepalived
server1和server2写脚本文件
[root@server1 yum.repos.d]# vi /usr/local/src/nginx_check.sh#!/bin/bash
# 检查是否开启nginx
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];thensystemctl stop keepalived
fi
server1
[root@server1 ~]# vim /etc/keepalived/keepalived.confacassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.15.143 #当前keepalived所在的主机ipsmtp_connect_timeout 30router_id 192.168.15.143 #当前keepalived所在的主机ipvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script chk_http_port{script "/usr/local/src/nginx_check.sh"interval 2 #每隔2s检测一次脚本weight -20 #权重减20
}vrrp_instance VI_1 {state MASTER #将当前主机设置为master节点interface eth0 #主机使用的网卡
virtual_router_id 51priority 100 #优先级,主节点的优先级更大advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.15.66 #虚拟ip,必须和master、backup处于同一网段}
}
server2
[root@server2 ~]# vim /etc/keepalived/keepalived.conf vrrp_gna_interval 0
}
vrrp_script chk_http_port{script "/usr/local/src/nginx_check.sh"interval 2 #每隔2s检测一次脚本weight -20 #权重减20
}vrrp_instance VI_1 {state BACKUP#将当前主机设置为master节点interface eth0 #主机使用的网卡virtual_router_id 51priority 90 #优先级,主节点的优先级更大advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.15.66 #虚拟ip,必须和master、backup处于同一网段}
}
都启动keepalived服务
[root@server2 ~]# vim /etc/keepalived/keepalived.conf
测试:
将server1的服务关闭
systemctl stop nginx
要求5 负载均衡算法
要求5. (加强提升题目)在上文题目3基础之上,配置和验证NGINX支持哪些负载均衡算法及其效果?并结合NGINX配置参数详细说明不同负载均衡算法工作原理。
轮询算法
轮询(Round Robin):这是默认的负载均衡算法。Nginx将每个新的客户端请求按照服务器列表的顺序分发,依次轮流选择下一个服务器。这是最简单的负载均衡算法,适用于后端服务器性能相近的情况。
加权轮询(Weighted Round Robin):在这种算法中,每个后端服务器都分配了一个权重值,高权重的服务器会收到更多的请求。这对于在后端服务器之间分配不同的负载容量非常有用,以确保性能更好的服务器获得更多的请求。
upstream server_pools {server 192.168.15.138:8080 weight=1; #两台服务器响应请求的方式为1:2server 192.168.15.133:8080 weight=2;}server{listen 8080;server_name _;location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools;}}
}
重启服务并测试
[root@lvs ~]# vim /etc/nginx/nginx.conf
[root@lvs ~]# systemctl daemon-reload
[root@lvs ~]# systemctl restart nginx
源地址哈希法
IP哈希(IP Hash):Nginx使用客户端的IP地址来计算哈希值,并将请求分发到具有相同哈希值的后端服务器。这个算法确保相同IP的客户端始终访问相同的后端服务器,适用于需要会话保持的情况,如Web应用程序的会话管理。
在负载均衡服务器上配置
upstream server_pools {hash $remote_addr consistent; #使用客户端的IP地址进行哈希计算,#并且使用consistent关键字确保负载均衡在后端服务器发生变化时尽量减少数据迁移。server 192.168.15.138:8080;server 192.168.15.133:8080;}server{listen 8080;server_name _;location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools;}}
}
重启nginx服务
[root@lvs ~]# systemctl daemon-reload
[root@lvs ~]# systemctl restart nginx
另开一台客户端主机
写域名解析文件
[root@localhost ~]# vi /etc/hosts
192.168.15.140 elite.chaitin.com #访问的是负载均衡服务器
测试
可以发现客户端请求的一直都是同一个服务器
最小连接数算法
最少连接(Least Connections):Nginx跟踪每个后端服务器的活动连接数,然后将请求发送到具有最少活动连接数的服务器。这有助于分配负载并确保请求发送到连接较少的服务器,从而实现负载均衡。
upstream server_pools {least_conn; #使用最小连接数算法server 192.168.15.138:8080;server 192.168.15.133:8080;}server{listen 8080;server_name _;location / {return 403;}}server{listen 8080;server_name elite.chaitin.com;location / {proxy_pass http://server_pools;}}
}
重启nginx服务
因为测试需要用到多台客户端,但我的服务器没有那么多,所以就不测试啦!
要求6 健康检查
要求6. (加强提升题目)在上文题目3基础之上,配置和验证主动和被动两种健康检查方式及其效果?并结合NGINX配置参数详细说明不同健康检查方式区别和工作原理。
主动健康检查
原理:
主动健康检查是通过Keepalived自身执行的周期性检查来确定服务器的状态。Keepalived会定期发送请求(通常是ICMP ping或TCP连接请求)到服务器,并根据服务器的响应来确定其是否处于健康状态。
配置:
主动健康检查需要在Keepalived配置文件中定义一个或多个健康检查脚本,这些脚本将定期运行以检查服务器的健康状态。在配置文件中使用track_script部分来定义这些检查脚本
track_script {chk_script {script "/etc/keepalived/check_script.sh" # 健康检查脚本的路径interval 2 # 检查间隔时间,单位秒weight 2 # 权重}
}
脚本文件
[root@server1 ~]# vim /etc/check_script.sh#!/bin/bash# 定义要检查的目标URL
TARGET_URL="http://localhost:80"# 发送HTTP请求并获取响应
HTTP_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $TARGET_URL)# 检查HTTP响应状态码是否为200(正常)
if [ "$HTTP_RESPONSE" = "200" ]; then# 返回0表示健康exit 0
else# 返回1表示不健康exit 1
fi
被动健康检查:
原理:
被动健康检查是通过监听服务器上的服务来确定服务器的状态。Keepalived将侦听服务器上的服务端口,如果无法连接到该端口,将认为服务器处于不健康状态。
配置:
被动健康检查不需要特别的配置,只需确保Keepalived配置文件中的虚拟IP与服务器上的服务端口一致即可。
相关文章:

Nginx全家桶配置详解
源码包安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http(s)://[Server1]:8080并且回显Web页面。保留Server1,但是不允许直接访问Server 1,再部署1套NGINX …...

CMake生成Visual Studio工程
CMake – 生成Visual Studio工程 C/C项目经常使用CMake构建工具。CMake 项目文件(例如 CMakeLists.txt)可以直接由 Visual Studio 使用。本文要说明的是如何将CMake项目转换到Visual Studio解决方案(.sln)或项目(.vcxproj) 开发环境 为了生成Visual S…...

数学建模--K-means聚类的Python实现
目录 1.算法流程简介 2.1.K-mean算法核心代码 2.2.K-mean算法效果展示 3.1.肘部法算法核心代码 3.2.肘部法算法效果展示 1.算法流程简介 #k-means聚类方法 """ k-means聚类算法流程: 1.K-mean均值聚类的方法就是先随机选择k个对象作为初始聚类中心. 2.这…...

防坠安全带上亚马逊美国站要求的合规标准是什么?
防坠安全带 防坠安全带是一种防护装备,适合工人在高空作业时或在可能发生跌落的无防护边缘行走时穿着。防坠安全带设计用于包裹身体躯干,并将坠落力至少分布到大腿上部、骨盆、胸部和肩部。防坠安全带是固定物体与非固定物体之间的连接物,通…...

PDF转Word的方法分享与注意事项。
PDF和Word是两种常用的文档格式,它们各有优点,适用于不同的场景。然而,有时候我们需要将PDF转换为Word,以便更好地进行编辑和排版。本文将介绍几种常用的PDF转Word的方法,并分享一些注意事项。 一、PDF转Word的方法 使…...

gitlab配置webhook,commit message的时候校验提交的信息
在 GitLab 中配置 Webhook 来调用 Java 接口以校验 commit 信息,是很多公司的一些要求,因为提交信息的规范化是必要的 在 GitLab 项目中进入设置页面。 在左侧导航栏中选择 “Webhooks”(Web钩子)。 在 Webhooks 页面中点击 “…...

借助CIFAR10模型结构理解卷积神经网络及Sequential的使用
CIFAR10模型搭建 CIFAR10模型结构 0. input : 332x32,3通道32x32的图片 --> 特征图(Feature maps) : 3232x32即经过32个35x5的卷积层,输出尺寸没有变化(有x个特征图即有x个卷积核。卷积核的通道数与输入的通道数相等,即35x5&am…...

Java # Java基础八股
1、JVM、JRE、JDK之间的关系 个人理解:JVM可以帮助屏蔽底层的操作系统,使程序一次编译到处都可以运行,JVM可以运行class文件。JRE是java文件运行的环境,但不能新建程序,JRE包含JVM。JDK功能最齐全,包含了编…...

【Spring Boot】SpringBoot 2.6.6 集成 SpringDoc 1.6.9 生成swagger接口文档
文章目录 前言一、SpringDoc是什么?二、使用步骤1.引入库2.配置类3.访问测试 总结其他配置立个Flag 前言 之前常用的SpringFox在2020年停止更新了,新项目集成SpringFox出来一堆问题,所以打算使用更活跃的SpringDoc,这里简单介绍一…...

【算法】快速排序 详解
快速排序 详解 快速排序1. 挖坑法2. 左右指针法 (Hoare 法)3. 前后指针法4. 快排非递归 代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性&…...

架构师spring boot 面试题
spring boot 微服务有哪些特点? Spring Boot 微服务具有以下特点: 独立性:每个微服务都是独立的部署单元,有自己的代码库和数据库。这使得微服务可以独立开发、测试、部署和扩展。 分布式:微服务架构将一个大型应用程…...

电商系统架构设计系列(十一):在电商的交易类系统中,如何正确地使用 Redis 这样的缓存系统呢?需要考虑哪些问题?
上篇文章中,我给你留了一个思考题:在电商的交易类系统中,如何正确地使用 Redis 这样的缓存系统呢?需要考虑哪些问题? 这篇文章,我们来聊聊。 引言 我们知道,大部分面向公众用户的互联网系统&a…...

MySQL数据库和表的操作
数据库基础 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 1、文件的安全性问题 2、文件不利于数据查询和管理 3、文件不利于存储海量数据 4、文件在程序中控制不方便 数据库存储介质: 磁盘 内存 为了解决上…...

DAY-01--分布式微服务基础概念
一、项目简介 了解整体项目包含后端、前端、周边维护。整个项目的框架知识。 二、分布式基础概念 1、微服务 将应用程序 基于业务 拆分为 多个小服务,各小服务单独部署运行,采用http通信。 2、集群&分布式&节点 集群是个物理形态,…...

记:一次关于paddlenlp、python、版本之间的兼容性问题
兼容版本 Python 3.10.8 absl-py1.4.0 accelerate0.19.0 addict2.4.0 aiofiles23.1.0 aiohttp3.8.3 aiosignal1.3.1 alembic1.10.4 aliyun-python-sdk-core2.13.36 aliyun-python-sdk-kms2.16.0 altair4.2.2 altgraph0.17.3 aniso86019.0.1 antlr4-python3-runtime4.9.3 anyi…...

MyBatis配置及单表操作
文章目录 一. MyBatis概述二. MyBatis项目的创建1. 准备一个数据表2. 创建项目 三. MyBatis的使用1. 基本使用2. SpringBoot单元测试 四. 使用MyBatis实现单表操作1. 查询2. 修改3. 删除4. 新增 五. 基于注解完成SQL 一. MyBatis概述 MyBatis 是一款优秀的持久层框架ÿ…...

python基础教程:深浅copy的详细用法
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 1.先看赋值运算 l1 [1,2,3,[barry,alex]] l2 l1l1[0] 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2)…...

【算法篇】动态规划(二)
文章目录 分割回文字符串编辑距离不同的子序列动态规划解题思路 分割回文字符串 class Solution { public:bool isPal(string& s,int begin,int end){while(begin<end){if(s[begin]!s[end]){return false;}begin;end--;}return true;}int minCut(string s) {int lens.si…...

数据库 SQL高级查询语句:聚合查询,多表查询,连接查询
目录 创建学生表聚合查询聚合函数直接查询设置别名查询设置条件查询 常用的聚合函数 分组查询单个字段Group by报错分组查询多字段分组查询 多表查询直接查询重命名查询Students表新建一列CourseID 连接(JOIN)查询INNER JOINRIGHT JOIN, LEFT JOINFULL J…...

pytorch-构建卷积神经网络
构建卷积神经网络 卷积网络中的输入和层与传统神经网络有些区别,需重新设计,训练模块基本一致 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torchvision import datasets,transforms impor…...

点云从入门到精通技术详解100篇-点云滤波算法及单木信息提取(续)
目录 3.3 点云滤波算法原理概述 3.3.1 坡度滤波算法 3.3.2 基于不规则三角网滤波 3.3.3 数学形态学滤波...

Gartner发布中国科技报告:数据编织和大模型技术崭露头角
近日,全球知名科技研究和咨询机构Gartner发布了关于中国数据分析与人工智能技术的最新报告。报告指出,中国正迎来数据分析与人工智能领域的蓬勃发展,预计到2026年,将有超过30%的白领工作岗位重新定义,生成式人工智能技…...
java八股文面试[数据库]——explain
使用 EXPLAIN 关键字可以模拟优化器来执行SQL查询语句,从而知道MySQL是如何处理我们的SQL语句的。分析出查询语句或是表结构的性能瓶颈。 MySQL查询过程 通过explain我们可以获得以下信息: 表的读取顺序 数据读取操作的操作类型 哪些索引可以被使用 …...

Kafka3.0.0版本——增加副本因子
目录 一、服务器信息二、启动zookeeper和kafka集群2.1、先启动zookeeper集群2.2、再启动kafka集群 三、增加副本因子3.1、增加副本因子的概述3.2、增加副本因子的示例3.2.1、创建topic(主题)3.2.2、手动增加副本存储 一、服务器信息 四台服务器 原始服务器名称原始服务器ip节点…...

升级iOS 17出现白苹果、不断重启等系统问题怎么办?
iOS 17发布后了,很多果粉都迫不及待的将iphone/ipad升级到最新iOS17系统,体验新系统功能。 但部分果粉因硬件、软件的各种情况,导致升级系统后出现故障,比如白苹果、不断重启、卡在系统升级界面等等问题。 如果遇到了这些系统问题…...

6. `Java` 并发基础之`ReentrantReadLock`
前言:随着多线程程序的普及,线程同步的问题变得越来越常见。Java中提供了多种同步机制来确保线程安全,其中之一就是ReentrantLock。ReentrantLock是Java中比较常用的一种同步机制,它提供了一系列比synchronized更加灵活和可控的操…...

float浮动布局大战position定位布局
华子目录 布局方式普通文档流布局浮动布局(浮动主要针对与black,inline元素)float属性浮动用途浮动元素父级高度塌陷 position属性定位篇相对定位(relative为属性值,配合left属性,和top属性使用)…...

算法 数据结构 递归插入排序 java插入排序 递归求解插入排序算法 如何用递归写插入排序 插入排序动图 插入排序优化 数据结构(十)
1. 插入排序(insertion-sort): 是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 算法稳定性: 对于两个相同的数,经过…...

OpenCV(二十二):均值滤波、方框滤波和高斯滤波
目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波 OpenCV中的均值滤波(Mean Filter)是一种简单的滤波技术,用于平滑图像并减少噪声。它的原理非常简单:对于每个像素,将其与其周围邻域内像素的平均值作为新的像素值…...

二叉树的递归遍历和非递归遍历
目录 一.二叉树的递归遍历 1.先序遍历二叉树 2.中序遍历二叉树 3.后序遍历二叉树 二.非递归遍历(栈) 1.先序遍历 2.中序遍历 3.后序遍历 一.二叉树的递归遍历 定义二叉树 #其中TElemType可以是int或者是char,根据要求自定 typedef struct BiNode{TElemType data;stru…...