CDN giúp giảm tải origin server như thế nào?
CDN thường được nhắc tới như một giải pháp giúp website tải nhanh hơn, nhưng lợi ích quan trọng không kém là khả năng giảm tải cho origin server. Khi một website có nhiều hình ảnh, CSS, JavaScript, font, file tải xuống hoặc lượng truy cập tăng mạnh theo từng chiến dịch, việc để toàn bộ request quay về máy chủ gốc có thể làm băng thông, số connection và tải hệ thống tăng nhanh.
Trong mô hình có CDN, một phần lớn nội dung có thể được cache tại các edge server. Khi người dùng truy cập lại cùng tài nguyên, CDN trả dữ liệu trực tiếp từ edge thay vì yêu cầu origin xử lý lại. Nhờ đó, máy chủ gốc có thể tập trung tài nguyên cho các request thực sự cần application, database hoặc business logic.
Bài viết này giải thích CDN giảm tải origin server như thế nào, những loại request nào có thể được CDN hấp thụ, cách đo mức giảm tải và các điều kiện cần để CDN thực sự mang lại hiệu quả.
Tóm tắt: CDN giúp giảm tải origin chủ yếu bằng cách cache và phân phối nội dung tại edge. Hiệu quả thực tế phụ thuộc vào cache hit ratio, loại nội dung, TTL, cookie, query string và cách website được cấu hình. CDN không thay thế việc tối ưu backend, database hoặc tài nguyên máy chủ.
Origin server là gì?
Origin server là máy chủ gốc chứa hoặc tạo ra nội dung của website.
Origin có thể là:
- Shared Hosting.
- VPS.
- Cloud Server.
- Dedicated Server.
- Application Server.
- Object Storage.
- Load Balancer phía trước cụm application.
Ví dụ một website WordPress:
Origin Server
|
|-- Nginx / Apache
|-- PHP-FPM
|-- WordPress
|-- MySQL
`-- /wp-content/uploads/
Khi chưa có CDN, mọi request từ người dùng đều có thể quay về origin.
User
|
v
DNS
|
v
Origin Server
Origin phải xử lý cả HTML, hình ảnh, CSS, JavaScript, font, API, file tải xuống và request động. Khi traffic tăng, số lượng request và băng thông origin cũng tăng theo.
CDN đứng ở đâu trong luồng request?
Khi triển khai CDN, luồng truy cập thay đổi:
User
|
v
CDN Edge
|
|-- Cache HIT -> trả nội dung tại edge
|
`-- Cache MISS -> gửi request về Origin
|
v
Origin Server
CDN đứng giữa người dùng và origin.
Nếu tài nguyên đã tồn tại trong cache, origin không cần xử lý request đó. Đây là cơ chế cốt lõi giúp giảm tải máy chủ gốc.
Cache HIT giúp giảm request về origin như thế nào?
Giả sử một file /banner-sale.webp được 10.000 người dùng truy cập trong cùng một khoảng thời gian.
Không có CDN:
10.000 request
|
v
Origin
Origin phải trả file 10.000 lần.
Nếu có CDN và cache hoạt động tốt, request đầu tiên có thể là MISS và phải lấy dữ liệu từ origin. Sau đó CDN lưu file và các request tiếp theo được trả trực tiếp tại edge.
Request đầu tiên -> CDN MISS -> Origin
Request tiếp theo -> CDN HIT -> Edge trả dữ liệu
Khi đó origin chỉ phải xử lý một phần rất nhỏ số request cho cùng tài nguyên.
Đây là lý do các file tĩnh được truy cập nhiều thường là nhóm nội dung đem lại hiệu quả giảm tải rõ nhất.
Những loại nội dung nào giúp CDN giảm tải origin tốt nhất?
CDN phát huy hiệu quả tốt nhất với nội dung có thể cache và được nhiều người dùng truy cập lại.
Các nhóm phổ biến gồm:
- Hình ảnh.
- CSS.
- JavaScript.
- Font.
- Video.
- File PDF.
- File ZIP.
- Tài liệu tải xuống.
- Static HTML.
- Public asset.
Ví dụ:
/wp-content/uploads/product.webp
/assets/app.js
/assets/style.css
/fonts/inter.woff2
/downloads/catalog.pdf
Những nội dung này thường ít thay đổi theo từng người dùng và có thể đặt TTL tương đối dài.
Ngược lại, các request như đăng nhập, checkout, tạo đơn hàng, API cá nhân hóa, request POST hoặc nội dung theo session thường không thể cache công khai theo cách tương tự.
CDN giảm tải băng thông origin
Băng thông là một trong những tài nguyên bị ảnh hưởng rõ nhất.
Giả sử một website có một file ảnh 500 KB.
Nếu file được tải 100.000 lần:
500 KB x 100.000
=
50.000.000 KB
≈ 50 GB
Nếu toàn bộ 50 GB được phục vụ từ origin, máy chủ phải chịu toàn bộ lượng traffic này.
Nếu CDN có cache hit cao, phần lớn dữ liệu được phân phối từ edge. Origin chỉ cần cung cấp file khi cache MISS, cache hết hạn, file mới, CDN bị purge hoặc request bị bypass.
Điều này giúp giảm network throughput trên máy chủ gốc và tránh việc static asset cạnh tranh băng thông với API hoặc request động.
CDN giảm số connection tới origin
Mỗi request trực tiếp tới origin có thể tạo thêm connection hoặc sử dụng một connection đang tồn tại.
Khi số người dùng tăng nhanh:
User 1 -> Origin
User 2 -> Origin
User 3 -> Origin
...
User N -> Origin
Origin phải duy trì lượng connection lớn hơn.
Nếu CDN xử lý phần static asset:
User -> CDN -> Static content
-> Origin chỉ khi cần
Số connection trực tiếp tới origin có thể giảm.
Điều này đặc biệt hữu ích khi hệ thống đang có giới hạn ở Nginx worker connections, Apache worker, TCP connection, file descriptor hoặc upstream connection.
CDN giúp web server bớt xử lý static file
Ngay cả khi phục vụ file tĩnh không tiêu tốn nhiều CPU như chạy PHP hoặc database, web server vẫn phải nhận connection, đọc file, gửi response, ghi access log, duy trì socket và sử dụng bandwidth.
Khi static file được phục vụ từ CDN, các công việc này giảm trên origin.
Ví dụ trước CDN:
Nginx
|
|-- HTML
|-- image.webp
|-- app.js
|-- style.css
`-- font.woff2
Sau CDN:
CDN
|
|-- image.webp
|-- app.js
|-- style.css
`-- font.woff2
Origin
|
`-- HTML / API
Origin có thể tập trung hơn vào request động.
CDN có giúp giảm CPU không?
Có thể, nhưng mức độ phụ thuộc workload.
Nếu origin chủ yếu dùng CPU để xử lý TLS, compression, static delivery hoặc resize ảnh động, CDN có thể giảm một phần CPU.
Nhưng nếu CPU chủ yếu bị sử dụng bởi PHP, Node.js, Java, database query hoặc background job thì CDN không trực tiếp giải quyết toàn bộ.
Ví dụ:
CPU 90%
|
|-- PHP: 70%
|-- Database: 15%
`-- Static request: 5%
Trong trường hợp này, đưa static asset sang CDN có thể không làm CPU giảm nhiều.
Vì vậy cần đo thay vì giả định.
Cache hit ratio quyết định mức giảm tải
Cache hit ratio là chỉ số quan trọng để đánh giá CDN có thực sự giảm tải origin hay không.
Cache Hit Ratio
=
Request trả từ cache
/
Tổng request có thể cache
Ví dụ:
100.000 request có thể cache
90.000 HIT
10.000 MISS
Cache hit ratio là 90%.
Trong mô hình này, chỉ khoảng 10% request cacheable phải quay về origin.
Nếu cache hit chỉ 20%, phần lớn traffic vẫn đi về máy chủ gốc.
Do đó, việc “đã bật CDN” chưa đủ. Cần theo dõi cache hit.
Vì sao CDN đã bật nhưng origin vẫn tải cao?
Có nhiều nguyên nhân.
TTL quá ngắn
Nếu TTL chỉ vài phút, CDN phải thường xuyên lấy lại tài nguyên từ origin.
Với file ít thay đổi như logo, CSS versioned hoặc ảnh sản phẩm, TTL quá ngắn có thể làm giảm hiệu quả cache.
Query string thay đổi
Ví dụ:
image.jpg?v=1
image.jpg?v=2
image.jpg?session=123
Nếu cache key coi đây là các object khác nhau, cache hit có thể giảm.
Cookie khiến CDN bypass
Một số CDN được cấu hình bỏ qua cache khi có cookie.
Nếu website gửi cookie cho mọi request, static asset có thể không được cache như mong đợi.
Cache-Control không phù hợp
Origin có thể trả:
Cache-Control: no-cache
hoặc:
Cache-Control: private
khiến CDN không cache theo chính sách mong muốn.
Purge cache quá thường xuyên
Nếu cache bị purge liên tục:
Purge
|
v
Cache trống
|
v
Nhiều MISS
|
v
Origin tải tăng
Purge toàn bộ cache quá thường xuyên có thể làm origin chịu tải đột biến.
CDN giúp giảm tải trong traffic spike
Traffic spike là tình huống CDN thể hiện giá trị rất rõ.
Ví dụ một landing page đang chạy quảng cáo:
Bình thường:
100 request/phút
Sau campaign:
10.000 request/phút
Nếu landing page có nhiều hình ảnh, CSS và JavaScript, origin sẽ nhận lượng request lớn.
Có CDN:
10.000 người dùng
|
v
CDN
|
|-- Static asset từ cache
|
v
Origin
|
`-- HTML / API / Form
Origin không phải phục vụ toàn bộ static request.
Điều này giúp giảm nguy cơ network saturation, quá nhiều connection hoặc static asset cạnh tranh tài nguyên với backend.
Tuy nhiên, nếu phần lớn traffic là checkout hoặc API động, CDN không thể hấp thụ toàn bộ.
CDN và website WordPress
WordPress có nhiều tài nguyên phù hợp với CDN:
/wp-content/uploads/
/wp-content/themes/
/wp-content/plugins/
/wp-includes/css/
/wp-includes/js/
CDN có thể cache ảnh, CSS, JavaScript, font và một số HTML public.
Origin vẫn xử lý:
/wp-admin/
/wp-login.php
và các request động.
Nếu dùng WooCommerce, cần đặc biệt loại trừ:
/cart/
/checkout/
/my-account/
Ngoài URL, cần kiểm tra cookie đăng nhập và cookie giỏ hàng.
Cache sai có thể làm dữ liệu hiển thị không chính xác.
CDN và website thương mại điện tử
Ecommerce thường có lượng static asset lớn như ảnh sản phẩm, thumbnail, banner, video, CSS và JavaScript.
Nếu một trang sản phẩm tạo 50 request nhưng 40 request là static asset:
50 request
|
|-- 40 CDN cacheable
`-- 10 dynamic
CDN có thể giúp origin tập trung vào 10 request động.
Tuy nhiên, các phần như giá, tồn kho, giỏ hàng, checkout và tài khoản cần xử lý cẩn thận vì có thể thay đổi theo từng người dùng.
CDN kết hợp với Object Storage
Một kiến trúc hiệu quả là dùng Object Storage làm origin cho media và CDN để phân phối.
Application
|
v
Object Storage
|
v
CDN
|
v
User
Khi đó Cloud Server không phải phục vụ trực tiếp hình ảnh hoặc video.
Application tập trung vào metadata, business logic, database và API.
Mô hình này giúp tách compute khỏi storage và delivery, nhờ đó kiến trúc dễ scale hơn.
CDN không thay thế tối ưu backend
Một hiểu nhầm phổ biến là nếu origin tải cao thì chỉ cần bật CDN.
Điều này không đúng khi bottleneck nằm ở database, PHP-FPM, application worker, API bên ngoài, queue, Disk I/O hoặc CPU.
Ví dụ:
User
|
v
CDN
|
v
Origin
|
v
Database query 3 giây
Nếu request không cache được, CDN vẫn phải chờ origin.
Trong trường hợp này cần tối ưu query, index, connection pool hoặc database.
CDN chỉ là một lớp trong kiến trúc hiệu năng.
Cách kiểm tra CDN có đang giảm tải origin hay không
Cần so sánh dữ liệu trước và sau khi triển khai.
Request origin
Theo dõi request mỗi giây hoặc request mỗi phút.
Nếu static asset được CDN cache tốt, số request origin nên giảm.
Bandwidth
Theo dõi Network In và Network Out, đặc biệt là outbound traffic.
Cache hit ratio
Theo dõi dashboard CDN hoặc response header.
Có thể kiểm tra:
curl -I https://example.com/image.webp
Tùy nhà cung cấp, có thể thấy:
HIT
MISS
BYPASS
EXPIRED
CPU và connection
Theo dõi CPU bằng monitoring hoặc:
top
Kiểm tra connection:
ss -s
Nếu traffic người dùng tương đương nhưng connection origin giảm, CDN đang hấp thụ một phần tải.
Đo trước và sau khi triển khai
Nên lập baseline:
| Chỉ số | Trước CDN | Sau CDN |
|---|---|---|
| Request origin | Ghi lại | Đo lại |
| Bandwidth origin | Ghi lại | Đo lại |
| Cache hit ratio | 0% | Đo |
| CPU peak | Ghi lại | Đo lại |
| Connection | Ghi lại | Đo lại |
| TTFB | Ghi lại | Đo lại |
| Error rate | Ghi lại | Đo lại |
Không nên đo hai thời điểm có traffic hoàn toàn khác nhau rồi kết luận.
Cần so sánh trong cùng mức tải hoặc cùng loại campaign nếu có thể.
Cách tăng cache hit để giảm tải origin tốt hơn
Tăng TTL cho file ít thay đổi
Các file có version trong tên thường phù hợp với TTL dài hơn.
Ví dụ:
app.a1b2c3.js
style.a1b2c3.css
Dùng cache busting khi deploy
Thay vì purge toàn bộ cache, có thể đổi tên file khi phát hành phiên bản mới.
app.js
thành:
app.a1b2c3.js
Cache cũ có thể tự hết hạn sau.
Tách static và dynamic
Static -> CDN cache
Dynamic -> Origin
Điều này giúp cache rule rõ ràng hơn.
Hạn chế purge toàn bộ
Ưu tiên purge theo URL hoặc nhóm tài nguyên khi có thể.
Khi nào CDN không giúp giảm tải nhiều?
CDN có thể mang lại hiệu quả thấp nếu website chủ yếu là:
- API private.
- Dashboard đăng nhập.
- Dữ liệu realtime.
- Transaction.
- Request POST.
- Nội dung cá nhân hóa.
- Nội dung thay đổi liên tục.
Nếu gần như mọi request đều cần database xử lý, cache CDN có thể không phù hợp.
Trong trường hợp này, cần tập trung hơn vào application cache, Redis, database, queue, scale out hoặc Load Balancer.
Checklist triển khai CDN để giảm tải origin
Trước khi triển khai
- Đã ghi baseline request origin.
- Đã ghi bandwidth.
- Đã đo CPU.
- Đã đo connection.
- Đã xác định static asset.
- Đã xác định nội dung động.
- Đã backup DNS.
- Đã kiểm tra SSL.
Cấu hình cache
- Ảnh được cache.
- CSS được cache.
- JavaScript được cache.
- Font được cache.
- File tải xuống được cache.
- TTL phù hợp.
- Cache-Control phù hợp.
- Query string được xử lý đúng.
Loại trừ
- Login không bị cache sai.
- Cart không bị cache.
- Checkout không bị cache.
- Request POST không bị cache.
- API private không bị cache.
- Người dùng đăng nhập được xử lý đúng.
Sau khi triển khai
- Kiểm tra cache HIT.
- Kiểm tra cache MISS.
- Kiểm tra bandwidth origin.
- Kiểm tra RPS origin.
- Kiểm tra CPU.
- Kiểm tra error rate.
- Kiểm tra log.
- So sánh trước và sau.
Kết luận
CDN giúp giảm tải origin server bằng cách chuyển một phần việc phân phối nội dung từ máy chủ gốc sang các edge server. Khi tài nguyên đã được cache, request tiếp theo có thể được trả tại edge mà không cần quay về origin.
Hiệu quả rõ nhất thường nằm ở:
Giảm request
+
Giảm bandwidth
+
Giảm connection
+
Giảm static workload
Tuy nhiên, mức giảm tải phụ thuộc trực tiếp vào cache hit ratio và loại workload. Một website nhiều hình ảnh, CSS, JavaScript hoặc file tải xuống thường hưởng lợi nhiều hơn một hệ thống chủ yếu xử lý API động.
Vì vậy, triển khai CDN không nên dừng ở bước thay DNS. Cần tiếp tục theo dõi cache HIT/MISS, TTL, cookie, query string, request origin và băng thông.
Một quy trình phù hợp là:
Đo baseline
->
Phân loại static/dynamic
->
Bật CDN
->
Theo dõi cache hit
->
Đo lại tải origin
->
Tối ưu cache policy
Nếu sau khi CDN hoạt động mà origin vẫn quá tải, cần tiếp tục kiểm tra application, database, CPU, RAM, Disk I/O và kiến trúc scale. CDN giảm một phần tải, nhưng không thay thế toàn bộ công việc tối ưu backend.
All Rights Reserved