教程四 · 企业级

企业级高并发架构部署

阿里云 ECS 集群 + SLB 负载均衡 + CDN 加速 + RDS 数据库,支持万级 QPS,弹性扩容

🕐 搭建耗时:1–2天 💰 月费:¥500–5000+ ⚡ 难度:高级 🌐 适用:商业产品、高流量应用

完整企业级架构图

用户层
📱
移动端
iOS / Android
💻
PC 浏览器
Chrome / Safari
🔌
第三方 API 调用
合作伙伴
接入层
🛡️
DDoS 防护
阿里云盾
CDN
全球加速
🌐
WAF
Web 应用防火墙
负载均衡
⚖️
SLB(负载均衡)
四层/七层,会话保持
🔒
SSL 证书卸载
HTTPS → HTTP
应用层
🖥️
Web 服务器 ×N
ECS + Nginx
⚙️
应用服务器 ×N
Node / Python / Java
🔄
消息队列
RocketMQ / Kafka
缓存层
🚀
Redis 集群
热点数据缓存
📄
本地缓存
应用内存缓存
数据层
🗄️
RDS 主库
写入操作
📖
RDS 只读库 ×N
读取操作
🔍
Elasticsearch
搜索功能
🪣
OSS
文件/图片存储
监控层
📊
云监控
CPU/内存/流量
📝
日志服务 SLS
集中日志分析
🔔
告警通知
短信/钉钉/邮件
1

基础设施规划

按流量规模选择合适配置,先小后大,按需扩容

分级配置建议

规模预估 QPSECS 规格数量数据库月费估算
起步级 100–500 4核8G 2台 RDS 2核4G ¥500–800
成长级 500–5000 8核16G 4台 RDS 4核8G 主从 ¥2000–4000
企业级 5000–50000 16核32G 8台+ RDS 集群 + 只读 ¥8000–20000
大规模 50000+ 弹性伸缩组 动态 PolarDB / DRDS ¥20000+

网络架构规划(VPC 专有网络)

VPC 网络规划
# VPC CIDR: 10.0.0.0/8

# 公网子网(SLB、Nginx)
公网子网: 10.1.0.0/24   # 可访问互联网

# 应用子网(Web/App 服务器)
应用子网: 10.2.0.0/24   # 通过 NAT 访问互联网

# 数据子网(数据库、Redis)
数据子网: 10.3.0.0/24   # 完全隔离,不能访问互联网

# 原则:数据库只允许应用子网访问,绝不暴露公网
2

配置 SLB 负载均衡

将流量均匀分发到多台 ECS,实现高可用

创建 SLB 实例

  • 控制台 → 负载均衡 SLB → 创建实例
  • 地域:与 ECS 相同
  • 实例规格:按量付费(小流量)/ slb.s3.large(大流量)
  • 网络类型:公网,按流量计费
  • 获得 SLB 公网 IP,将域名 DNS 解析指向此 IP

配置监听规则

SLB 配置步骤
# 添加 HTTPS 监听(443端口)
监听端口: 443
后端协议: HTTP(SSL 在 SLB 卸载)
后端端口: 80
SSL 证书: 上传 SSL 证书
会话保持: 开启(30分钟)
健康检查: HTTP 检查 /health 路径

# 添加 HTTP 监听(80端口)→ 重定向到 HTTPS
监听端口: 80
重定向到 HTTPS: 开启

# 后端服务器组
虚拟服务器组: 添加所有 ECS 实例
权重: 均等 100(或按配置调整)

健康检查端点(代码中实现)

Node.js — /health 端点
// SLB 会定期请求此接口,返回 200 表示节点健康
app.get('/health', async (req, res) => {
  try {
    // 检查数据库连接
    await db.query('SELECT 1');
    // 检查 Redis 连接
    await redis.ping();

    res.status(200).json({
      status: 'healthy',
      timestamp: new Date().toISOString(),
      uptime: process.uptime()
    });
  } catch (err) {
    res.status(503).json({ status: 'unhealthy', error: err.message });
  }
});
3

