Linux云计算 |【第三阶段】PROJECT1-DAY2
主要内容:
网站架构演变、LNP+Mariadb数据库分离、Web服务器集群(部署Nginx后端web服务器、部署NFS共享存储服务器、部署Haproxy代理服务器、部署DNS域名解析服务器)
一、网站架构演变:
随着网站访问量和业务复杂度的增加,网站架构需要不断演变以应对更高的性能、可用性和扩展性需求。以下是常见的网站架构演变过程:
1、单机版LNMP
架构描述:一台WEB服务器部署单机版LNMP
- Linux 操作系统
- Nginx Web 服务器
- MySQL 或 MariaDB 数据库
- PHP 应用服务器
特点:
- 简单易用,适合小型网站或初创项目。
- 所有服务(Web、数据库、应用)运行在同一台服务器上。
- 性能和扩展性有限,无法应对高并发和大数据量。
问题:
- 单点故障,服务器宕机会导致整个网站不可用。
- 性能瓶颈,无法应对高并发请求。
2、独立数据库服务器(LNMP+Mariadb)
架构描述:
- Linux 操作系统
- Nginx Web 服务器
- MySQL 或 MariaDB 数据库
- PHP 应用服务器
特点:
- 将数据库服务从 Web 服务器中分离出来,提高数据库性能和安全性。
- 数据库服务器可以独立扩展,增加存储和计算资源。
问题:
- Web 服务器仍然是单点故障。
- 数据库服务器可能成为性能瓶颈。
该架构将网站静态文件、代码文件等资料与数据库分离LNMP架构,当访问用户量增加时单机的处理能力及资源有限,PHP或JAVA代码的解析和执行需要消耗大量CPU资源,数据库的增删改查需要调用大量的内存资源,将两者分离可以减轻服务器的压力;Web服务器和数据库服务器的压力得到有效改善的同时,但依然存在单点故障问题;
3、Web服务器集群(代理)与Session保持
架构描述:
- Linux 操作系统
- Nginx 或 Apache 作为反向代理服务器
- MySQL 或 MariaDB 数据库
- PHP 应用服务器集群
特点:
- 使用反向代理服务器(如 Nginx 或 HAProxy)将请求分发到多个 Web 服务器。
- 通过负载均衡提高网站的并发处理能力。
- 使用 Session 保持机制(如 Redis、Memcached)确保用户会话在集群中的连续性。
问题:
- 数据库服务器仍然是单点故障。
- 需要解决 Session 同步和一致性问题。
通过Nginx、Haproxy代理服务器实现Web负载均衡集群,也可使用LVS调度器实现Web负载均衡集群。部署完Web集群后还需要考虑如何进行Session会话保持,方法很多,如:根据源IP保持,代理服务器重写Cookie信息,共享文件系统保存session,使用数据库共享session等等;
但是如果只有一台调度器依然会导致单点故障的问题,因此还需要使用Keepalived或Heartbeat之类的软件进行高可用配置;
对于网站内容而言可以分离为动态页面和静态页面,静态页面就需要数据文件,动态页面则需要CPU解析代码,需要消耗大量的CPU资源,因此可以将静态和动态分离为两组服务器,动态页面有脚本代码组成,是一种基于网页的应用程序,因此这一组服务器也称为应用服务器;
4、动静分离、数据库集群
架构描述:
- Linux 操作系统
- Nginx 或 Apache 作为反向代理服务器
- MySQL 或 MariaDB 数据库集群
- PHP 应用服务器集群
- 静态资源服务器(如 CDN、Nginx)
特点:
- 使用数据库集群(如主从复制、主主复制、分片)提高数据库的可用性和性能。
- 通过读写分离、分片等技术,分散数据库的负载。
- 提高数据库的扩展性和容错能力。
问题:
- 数据库集群的配置和管理复杂。
- 需要解决数据一致性和同步问题。
随着服务器的增加,虽然性能与并发量得到了明显的提升,但是数据的一致性、管理的便利性成为了新的问题,因此就需要增加统一的存储服务器,实现数据的同步一致,可以使用NFS,GlusterFS、Ceph等软件实现该功能;此时所有应用服务器都连接一台数据库服务器进行读写操作,而且后期随着数据库中的数据不断增加,会导致数据库成为整个网站的瓶颈!这就需要我们对数据进行分库分表,创建数据库主从或者数据库集群,实现读写分离;
5、缓存服务器与业务模型
对于静态数据我们可以通过varnish、squid或者nginx进行缓存,将数据缓存到距离用户更近的位置,构建CDN(内容分发网络)架构;对于传统的SQL数据库而言,我们也可以通过增加NoSQL数据库,实现数据缓存的功能,提升数据库的访问速度;
架构描述:
- Linux 操作系统
- Nginx 或 Apache 作为反向代理服务器
- MySQL 或 MariaDB 数据库集群
- PHP 应用服务器集群
- 静态资源服务器(如 CDN、Nginx)
- 缓存服务器(如 Redis、Memcached)
特点:
- 使用缓存服务器(如 Redis、Memcached)缓存频繁访问的数据和计算结果。
- 通过缓存减少数据库的访问压力,提高网站的响应速度。
- 根据业务模型设计缓存策略,如缓存预热、缓存失效、缓存更新等。
问题:
- 缓存服务器的配置和管理复杂。
- 需要解决缓存一致性和失效问题。
二、网站架构进阶项目案例
案例1:LNP+Mariadb数据库分离
部署LNP+Mariadb实现数据库与Web服务器分离,实现以下目标:
- 1)将旧的数据库备份,迁移到新的服务器(延续DAY1案例)
- 2)修改配置调用新的数据库服务器
实验拓扑图:
主机配置表:
步骤1:部署数据库服务器(database主机操作)
1)准备一台独立的服务器,安装数据库软件包
[root@database ~]# yum -y install mariadb mariadb-server mariadb-devel
[root@database ~]# systemctl start mariadb
[root@database ~]# systemctl enable mariadb
[root@database ~]# firewall-cmd --set-default-zone=trusted
[root@database ~]# setenforce 0
[root@database ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
2)将web1单机版的LNMP网站中的数据库迁移到新的数据库服务器
登陆192.168.2.11主机,备份数据库并拷贝给新的服务器,关闭旧的数据库服务:
[root@web1 ~]# mysqldump wordpress > wordpress.bak //备份数据库到文件(备份的文件名和扩展名任意)
[root@web1 ~]# scp wordpress.bak 192.168.2.21:/root/ //拷贝备份文件到远程主机
[root@web1 ~]# systemctl stop mariadb
[root@web1 ~]# systemctl disable mariadb
登陆192.168.2.21主机,创建空数据库,使用备份文件还原数据库:
[root@database ~]# mysql
MariaDB [(none)]> create database wordpress character set utf8mb4; //创建数据库wordpress,该数据库支持中文
MariaDB [(none)]> exit
使用备份文件还原数据:
[root@database ~]# mysql wordpress < wordpress.bak //使用备份文件导入数据到wordpress数据库
重新创建账户并授权访问:
[root@database ~]# mysql
MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
MariaDB [(none)]> flush privileges; //刷新权限
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> exit
解释说明:
# 格式:grant权限 on数据库名.表名 to用户名@客户端主机 identified by密码
# 创建用户并授权,用户名为wordpress,该用户对wordpress数据库下的所有表有所有权限
# wordpress用户的密码是wordpress,授权该用户可以从localhost主机登录数据库服务器
# all代表所有权限(wordpress用户可以对wordpress数据库中所有表有所有权限)
# wordpress.*代表wordpress数据库中的所有表
# 在MySQL和MariaDB中%代表所有,这里是授权任何主机都可以连接数据库。
3)修改wordpress网站配置文件,调用新的数据库服务器
Wordpress在第一次初始化操作时会自动生产配置文件wp-config.php,登陆192.168.2.11修改该文件即可调用新的数据库服务。
[root@web1 ~]# vim /usr/local/nginx/html/wp-config.php
# 修改前内容如下:
define('DB_HOST', '192.168.2.11'); //将原指定2.11本机配置修改为DB主机2.21
# 修改后内容如下:
define('DB_HOST', '192.168.2.21');
...
步骤2:客户端(真机)验证测试
1)客户端使用浏览器访问wordpress网站:http://192.168.2.11
案例2:Web服务器集群
使用HAProxy部署Web服务器集群,实现以下目标:
- 1)部署三台Web服务器(包含DAY1的web1,部署相同web2、web3)
- 2)迁移网站数据,使用NFS实现数据共享
- 3)部署HAProxy代理服务器实现负载均衡
- 4)部署DNS域名解析服务器
实验拓扑图:
主机配置表:
步骤1:部署LNP架构
1)安装LNP软件包(web2、web3操作)
[root@web2 ~]# yum -y install gcc pcre-devel openssl-devel
[root@web2 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web2 lnmp_soft]# cd nginx-1.12.2/
[root@web2 nginx-1.12.2]# ./configure --user=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@web2 nginx-1.12.2]# make && make install
[root@web2 ~]# yum -y install php php-fpm php-mysql mariadb-devel[root@web3 ~]# yum -y install gcc pcre-devel openssl-devel
[root@web3 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web3 lnmp_soft]# cd nginx-1.12.2/
[root@web3 nginx-1.12.2]# ./configure --user=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@web3 nginx-1.12.2]# make && make install
[root@web3 ~]# yum -y install php php-fpm php-mysql mariadb-devel
案例1延续,Mariadb数据库服务已分离到另一台数据库服务器上,无需再安装数据库服务;
2)修改nginx配置实现动静分离(web2、web3操作)
web2修改默认首页index.php,配置两个location实现动静分离
[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root html;index index.php index.html index.htm;}
location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;}
web3修改默认首页index.php,配置两个location实现动静分离。
[root@web3 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {root html;index index.php index.html index.htm;}
location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi.conf;}
3)启动LNP所有相关服务、设置防火墙和SELinux
[root@web2 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@web2 ~]# chmod +x /etc/rc.local
[root@web2 ~]# /usr/local/nginx/sbin/nginx
[root@web2 ~]# systemctl start php-fpm
[root@web2 ~]# systemctl enable php-fpm
[root@web2 ~]# firewall-cmd --set-default-zone=trusted
[root@web2 ~]# setenforce 0
[root@web2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config[root@web3 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
[root@web3 ~]# chmod +x /etc/rc.local
[root@web3 ~]# /usr/local/nginx/sbin/nginx
[root@web3 ~]# systemctl start php-fpm
[root@web3 ~]# systemctl enable php-fpm
[root@web3 ~]# firewall-cmd --set-default-zone=trusted
[root@web3 ~]# setenforce 0
[root@web3 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
扩展知识:Service文件存储路径为/usr/lib/systemd/system/目录
[root@web1 ~]# cp /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/nginx.service
[root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server //描述信息
After=network.target remote-fs.target nss-lookup.target //指定启动nginx之前需要其他的其他服务,如network.target等[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}[Install]
WantedBy=multi-user.target
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# ss -nlptu | grep :80
步骤2:部署NFS,将Wordpress网站数据迁移至NFS共享服务器
1)部署NFS共享服务器
[root@nfs ~]# yum install nfs-utils rpcbind
[root@nfs ~]# mkdir /web_share //创建NFS共享目录
[root@nfs ~]# vim /etc/exports
/web_share 192.168.2.0/24(rw,no_root_squash)
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enable nfs
[root@nfs ~]# firewall-cmd --set-default-zone=trusted
[root@nfs ~]# setenforce 0
[root@nfs ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
补充:NFS使用的是随机端口,启动NFS都需要将自己的随机端口注册到rpcbind服务,当客户端访问NFS时,先到rpcbind查询端口信息,得到端口信息后再访问NFS服务
补充:/etc/exports配置文件的no_root_squash(squash压缩压扁的意思)
- no_root_squash:登入NFS的主机使用共享目录的使用者如果是root时,那么对于这个目录来说,该主机就具有root的权限;
- root_squash:登入NFS主机使用共享目录的使用者如果是root时,那么使用者的权限将被压缩成为NFS系统账号:nfs匿名身份(UID与GID都会变成nfsnobody)
[root@nfs ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
2)迁移旧的网站数据到NFS共享服务器
将web1(192.168.2.11)上的wordpress代码拷贝到NFS共享
[root@web1 ~]# cd /usr/local/nginx/html/
[root@web1 html]# tar -czpf html.tar.gz ./* // [-p]代表打包时保留文件的权限
[root@web1 html]# scp html.tar.gz 192.168.2.31:/web_share/
[root@web1 html]# rm -rf /usr/local/nginx/html/* //清空本机的网页目录
登录nfs(192.168.2.31),将压缩包解压
[root@nfs ~]# cd /web_share/
[root@nfs web_share]# ls
html.tar.gz
[root@nfs web_share]# tar -xf html.tar.gz
[root@nfs web_share]# ls
html.tar.gz wp-activate.php wp-config.php wp-includes wp-mail.php xmlrpc.php
index.php wp-admin wp-config-sample.php wp-links-opml.php wp-settings.php
license.txt wp-blog-header.php wp-content wp-load.php wp-signup.php
readme.html wp-comments-post.php wp-cron.php wp-login.php wp-trackback.php
3)所有web服务器访问挂载NFS共享数据(web1、web2、web3)
[root@web1 ~]# yum -y install nfs-utils
[root@web1 ~]# showmount -e 192.168.2.31
Export list for 192.168.2.31:
/web_share 192.168.2.0/24
[root@web1 ~]# echo "192.168.2.31:/web_share /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web1 ~]# mount -a
[root@web1 ~]# ls /usr/local/nginx/html
html.tar.gz wp-activate.php wp-config.php wp-includes wp-mail.php xmlrpc.php
index.php wp-admin wp-config-sample.php wp-links-opml.php wp-settings.php
license.txt wp-blog-header.php wp-content wp-load.php wp-signup.php
readme.html wp-comments-post.php wp-cron.php wp-login.php wp-trackback.php[root@web2 ~]# yum -y install nfs-utils
[root@web2 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web2 ~]# mount -a[root@web3 ~]# yum -y install nfs-utils
[root@web3 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab
[root@web3 ~]# mount -a
4)使用浏览器测试访问每个web服务器,查看是否有相同的网页数据结果;
解释:当前所有的WEB服务器已部署LNP架构,每台WEB服务器能提供动静态的页面解析;然后分离出的database服务器部署Mariadb服务,并备份及恢复原web1数据库的数据,并提供了wordpress网站访问数据库的用户和所有权限;其次将网站的数据存放在NFS服务器的共享目录中,并把每台WEB服务器挂载了共享目录,实现网页数据访问;
步骤3:部署HAProxy代理服务器
1)部署HAProxy(80端口)
[root@proxy ~]# yum -y install haproxy
[root@proxy ~]# vim /etc/haproxy/haproxy.cfg
listen wordpress *:80 //监听80端口balance roundrobin //轮询算法server web1 192.168.2.11:80 check inter 2000 rise 2 fall 3server web2 192.168.2.12:80 check inter 2000 rise 2 fall 3server web3 192.168.2.13:80 check inter 2000 rise 2 fall 3
[root@proxy ~]# systemctl start haproxy
[root@proxy ~]# systemctl enable haproxy
[root@proxy ~]# ss -nlptu | grep :80
tcp LISTEN 0 128 *:80 *:* users:(("haproxy",pid=981,fd=7))
[root@proxy ~]# firewall-cmd --set-default-zone=trusted
[root@proxy ~]# setenforce 0
[root@proxy ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
2)使用浏览器测试访问proxy代理服务器,查看网页数据结果;
步骤4:部署DNS域名服务器
1)安装DNS相关软件
[root@dns ~]# yum -y install bind bind-chroot
2)修改主配置文件,添加zone
[root@dns ~]# vim /etc/named.conf
options {listen-on port 53 { any; }; //服务监听的地址与端口directory "/var/named"; //数据文件路径allow-query { any; }; //允许任何主机访问DNS服务
... ...
};
zone "lab.com" IN { //定义正向区域type master;file "lab.com.zone";
};
#include "/etc/named.rfc1912.zones"; //注释掉改行
#include "/etc/named.root.key"; //注释掉改行
[root@dns ~]# named-checkconf /etc/named.conf //检查配置文件语法
3)修改正向解析记录文件
[root@dns ~]# cp -p /var/named/named.localhost /var/named/lab.com.zone
[root@dns ~]# vim /var/named/lab.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimum
@ NS dns.lab.com.
dns A 192.168.2.10
www A 192.168.2.10
4)启动DNS服务
[root@dns ~]# systemctl start named
[root@dns ~]# systemctl enable named
[root@dns~]# firewall-cmd --set-default-zone=trusted
[root@dns ~]# setenforce 0
[root@dns ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
5)修改DNS解析文件
[root@dns ~]# vim /etc/resolv.conf
nameserver 192.168.2.10
— 验证:
[root@dns ~]# nslookup www.lab.com
Server: 192.168.2.10
Address: 192.168.2.10#53Name: www.lab.com
Address: 192.168.2.10
备注:
- 如果不做DNS,也可直接修改hosts解析文件;
- 如果是Linux客户端,则修改/etc/hosts文件;
- 如何客户端是Windows则需要在图形中配置网卡的DNS服务器;
步骤5:修改wordpress配置文件
1)修改wp-config.php
在define('DB_NAME', 'wordpress')这行前面添加如下两行内容:
[root@nfs ~]# vim /usr/local/nginx/html/wp-config.php
define('WP_SITEURL', 'http://www.lab.com');
define('WP_HOME', 'http://www.lab.com');
...
补充:如果不添加这两行配置,浏览器访问网站某个子页面后,URL会固定到某一台后端服务器不轮询。
警告:添加的这两行必须与前面的域名解析一致!!!!
小结:
本篇章节为【第三阶段】PROJECT1-DAY2 的学习笔记,这篇笔记可以初步了解到 网站架构演变、LNP+Mariadb数据库分离、Web服务器集群(部署Nginx后端web服务器、部署NFS共享存储服务器、部署Haproxy代理服务器、部署DNS域名解析服务器)
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解
相关文章:

Linux云计算 |【第三阶段】PROJECT1-DAY2
主要内容: 网站架构演变、LNPMariadb数据库分离、Web服务器集群(部署Nginx后端web服务器、部署NFS共享存储服务器、部署Haproxy代理服务器、部署DNS域名解析服务器) 一、网站架构演变: 随着网站访问量和业务复杂度的增加&#x…...

Claude Prompt 汉语新解
感谢刚哥! ;; 作者: 李继刚 ;; 版本: 0.3 ;; 模型: Claude Sonnet ;; 用途: 将一个汉语词汇进行全新角度的解释 ;; 设定如下内容为你的 *System Prompt* (defun 新汉语老师 () "你是年轻人,批判现实,思考深刻,语言风趣" (风格 . ("Oscar Wilde&q…...

【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(2)
运维监控系列文章入口:【运维监控】系列文章汇总索引 文章目录 四、grafana集成influxdb监控java 虚拟机以及方法耗时情况1、添加grafana数据源2、添加grafana的dashboard1)、选择新建dashboard方式2)、导入dashboard 3、验证 关于java应用的…...

怎么看待伦敦银交易的风险与收益?
伦敦银交易的风险与收益,在宣传材料中,伦敦银是一种潜在收益很高,潜在风险不大的品种。然而在实践中我们发现,伦敦银交易好像并不如宣传材料说的那样容易做。那么,具体伦敦银交易的风险和收益是怎么样的?那…...

如何通俗易懂的解释TON的智能合约
文章目录 一、小故事一则二、Ton的智能合约在小故事中三、python代码模拟 一、小故事一则 在一个遥远的国度里,有一个被魔法笼罩的小镇,这个小镇每年都会举办一场盛大的戏剧节。这个戏剧节不仅是演员们展示才华的舞台,更是他们交流心得、共同…...

针对Docker容器的可视化管理工具—DockerUI
目录 ⛳️推荐 前言 1. 安装部署DockerUI 2. 安装cpolar内网穿透 3. 配置DockerUI公网访问地址 4. 公网远程访问DockerUI 5. 固定DockerUI公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…...

五大注入攻击网络安全类型介绍
1. SQL注入(SQL Injection) SQL注入流程 1.1. 概述 SQL注入是最常见的注入攻击类型之一,攻击者通过在输入字段中插入恶意的SQL代码来改变原本的SQL逻辑或执行额外的SQL语句,来操控数据库执行未授权的操作(如拖库、获取…...

linux-L9.linux中对文件 按照时间排序 显示100 个
find . -type f -exec stat --format %Y %n {} | sort -nr | head -n 100解释: • find . -type f:在当前目录下查找所有文件。 • -exec stat --format ‘%Y %n’ {} :对每个找到的文件执行stat命令,以获取文件的修改时间&#…...

springboot从分层到解耦
注释很详细,直接上代码 三层架构 项目结构 源码: HelloController package com.amoorzheyu.controller;import com.amoorzheyu.pojo.User; import com.amoorzheyu.service.HelloService; import com.amoorzheyu.service.impl.HelloServiceA; import o…...

网络视频流解码显示后花屏问题的分析
问题描述 rtp打包的ps视频流发送到客户端后显示花屏。 数据分析过程 1、用tcpdump抓包 tcpdump -i eth0 -vnn -w rtp.pcap 2、用wireshark提取rtp的payload 保存为record.h264文件 3、用vlc播放器播放 显示花屏 4、提取关键帧 用xxd命令将h264文件转为txt文件 xxd -p…...

MySQL 大量 IN 的查询优化
背景 (1)MySQL 8.0 版本 (2)业务中遇到大量 IN 的查询,例: SELECT id, username, icon FROM users WHERE id IN (123, 523, 1343, ...);其中 id 为主键,IN 的列表长度有 8000 多个 问题 …...

python运维
环境准备 安装python3环境 # centos 安装python3 yum install python3创建激活venv python3 -m venv .venv source .venv/bin/activatezookeeper pip install kazoo 递归复制目录 from kazoo.client import KazooClientdef copy_node(zk, source_path, destination_path)…...

gen_server补充基础学习
学习gen_server的回调结构 gen_server:start_link(Name, Mod, InitArgs, Opts)这个调用是所有事物的起点。它 会创建一个名为Name的通用服务器,回调模块是Mod,Opts则控制通用服务器的行为。在这里可以指定消息记录、函数调试和其他行为。通用服务器通过…...

Python 入门教程(3)基础知识 | 3.1、基础语法
文章目录 一、 基础语法1、缩进规则2、标识符3、多行语句 一、 基础语法 1、缩进规则 学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。缩进的空白数量是可…...

git 合并分支并解决冲突
git 合并分支并解决冲突 切换分支 git checkout <branch-name> 首先切换到要合并的目标分支 合并分支 git merge <source-branch> //将源分支代码合并到当前分支中,源分支的各项新增的提交都会按时间点插入到当前分支的提交记录中 git merge …...

《程序猿之设计模式实战 · 装饰者模式》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

[K8S]Forbidden: pod updates may not change fields other than
背景 在执行kubectl apply -f pod-nginx.yaml的时候报错 The Pod "nginx-test" is invalid: spec: Forbidden: pod updates may not change fields other than `spec.containers[*].image`, `spec.initContainers[*].image`, `spec.activeDeadlineSeconds`, `spec.to…...

C/C++漏洞检测数据集汇总
漏洞检测这个方向最近几年尤为热门,尤其是与深度学习技术相结合的研究,同时一些公开可用的数据集的出现也进一步推动了这些技术的发展。本篇文章总结归纳了目前在 C/C 源代码漏洞检测方向的一些公开数据集以及相关文献。 1 Devign (FFmpegQemu) 简介&am…...

springboot后端开发-常见注解及其用途
文章目录 1. 组件注解2. 依赖注入注解3. 配置类注解4. 测试注解5. 控制器注解6. 安全和认证注解7. 切面相关注解8. API文档相关注解(需引入swagger)9. 其他注解 在Spring Boot框架中,有许多常用的注解用来简化开发过程中的依赖注入、组件扫描、配置、安全控制等方面…...

TypeScript 扩展
扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性,它是ES11(ES2020)中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时,会短路,直接返回undefined,如果存在,那么…...

按键学院往期视频
按键学院第五期 网游实战系列课程 按键学院第四期 网游实战系列课程01-回合制网游的特点:测试游戏后台按键图色 网游实战系列课程02-神武新手任务的识别与处理:字库识别任务 网游实战系列课程03-神武自动组队与攻击 网游实战系列课程04-神武自动逛地图与攻击 网游实战系列课程0…...

通信工程学习:什么是MRF多媒体资源功能、MRFC多媒体资源功能控制、MRFP多媒体资源功能处理
一、MRF多媒体资源功能 MRF(Multimedia Resource Function,多媒体资源功能)是3G/IMS网络中定义的提供多媒体资源功能的网络实体,它为3G/IMS网络的业务和承载提供媒体能力支持。MRF通过提供丰富的媒体处理功能,如播放声…...

【Windows】获取进程缓解策略设置情况
目录 一、前言 二、主要概念 三、实现步骤 四、总结 原文出处链接:[https://blog.csdn.net/qq_59075481/article/details/142234952] 一、前言 在现代操作系统中,进程缓解策略(Process Mitigation Policy)提供了一种防御机制…...

语音识别相关概念
声音如何保存成数字信号? 声音是听觉对声波产生的感知,而声波是一种在时间和振幅上连续的模拟量,本质是介质的振动,,比如空气的振动。那么只需要把这个振动信号记录下来,并用一串数字来表达振动信号振动的…...

Iceberg与SparkSQL查询操作整合
前言 spark操作iceberg之前先要配置spark catalogs,详情参考Iceberg与Spark整合环境配置。 Iceberg使用Apache Spark的DataSourceV2 API来实现数据源和catalog。 使用SQL查询 查询的时候表要按照:catalog.数据库.表名的格式 SELECT * FROM prod.db.table; -- catalog: p…...

Linux 上安装 PostgreSQL
Linux 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源关系数据库管理系统,因其稳定性、可扩展性和先进的功能而广受欢迎。在 Linux 系统上安装 PostgreSQL 是一个相对直接的过程,但具体步骤可能会因您使用的 Linux 发行版而异。本文将介绍在几种流行的 Linux 发行版上安…...

WRF-LES与PALM微尺度气象大涡模拟、PALM静态数据预备、PALM驱动数据预报、PALM模拟
查看原文>>>WRF-LES与PALM微尺度气象大涡模拟及ChatGPT在大气科学领域应用 针对微尺度气象的复杂性,大涡模拟(LES)提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟,这些过程往往与天气…...

需求分析概述
为什么要进行需求分析呢? 笑话:富翁娶妻 某富翁想要娶老婆,有三个人选,富翁给了三个女孩各一千元,请 她们把房间装满。第一个女孩买了很多棉花,装满房间的1/2。第 二个女孩买了很多气球,装满…...

Java | Leetcode Java题解之第391题完美矩形
题目: 题解: class Solution {public boolean isRectangleCover(int[][] rectangles) {long area 0;int minX rectangles[0][0], minY rectangles[0][1], maxX rectangles[0][2], maxY rectangles[0][3];Map<Point, Integer> cnt new HashM…...

java项目之基于web的人力资源管理系统的设计与实现(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于web的人力资源管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: …...