作者:微信小助手
发布时间:2023-07-04T19:15:58
干货!文章有点长,建议先收藏 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。 从上面的描述中,主要存在两个问题:①单体结构的部署方式无法承载日益增长的业务流量。②当后端节点宕机后,整个系统会陷入瘫痪,导致整个项目不可用。 因此在这种背景下,引入负载均衡技术可带来的收益: OK~,既然引入负载均衡技术可给我们带来如此巨大的好处,那么又有那些方案可供选择呢?主要有两种负载方案,「「硬件层面与软件层面」」 ,比较常用的硬件负载器有 当然,如果你认为本文对你而言有帮助,记得点赞、收藏、关注三连噢! 先来看看 原本客户端是直接请求目标服务器,由目标服务器直接完成请求处理工作,但加入 了解了 ❶首先创建 ❷下载 没有 ❸解压 ❹下载并安装 也可以通过 执行完成后,然后 紧接着通过 ❺进入解压后的 ❻编译并安装 ❼最后回到前面的 ❽修改安装后生成的 ❾制定配置文件并启动 ❿开放 ⓫在 最终看到如上的 首先通过
引言
“
A10、F5
等,但这些机器动辄大几万乃至几十万的成本,因此一般大型企业会采用该方案,如银行、国企、央企等。而成本有限,但依旧想做负载均衡的项目,那么可在软件层面实现,如典型的Nginx
等,软件层的负载也是本文的重点,毕竟Boss
们的准则之一就是:「「能靠技术实现的就尽量不花钱。」」
“
一、性能怪兽-Nginx概念深入浅出
Nginx
是目前负载均衡技术中的主流方案,几乎绝大部分项目都会使用它,Nginx
是一个轻量级的高性能HTTP
反向代理服务器,同时它也是一个通用类型的代理服务器,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS
等。
Nginx
与Redis相同,都是基于多路复用模型构建出的产物,因此它与Redis
同样具备 「「资源占用少、并发支持高」」 的特点,在理论上单节点的Nginx
同时支持5W
并发连接,而实际生产环境中,硬件基础到位再结合简单调优后确实能达到该数值。Nginx
引入前后,客户端请求处理流程的对比:
Nginx
后,所有的请求会先经过Nginx
,再由其进行分发到具体的服务器处理,处理完成后再返回Nginx
,最后由Nginx
将最终的响应结果返回给客户端。Nginx
的基本概念后,再来快速搭建一下环境,以及了解一些Nginx
的高级特性,如动静分离、资源压缩、缓存配置、IP
黑名单、高可用保障等。二、Nginx环境搭建
Nginx
的目录并进入:[root@localhost]# mkdir /soft && mkdir /soft/nginx/
[root@localhost]# cd /soft/nginx/ Nginx
的安装包,可以通过FTP
工具上传离线环境包,也可通过wget
命令在线获取安装包:[root@localhost]# wget https://nginx.org/download/nginx-1.21.6.tar.gz
wget
命令的可通过yum
命令安装:[root@localhost]# yum -y install wget
Nginx
的压缩包:[root@localhost]# tar -xvzf nginx-1.21.6.tar.gz
Nginx
所需的依赖库和包:[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ gcc-c++
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ pcre pcre-devel4
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ zlib zlib-devel
[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ openssl openssl-devel yum
命令一键下载(推荐上面哪种方式):[root@localhost]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
ls
查看目录文件,会看一大堆依赖:
rpm
命令依次将依赖包一个个构建,或者通过如下指令一键安装所有依赖包:[root@localhost]# rpm -ivh --nodeps *.rpm
nginx
目录,然后执行Nginx
的配置脚本,为后续的安装提前配置好环境,默认位于/usr/local/nginx/
目录下(可自定义目录):[root@localhost]# cd nginx-1.21.6
[root@localhost]# ./configure --prefix=/soft/nginx/ Nginx
:[root@localhost]# make && make install
/soft/nginx/
目录,输入ls
即可看见安装nginx
完成后生成的文件。conf
目录下的nginx.conf
配置文件:[root@localhost]# vi conf/nginx.conf
修改端口号:listen 80;
修改IP地址:server_name 你当前机器的本地IP(线上配置域名); Nginx
:[root@localhost]# sbin/nginx -c conf/nginx.conf
[root@localhost]# ps aux | grep nginx Nginx
其他操作命令:sbin/nginx -t -c conf/nginx.conf # 检测配置文件是否正常
sbin/nginx -s reload -c conf/nginx.conf # 修改配置后平滑重启
sbin/nginx -s quit # 优雅关闭Nginx,会在执行完当前的任务后再退出
sbin/nginx -s stop # 强制终止Nginx,不管当前是否有任务在执行 80
端口,并更新防火墙:[root@localhost]# firewall-cmd --zone=public --add-port=80/tcp --permanent
[root@localhost]# firewall-cmd --reload
[root@localhost]# firewall-cmd --zone=public --list-ports Windows/Mac
的浏览器中,直接输入刚刚配置的IP
地址访问Nginx
:Nginx
欢迎界面,代表Nginx
安装完成。三、Nginx反向代理-负载均衡
SpringBoot+Freemarker
快速搭建一个WEB
项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java
文件,逻辑如下:@Controller
public class IndexNginxController {
@Value("${server.port}")
private String port;
@RequestMapping("/")