Nginx 高性能配置

调整工作进程、连接数、缓存、Gzip,最大化性能

nginx.conf 企业级优化配置

/etc/nginx/nginx.conf
user www-data;
# worker_processes 设为 CPU 核心数
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 10000;  # 每个 worker 最大连接数
    use epoll;                   # Linux 高性能 I/O 模型
    multi_accept on;
}

http {
    # 基础优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 10000;

    # Gzip 压缩
    gzip on;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json
               application/javascript text/xml application/xml;

    # 限流(防刷)
    limit_req_zone $binary_remote_addr zone=api:10m rate=100r/s;
    limit_conn_zone $binary_remote_addr zone=conn:10m;

    # 静态文件缓存(提升性能关键)
    location ~* \.(css|js|png|jpg|gif|ico|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # API 限流
    location /api/ {
        limit_req zone=api burst=200 nodelay;
        limit_conn conn 20;
        proxy_pass http://backend;
    }
}
4

Redis 缓存层配置

缓存热点数据,将数据库压力降低 90%

购买阿里云 Redis(推荐托管版)

  • 控制台 → 云数据库 Redis → 创建实例
  • 版本:Redis 7.0,架构:主从版(高可用)
  • 规格:1GB 起步,按需升配
  • 与 ECS 在同一 VPC,内网连接,延迟 <1ms

缓存策略代码示例(Node.js)

Node.js — Redis 缓存模式
const redis = require('ioredis');
const client = new redis({
  host: '你的Redis内网IP',
  port: 6379,
  password: '你的密码'
});

// Cache-Aside 模式:先查缓存,没有再查数据库
async function getUserById(userId) {
  const cacheKey = `user:${userId}`;

  // 1. 查 Redis
  const cached = await client.get(cacheKey);
  if (cached) {
    return JSON.parse(cached);
  }

  // 2. 查数据库
  const user = await db.query('SELECT * FROM users WHERE id = ?', [userId]);

  // 3. 写入 Redis,设置过期时间 1小时
  await client.setex(cacheKey, 3600, JSON.stringify(user));

  return user;
}

// 更新数据时同步删除缓存
async function updateUser(userId, data) {
  await db.query('UPDATE users SET ? WHERE id = ?', [data, userId]);
  await client.del(`user:${userId}`);  // 清除缓存
}
5

RDS 数据库高可用配置

主从架构,读写分离,自动备份,故障自动切换

RDS 购买配置

  • 控制台 → 云数据库 RDS → 创建实例
  • 数据库类型:MySQL 8.0
  • 系列:高可用版(主备双节点,自动故障切换)
  • 存储:SSD 云盘,按需配置大小
  • 主从复制:自动(阿里云托管,无需手动配置)
  • 备份策略:每天自动备份,保留 7 天

读写分离配置

Node.js — 读写分离
const mysql = require('mysql2/promise');

// 主库:只用于写入
const writePool = mysql.createPool({
  host: '主库内网地址',
  user: 'app_user', password: '密码',
  database: 'myapp',
  connectionLimit: 20
});

// 从库:只用于读取(可配置多个从库)
const readPool = mysql.createPool({
  host: '只读实例内网地址',
  user: 'app_user', password: '密码',
  database: 'myapp',
  connectionLimit: 50   // 从库承担更多连接
});

// 封装:insert/update/delete 走主库,select 走从库
const db = {
  write: (sql, params) => writePool.execute(sql, params),
  read:  (sql, params) => readPool.execute(sql, params),
};
6

弹性伸缩(Auto Scaling)

流量高峰自动增加服务器,低谷自动缩减,节省成本

配置伸缩组

  • 控制台 → 弹性伸缩 ESS → 创建伸缩组
  • 最小实例数:2(保证基础可用性)
  • 最大实例数:按预期峰值设置,如 20
  • 关联 SLB:自动将新机器加入负载均衡
  • 创建伸缩配置:指定 ECS 规格、系统镜像(使用自定义镜像,包含已部署的代码)

伸缩规则配置

触发条件动作冷却时间
CPU 平均使用率 > 70%(持续 5分钟)增加 2 台 ECS300秒
CPU 平均使用率 < 30%(持续 15分钟)减少 1 台 ECS600秒
内存使用率 > 85%增加 2 台 ECS300秒
SLB 活跃连接数 > 10000增加 3 台 ECS180秒

创建自定义镜像(关键步骤)

制作标准化镜像流程
# 1. 在一台基础 ECS 上完成所有环境安装和代码部署
# 2. 创建启动脚本(新机器启动时自动拉取最新代码)
cat > /etc/rc.local << 'EOF'
#!/bin/bash
cd /var/www/myapp
git pull origin main          # 拉取最新代码
npm install --production       # 安装依赖
pm2 start ecosystem.config.js  # 启动服务
EOF
chmod +x /etc/rc.local

# 3. 控制台:ECS → 实例 → 创建自定义镜像
# 4. 弹性伸缩配置中使用此自定义镜像
# 5. 新机器启动约 2-3分钟即可自动加入服务
7

CDN 全球加速

静态资源边缘节点分发,源站带宽降低 80%

CDN 接入配置

  • 控制台 → CDN → 添加域名
  • 加速域名:static.yourdomain.com(静态资源专用子域名)
  • 业务类型:图片小文件 / 大文件下载(按需选择)
  • 源站配置:ECS IP 或 SLB IP
  • 修改 DNS:将 static.yourdomain.com 解析为 CDN 提供的 CNAME

代码中使用 CDN 域名

HTML — 静态资源使用 CDN
<!-- 不要直接引用源站 -->
<img src="/images/logo.png">  <!-- ❌ 走源站 -->

<!-- 使用 CDN 域名,走边缘节点缓存 -->
<img src="https://static.yourdomain.com/images/logo.png">  <!-- ✅ 走CDN -->
<link rel="stylesheet" href="https://static.yourdomain.com/css/app.css">
<script src="https://static.yourdomain.com/js/app.js"></script>
8

监控与告警体系

问题发生前预警,秒级发现异常

基础监控
阿里云云监控
CPU/内存/磁盘/网络,免费内置
应用性能
ARMS / Prometheus
接口响应时间、错误率、QPS
日志分析
阿里云 SLS
集中收集分析所有服务日志
可视化大盘
Grafana
自定义监控面板,实时展示
告警通知
短信/钉钉/PagerDuty
异常立即通知责任人
压力测试
Apache JMeter / k6
上线前进行压力测试验证

关键告警阈值建议

监控指标警告阈值严重阈值通知方式
CPU 使用率70%90%短信 + 钉钉
内存使用率75%90%短信 + 钉钉
磁盘使用率70%85%钉钉
接口错误率1%5%短信 + 电话
接口响应时间>500ms>2000ms短信
数据库连接数80%上限95%上限短信 + 电话

💰 企业级架构费用参考

起步级(2台ECS)
¥800
/月
约 500 QPS
成长级(4台ECS)
¥3000
/月
约 3000 QPS
企业级(8台ECS)
¥10000
/月
约 20000 QPS
弹性伸缩
按需
动态计费
无上限
💡
阿里云包年包月比按量付费便宜约 40–60%。建议先用按量测试,流量稳定后再包月。可申请企业优惠,联系阿里云销售通常可额外打折。

高并发优化核心原则

🚀
缓存优先
Redis 缓存热点数据,减少数据库压力 90%
首先实施
📖
读写分离
读操作走从库,写操作走主库,提升读并发
流量增长时
⚖️
水平扩容
增加 ECS 节点数量,SLB 均匀分发
CPU 持续高位
✂️
服务拆分
高负载模块独立部署,微服务化
单体瓶颈时
📬
异步解耦
消息队列削峰填谷,处理耗时任务
秒杀/大促
🗃️
数据库分库
数据量超亿级时分库分表
数据库瓶颈