NGINX 负载平衡
什么是负载均衡?
负载均衡是一种策略,涉及将工作任务或网络流量均匀地分配到多个计算资源或服务器上,以实现更高效的整体性能。其核心目的在于确保所有资源得到充分利用,同时优化响应时间,防止单个节点过载而其他节点闲置。
负载均衡的重要性
随着应用程序的发布和普及,用户数量可能会迅速增加。这种增长往往伴随着对服务器资源需求的激增,可能导致服务器过载甚至瘫痪。特别是在处理大量并发请求时,如果没有适当的负载均衡机制,服务器可能无法有效地处理这些请求。
因此,负载均衡器的引入变得至关重要。它不仅可以帮助分析和优化系统性能,还能有效地分配请求,确保每个服务器都能承受适量的负载,从而避免单点故障,提升整体的系统可用性和可扩展性。
负载均衡方案
实施负载均衡
在使用 Docker 的场景中,为了实现负载均衡,我精心配置了 docker-compose.yml
文件。
接下来,我将详细展示我的 Docker 配置:
version: '3'
services:
php1:
build:
context: .
dockerfile: php/Dockerfile
image: php
container_name: php1
restart: unless-stopped
volumes:
- ./php:/var/www/app/
environment:
- SERVICE_ID=1
- PORT=8000
networks:
- app_net
php2:
build:
context: .
dockerfile: php/Dockerfile
image: php
container_name: php2
restart: unless-stopped
volumes:
- ./php:/var/www/app/
environment:
- SERVICE_ID=2
- PORT=8001
networks:
- app_net
nginx-php:
build:
context: .
dockerfile: nginx/Dockerfile
image: nginx:alpine
container_name: nginx-php
restart: unless-stopped
volumes:
- ./php:/var/www/app/
- ./nginx/conf/:/etc/nginx/conf.d/
networks:
- app_net
ports:
- 80:80
depends_on:
- php1
networks:
app_net:
driver: bridge
在此配置中,我利用了两个 PHP 容器来全面测试 Nginx 的负载均衡能力。
以下是我的 php.Dockerfile
配置详情:
FROM php:8.1-cli
COPY . /var/www/app/start.sh
WORKDIR /var/www/app
RUN chmod +x ./start.shchmod +x ./start.sh
CMD ["sh", "./start.sh"]
以下是我的 start.sh
配置详情:
#!/bin/bash
set -e;
php -S 0.0.0.0:$PORT ./routes.php;
那么这个配置最重要的就是nginx
以下是我的 Nginx.Dockerfile
配置详情:
FROM nginx:1.23.1-alpine
RUN rm /etc/nginx/conf.d/default.confrm /etc/nginx/conf.d/default.conf
以下是我的 default.conf
配置详情:
# docker-basic-lb/proxy/default.conf.conf
upstream gateway {
server php1:8000;
server php2:8001;
}
server {
location / {
proxy_pass http://gateway;
}
}
所以结构就变成了这样:
C:.
├───nginx
│ └───conf
└───php
测试结果
首次命中/产品端点
第二次点击/产品端点
通过测试结果,我们可以观察到,当第一台服务器处于繁忙状态时,请求会被智能地重定向到负载较轻的服务器上。这种负载均衡机制确保了请求不会仅仅堆积在一台服务器上,从而提高了系统的整体响应能力和稳定性。这种设计不仅优化了用户体验,还降低了单点故障的风险,为产品提供了更加可靠的服务。
发表评论