Scaling Website Với Netihot VPS 2026: Từ 100 Đến 100K Traffic Mỗi Ngày

📅 06/2026 · ⏱ 9 phút đọc · 🏷 Netihot · Scaling

Website bạn đang tăng traffic? Tuyệt! Nhưng VPS 80K/tháng chỉ chịu được ~500 user đồng thời. Khi traffic vượt ngưỡng, site bắt đầu lag, timeout, thậm chí sập. Đừng đợi đến lúc đó mới scaling. Bài này hướng dẫn lộ trình mở rộng hệ thống trên Netihot VPS — từ 1 VPS nhỏ đến hệ thống multi-server chịu 100K traffic/ngày.

📈 Bài học từ thực tế: Một site WordPress bán hàng trên Netihot VPS 2GB RAM chạy ổn ở 200 user/ngày. Khi chạy quảng cáo Tết, traffic tăng lên 5000 user/ngày → site sập liên tục. Sau khi áp dụng đúng scaling strategy: lên 8GB RAM + Redis + Cloudflare → chịu 50K/ngày mượt mà.

1. Các Mức Traffic & Chiến Lược Scaling Tương Ứng

Mức Traffic/NgàyUser Đồng ThờiChiến LượcChi Phí/Tháng
100 - 1.0005-501 VPS 2GB RAM, LEMP stack cơ bản80K-150K
1.000 - 10.00050-2001 VPS 4GB RAM + Redis cache + Cloudflare CDN200K-400K
10.000 - 50.000200-1.0001 VPS 8-16GB RAM + Redis + CDN + tối ưu DB500K-1.5M
50.000 - 100.0001.000-3.0002+ VPS (web + DB riêng) + Load Balancer2M-5M
100.000+3.000+Multi-server + Auto-scaling + DB replication5M-15M+

2. Giai Đoạn 1: Vertical Scaling — Nâng Cấp VPS Đơn

Vertical scaling là cách đơn giản nhất: tăng RAM, CPU, ổ cứng cho VPS hiện tại. Netihot cho phép nâng cấp gói VPS linh hoạt mà không cần migrate code.

# Trước khi nâng cấp: kiểm tra bottleneck
# Check RAM usage
free -h

# Check CPU load
top -bn1 | head -5

# Check MySQL slow queries
mysql -e "SHOW VARIABLES LIKE 'slow_query_log';"
mysql -e "SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 5;"

# Check ổ cứng
df -h
iostat -x 1 3
⚠️ Giới hạn của Vertical Scaling: VPS đơn chỉ scale được đến một mức nhất định (thường 16-32 CPU, 64-128GB RAM). Khi vượt ngưỡng này, bạn buộc phải chuyển sang horizontal scaling.

3. Giai Đoạn 2: Tách Database Ra VPS Riêng

Khi web app và database chung một VPS, chúng cạnh tranh RAM và I/O. Tách DB ra VPS riêng là bước đầu của horizontal scaling:

# Trên VPS DB (Netihot VPS 4GB RAM trở lên)
# Cài MySQL 8.0
sudo apt install mysql-server -y
sudo mysql_secure_installation

# Tạo user cho web server kết nối từ xa
sudo mysql -e "
CREATE USER 'webapp'@'WEB_SERVER_IP' IDENTIFIED BY 'StrongPassword2026!';
GRANT ALL PRIVILEGES ON webapp_db.* TO 'webapp'@'WEB_SERVER_IP';
FLUSH PRIVILEGES;
"

# Bind MySQL ra network nội bộ
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address = 0.0.0.0  (hoặc IP private)

sudo systemctl restart mysql

# Trên VPS Web: sửa config app trỏ sang VPS DB
# Ví dụ WordPress wp-config.php:
define('DB_HOST', 'PRIVATE_IP_VPS_DB');

4. Giai Đoạn 3: Load Balancer + Multi Web Server

Dùng HAProxy hoặc Nginx làm load balancer, phân phối traffic đều qua nhiều VPS web:

4.1. Cài HAProxy Trên VPS Load Balancer

# Cài HAProxy
sudo apt install haproxy -y

# Cấu hình
sudo nano /etc/haproxy/haproxy.cfg

frontend http_front
    bind *:80
    bind *:443 ssl crt /etc/ssl/mcdhot.pem
    redirect scheme https if !{ ssl_fc }
    default_backend web_backends

backend web_backends
    balance roundrobin
    option httpchk GET /health.php
    server web1 10.0.1.10:80 check
    server web2 10.0.1.11:80 check
    server web3 10.0.1.12:80 check

sudo systemctl restart haproxy

4.2. Đồng Bộ File Giữa Các Web Server

# Dùng rsync + cron hoặc lsyncd
# Cài lsyncd trên VPS master
sudo apt install lsyncd -y

sudo nano /etc/lsyncd/lsyncd.conf.lua
settings {
    logfile = "/var/log/lsyncd.log",
    statusFile = "/var/log/lsyncd-status.log"
}
sync {
    default.rsync,
    source = "/var/www/html/",
    target = "10.0.1.11:/var/www/html/",
    delay = 2,
    rsync = {
        archive = true, compress = true, verbose = true,
        rsh = "/usr/bin/ssh -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no"
    }
}

sudo systemctl start lsyncd

5. Tối Ưu Hiệu Năng Cho Netihot VPS

5.1. Redis Cache (Giảm 80% DB Query)

# Cài Redis
sudo apt install redis-server -y

