Home Knowledge base Skyline Cloud 如何为高流量扩展网站 KNOWLEDGE BASE

如何为高流量扩展网站

一份实用的分步指南,教你如何为高流量扩展网站——涵盖缓存、负载均衡、数据库调优、CDN 和自动扩缩——并附上可直接复制粘贴、在天际云(Skyline Cloud)境内基础设施上运行的配置。

如何为高流量扩展网站

一份实用的分步指南,教你如何为高流量扩展网站——涵盖缓存、负载均衡、数据库调优、CDN 和自动扩缩——并附上可直接复制粘贴、在天际云(Skyline Cloud)境内基础设施上运行的配置。

网站为何会在高负载下崩溃

当一个站点在活动上线、限时抢购或突发走红期间慢得像爬行时,原因几乎总是某一项资源被打满:CPU 长时间维持在 100%、数据库打开的连接过多,或是网络链路因传输未压缩的图片而被占满。扩展正是这样一门学问:找到那个瓶颈、移除它,并为下一个瓶颈预留出余量。

本指南将按照你应当处理的先后顺序,逐层讲解为高流量扩展网站的实用方法。这些技术与平台无关,但这里的每一条命令和配置,你今天都可以在天际云(Skyline Cloud)的 VPS 或云服务器上直接运行,你的数据驻留在沙特境内,PDPL/NCA 合规问题也由我们替你处理。

第 1 步:扩展之前,先测量

切勿盲目优化。先建立一个基线,这样你才知道"足够快"意味着什么,以及时间都花在了哪里。

使用 k6 从另一台独立机器运行负载测试:

# install on Ubuntu/Debian
sudo apt-get install -y gnupg ca-certificates
curl -s https://dl.k6.io/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/k6-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update && sudo apt-get install -y k6
// load.js — ramp to 200 virtual users over 3 minutes
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '1m', target: 50 },
    { duration: '1m', target: 200 },
    { duration: '1m', target: 0 },
  ],
};

export default function () {
  const res = http.get('https://example.com/');
  check(res, { 'status is 200': (r) => r.status === 200 });
  sleep(1);
}

k6 run load.js 运行它,并观察 http_req_duration 和错误率。在服务器上,保持 htopiostat -x 2 以及数据库的慢查询日志处于打开状态。最先被打满的那项资源就是你的瓶颈——去修它,而不是凭猜测下手。

第 2 步:积极缓存——杠杆率最高的胜手

大多数以读为主的站点,绝大部分请求都可以在完全不触及应用或数据库的情况下完成响应。

页面缓存与对象缓存。 在 WordPress 上,以 Redis 为后端的对象缓存能消除重复的数据库查询。安装 Redis 与 Redis Object Cache 插件:

sudo apt-get install -y redis-server php-redis
sudo systemctl enable --now redis-server

wp-config.php 中添加:

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );

在应用边缘进行 HTTP 缓存。 设置 Cache-Control 响应头,让浏览器和任何下游缓存都能复用响应。在 Nginx 中,对静态资源进行强缓存,同时让 HTML 进行重新验证:

location ~* \.(jpg|jpeg|png|webp|css|js|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

一个配置得当的缓存层通常能把源站负载削减 70–90%。在你掏钱买更大的服务器之前,先把这件事做好。

第 3 步:榨干现有资源(纵向扩展)

纵向扩展——更多的 CPU、内存以及更快的 NVMe 磁盘——是最简单的一招,往往也是正确的第一步。在天际云(Skyline Cloud)上,你可以在几分钟内调整 VPS 的规格。但同时也要对软件进行调优:

  • PHP-FPM:pm.max_children 设置为 (可供 PHP 使用的内存) / (单个进程的平均大小)。可用 ps --no-headers -o "rss" -C php-fpm8.2 | awk '{s+=$1} END {print s/NR/1024" MB"}' 查看进程大小。
  • MySQL/MariaDB: 在专用数据库主机上,将 innodb_buffer_pool_size 设为内存的大约 60–70%,使工作集驻留在内存中。
  • 连接: 添加一个连接池。PostgreSQL 使用 pgbouncer;MySQL 则保持持久连接短暂且设上限。

第 4 步:用负载均衡器横向扩展(横向扩展)

单台服务器存在上限。要走得更远,就在一个负载均衡器后面运行多台完全相同的应用服务器。这同时也提升了韧性:如果一个节点宕机,流量会转移到其他节点。

一份最小化的 Nginx 负载均衡配置:

upstream app_backend {
    least_conn;
    server 10.10.0.11:80 max_fails=3 fail_timeout=10s;
    server 10.10.0.12:80 max_fails=3 fail_timeout=10s;
    server 10.10.0.13:80 max_fails=3 fail_timeout=10s;
}

server {
    listen 443 ssl;
    server_name example.com;
    location / {
        proxy_pass http://app_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

要让这套方案奏效,你的应用必须是无状态的:将会话存储在 Redis 或数据库中,而非本地磁盘;并将用户上传的文件保存在共享对象存储里,而非某一台服务器的文件系统中。一旦请求可以安全地落到任意节点上,你就能自由地增减节点。

第 5 步:扩展数据库(通常才是真正的瓶颈)

应用服务器很容易克隆;数据库则不然。请按以下顺序使用这些技术:

技术 解决什么问题 取舍
索引与查询调优 单条查询缓慢 需要分析(EXPLAIN
读副本 以读为主的负载 应用需将读、写分流
缓存层(Redis) 重复读取 缓存失效逻辑
分片 超大规模下以写为主 复杂度很高

先对最慢的查询执行 EXPLAIN,并补上缺失的索引——这往往是以近乎零成本换来 10 倍提升的胜手。然后添加读副本:把 SELECT 流量指向一个或多个副本,而将 INSERT/UPDATE/DELETE 发往主库。只有当单个主库确实无法吞下写入量时,才动用分片。

第 6 步:在前面放一个 CDN

CDN 会在靠近用户的边缘节点上缓存静态资源——并且越来越多地缓存整页内容。对于海湾合作委员会(GCC)地区的受众而言,从就近的边缘节点提供图片、CSS 和 JavaScript,能降低延迟,并为源站卸下巨量带宽。把你的 CDN 指向源站,然后让动态的、个性化的路由(购物车、结账、账户)保持不缓存,或按用户分别缓存。

第 7 步:用自动扩缩实现自动化

最后一层是让扩展自动发生。定义一个扩缩组:当平均 CPU 持续五分钟超过比如 65% 时就增加应用节点,负载下降时则移除节点。再在负载均衡器上配合健康检查,让不健康的节点被自动移出轮转。这样你在流量峰值时能保持迅捷,在闲时则保持精简——这正是云的核心经济优势。

一个合理的扩展顺序

  1. 测量并找出真正的瓶颈。
  2. 缓存(对象缓存、HTTP 缓存、CDN)。
  3. 纵向扩展并对软件进行调优。
  4. 在负载均衡器后面对应用层进行横向扩展。
  5. 用索引、读副本,再到分片来扩展数据库。
  6. 用自动扩缩实现自动化。

每一步都为你买来余量;跳过缓存、直接奔向第 4 步,只会让一个更大、更贵的集群去做本可避免的工作。

在天际云(Skyline Cloud)上运行

以上所有内容都运行在标准 Linux 之上,因此完全可移植。天际云(Skyline Cloud)带来的差异在于"本地":你的数据驻留在沙特阿拉伯境内,满足 PDPL、NCA 和 SDAIA 合规要求,你能获得讲阿拉伯语的支持,并可按需调整 VPS 实例规格或添加负载均衡节点。在云主机页面了解该平台,在沙特阿拉伯云主机专题中浏览更多指南;如果你需要为同一域名提供可靠的商务邮箱托管,这一点同样为你考虑到了。

准备好打造一个在最繁忙的一天也能从容不迫、不喘一口气的系统了吗?立即创建你的天际云(Skyline Cloud)账户,在几分钟内启动你的第一台可扩展服务器。

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.