什么是负载均衡?

负载均衡是一种策略,涉及将工作任务或网络流量均匀地分配到多个计算资源或服务器上,以实现更高效的整体性能。其核心目的在于确保所有资源得到充分利用,同时优化响应时间,防止单个节点过载而其他节点闲置。

负载均衡的重要性

随着应用程序的发布和普及,用户数量可能会迅速增加。这种增长往往伴随着对服务器资源需求的激增,可能导致服务器过载甚至瘫痪。特别是在处理大量并发请求时,如果没有适当的负载均衡机制,服务器可能无法有效地处理这些请求。

因此,负载均衡器的引入变得至关重要。它不仅可以帮助分析和优化系统性能,还能有效地分配请求,确保每个服务器都能承受适量的负载,从而避免单点故障,提升整体的系统可用性和可扩展性。

负载均衡方案

实施负载均衡

在使用 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

测试结果

首次命中/产品端点

第二次点击/产品端点

通过测试结果,我们可以观察到,当第一台服务器处于繁忙状态时,请求会被智能地重定向到负载较轻的服务器上。这种负载均衡机制确保了请求不会仅仅堆积在一台服务器上,从而提高了系统的整体响应能力和稳定性。这种设计不仅优化了用户体验,还降低了单点故障的风险,为产品提供了更加可靠的服务。