本文所有操作基于Ubuntu 22.04 LTS,需提前安装Docker及Docker Compose,直接执行以下命令:
``` sudo apt update && sudo apt install -y docker.io docker-compose sudo systemctl start docker sudo systemctl enable docker ```执行后用docker --version验证,返回版本号则环境正常。
拉取公开轻量档案服务镜像,启动2个实例实现负载分散:
``` docker run -d --name arch-svc1 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/techdoc/arch-svc:v1 docker run -d --name arch-svc2 -p 8081:8080 registry.cn-hangzhou.aliyuncs.com/techdoc/arch-svc:v1 ```验证实例状态,执行以下命令,输出"status: ok"则正常:
``` curl http://localhost:8080/health curl http://localhost:8081/health ```启动单实例Redis服务,用于缓存高频访问的档案数据:
``` docker run -d --name arch-redis -p 6379:6379 redis:7-alpine ```配置档案服务的Redis连接参数,让两个后端服务都关联缓存:
``` docker update arch-svc1 --env REDIS_HOST=localhost --env REDIS_PORT=6379 docker update arch-svc2 --env REDIS_HOST=localhost --env REDIS_PORT=6379 ```验证Redis连通性,执行docker exec arch-redis redis-cli ping,返回"PONG"则正常。
创建Nginx负载配置文件,路径为/etc/nginx/conf.d/arch-lb.conf,完整内容如下:
启动Nginx并挂载配置文件,命令:
``` docker run -d --name arch-nginx -p 80:80 -v /etc/nginx/conf.d/arch-lb.conf:/etc/nginx/conf.d/default.conf nginx:alpine ```
验证负载均衡,重复执行curl -I http://localhost,返回的Server头依次对应arch-svc1和arch-svc2,说明负载生效。
安装压力测试工具ab,命令:
``` sudo apt install -y apache2-utils ```执行1000并发、10000请求的测试,命令:
``` ab -n 10000 -c 1000 http://localhost/archives?type=common ```关键判定:测试结果的Requests per second指标≥500,说明配置达到高并发要求;若低于则检查Redis连接或Nginx配置。
修改档案服务的查询逻辑,新增Redis缓存层,Python伪代码(可直接替换原有逻辑):
``` import redis import psycopg2 r = redis.Redis(host='localhost', port=6379, db=0) conn = psycopg2.connect("dbname=arch user=postgres password=123456") def get_archive(archive_id): cache_key = f"archive:{archive_id}" cached_data = r.get(cache_key) if cached_data: return eval(cached_data) with conn.cursor() as cur: cur.execute("SELECT id, title, content FROM archives WHERE id = %s", (archive_id,)) archive = cur.fetchone() r.setex(cache_key, 3600, str(archive)) return archive ```增大Nginx单进程连接上限,编辑arch-nginx的配置,在nginx.conf的events模块添加:
``` events { worker_connections 10240; } ```重启Nginx容器生效:docker restart arch-nginx
执行docker ps,确认4个容器(arch-svc1、arch-svc2、arch-redis、arch-nginx)均为Up状态;若为Exited,执行docker logs 容器名查看报错。
执行docker exec arch-nginx nginx -t,返回"test is successful"则配置正确;若报错,检查arch-lb.conf的upstream节点是否配置准确。
执行docker exec arch-redis redis-cli keys "archive:",查看是否有缓存键;若无,检查arch-svc的REDIS环境变量,执行docker exec arch-svc1 env | grep REDIS,确认值为localhost:6379。