# WordPress: cài plugin Redis Object Cache
# Laravel: config/cache.php → driver = redis
# Custom PHP:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'page:home';
if ($redis->exists($cacheKey)) {
    echo $redis->get($cacheKey);
} else {
    ob_start();
    // render page...
    $html = ob_get_clean();
    $redis->setex($cacheKey, 300, $html); // cache 5 phút
    echo $html;
}

5.2. Cloudflare CDN + WAF

# 1. Trỏ DNS về Cloudflare
# 2. Bật proxy (orange cloud)
# 3. Cấu hình Page Rules:
#    - Cache Everything cho static files (*.jpg, *.css, *.js)
#    - Edge Cache TTL: 1 tháng
# 4. Bật WAF: block SQL injection, XSS, DDoS

5.3. Nginx Micro-caching

# /etc/nginx/sites-available/mysite
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
    set $skip_cache 0;
    if ($request_method = POST) { set $skip_cache 1; }
    if ($query_string != "") { set $skip_cache 1; }

    location ~ \.php$ {
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 10m;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
    }
}

6. So Sánh Chi Phí Scaling: Netihot vs Cloud Lớn

Giải PhápCấu HìnhGiá/ThángPhù Hợp Traffic
Netihot VPS đơn4 CPU, 4GB RAM, NVMe~200K1K-10K/ngày
Netihot VPS mạnh8 CPU, 16GB RAM, NVMe~800K-1.2M10K-50K/ngày
Netihot 2 VPS (web+DB)2x 4GB RAM~400K-600K20K-80K/ngày
Netihot cluster (LB+3 web+DB)5 VPS~2M-4M100K-500K/ngày
AWS EC2 + RDS + ALBt3.medium x3 + db.t4g.medium~$150-300 (3.7M-7.5M)Tương đương
💰 Lợi thế Netihot: Cùng traffic, chi phí Netihot chỉ bằng 1/3 - 1/5 so với AWS/GCP. Không có hidden cost (bandwidth, I/O request). Phù hợp startup Việt và doanh nghiệp vừa.

7. Database Scaling: MySQL Replication Cho Reads

Khi database là bottleneck (thường xảy ra ở ~80K user), tách read/write là giải pháp:

# === TRÊN VPS DB MASTER (Write) ===
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = myapp_db
expire_logs_days = 7
max_binlog_size = 100M

sudo systemctl restart mysql

# Tạo replication user
sudo mysql -e "
CREATE USER 'repl'@'SLAVE_IP' IDENTIFIED BY 'ReplPass2026!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'SLAVE_IP';
FLUSH PRIVILEGES;
"

# Lấy vị trí binary log
sudo mysql -e "SHOW MASTER STATUS\G"
# Ghi nhớ: File (mysql-bin.000001), Position (1234)

# === TRÊN VPS DB SLAVE (Read) ===
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 2
read_only = 1

sudo systemctl restart mysql

sudo mysql -e "
CHANGE MASTER TO
  MASTER_HOST='MASTER_IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='ReplPass2026!',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=1234;
START SLAVE;
SHOW SLAVE STATUS\G
"

# === TRONG APP: Read từ Slave, Write vào Master ===
# Laravel example:
# config/database.php
'mysql' => [
    'read' => ['host' => 'SLAVE_IP'],
    'write' => ['host' => 'MASTER_IP'],
    ...
]

8. Auto-Scaling Trigger — Khi Nào Cần Thêm Server?

Cài đặt script đơn giản để tự động alert khi cần scale:

#!/bin/bash
# /usr/local/bin/scale-check.sh
# Chạy qua cron mỗi 5 phút

CPU_THRESHOLD=80
RAM_THRESHOLD=85
LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1 | xargs)
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
RAM=$(free | grep Mem | awk '{printf "%.0f", $3/$2*100}')

ALERT=0
[ $(echo "$CPU > $CPU_THRESHOLD" | bc) -eq 1 ] && ALERT=1
[ $RAM -gt $RAM_THRESHOLD ] && ALERT=1

if [ $ALERT -eq 1 ]; then
  curl -s -X POST "https://api.telegram.org/botYOUR_TOKEN/sendMessage" \
    -d "chat_id=YOUR_CHAT_ID" \
    -d "text=⚠️ Scale Alert! CPU: ${CPU}%, RAM: ${RAM}%, Load: ${LOAD}"
fi

# Crontab: */5 * * * * /usr/local/bin/scale-check.sh
Rule of thumb: Khi CPU >80% liên tục 10 phút → vertical scale (tăng RAM/CPU). Khi CPU >80% SAU KHI đã vertical scale tối đa → horizontal scale (thêm server). Đừng scale quá sớm — lãng phí tiền.

9. Checklist Scaling — Làm Gì Trước Khi Traffic Tăng Đột Biến

  1. Tách DB riêng — DB là bottleneck số 1, tách sớm đỡ đau đầu
  2. Bật Redis — cache page, session, query results
  3. CDN cho static assets — Cloudflare free đủ cho 90% nhu cầu
  4. Tăng swap file — ít nhất 4GB để chống OOM kill
  5. Monitoring — cài Prometheus + Grafana để biết khi nào cần scale
  6. Backup tự động — trước khi scale luôn backup, lỡ có rollback
  7. Auto-scaling script — script tự động add web server khi CPU > 80%

🚀 Sẵn Sàng Cho Đợt Traffic Tiếp Theo?

Bắt đầu với Netihot VPS từ 80K/tháng. Nâng cấp linh hoạt khi traffic tăng — không mất công migrate.

Thuê VPS Netihot Ngay →

Xem thêm: