1. GIỚI THIỆU
Nginx Cache là một tính năng của Nginx giúp giảm thời gian phản hồi và giảm tải cho server. Khi có 1 request có URI http://text.relipasoft.com, Nginx sẽ cache lại nội dung được sinh ra sau đó sẽ sử dụng nội dung đó để trả về cho người dùng mà không thông qua php nữa; giúp tiết kiệm RAM, CPU cycle và những tài nguyên cần thiết để sinh ra nội dung.
2. GIẢ THIẾT
Giả sử rằng ta có 1 website tin tức sử dụng WordPress, Nginx, PHP-FPM, MySQL được cài đặt trên cùng 1 instance (server).
Tại mọi thời điểm, có 200 lượt truy cập đồng thời vào website. Đến giờ cao điểm số truy cập tăng lên 1000 lượt gây ra chậm và đôi lúc làm sập server.
Nguyên gây là do phải phục vụ 1 số lượng lớn request nên PHP-FPM và MySQL đã chiếm 1 lượng lớn CPU cycle (99% load average) và RAM. CPU không còn free cycles nên không thể phục vụ hết được tất cả request dẫn tới việc phản hồi chậm tới user. RAM trống rất ít không đủ để cung cấp cho MySQL dẫn tới việc MySQL daemon bị crash, dẫn tới toàn bộ website ngừng hoạt động.
Do đây là 1 website tin tức nên nội dung ở từng page không thay đổi nhiều nên ta có thể áp dụng cache trong trường hợp này.
3. MÔI TRƯỜNG
-
Amazon EC2 Instance sử dụng cấu hình m4.large đặt tại Singapore:
- 2 CPUs
- 8 GB RAM
- SSD
- 450Mbps Network
- Nginx 1.10.3
- PHP-FPM 5.6.28
- MySQL Community Server 5.6.33
- WordPress 5.6.1
4. TRIỂN KHAI
- Cấu hình Nginx với template config lấy từ https://github.com/tuanpm29/nginx-config-for-cache (Config này đã được cài đặt để sử dụng Nginx Cache)
- Cài đặt Nginx Cache Controller plugin cho WordPress https://github.com/tuanpm29/nginx-champuru-mobile-detect
- Cấu hình lại Cache Directory về ‘/var/cache/nginx/proxy_cache’ cho plugin (Tương ứng với đường dẫn lưu cache trong cấu hình nginx của amimoto)
- Sử dụng Apache Benchmark để đo độ hiệu quả
(Nginx Controller Plugin là 1 plugin của WordPress giúp các admin có thể thực hiện các thao tác xoá cache cho 1 hoặc nhiều URL bằng tay)
5. BẢNG KẾT QUẢ
Không sử dụng Nginx Cache |
Sử dụng Nginx Cache |
|
1000 requests,
50 request đồng thời |
|
|
1000 requests,
100 request đồng thời |
|
|
6. KẾT LUẬN
Dựa vào bảng kết quả ta có thể thấy rõ sự khác biệt giữa việc sử dụng Cache và không sử dụng Cache. Thời gian phản hồi nhanh gấp 40~50 lần so với việc không sử dụng Cache, mang đến trải nghiệm người dùng tốt hơn. CPU và RAM đều được sử dụng hiệu quả hơn rất nhiều, chịu tải được rất cao và chi phí scale nhỏ.
Với các hệ thống có nội dung không thay đổi nhiều và thường xuyên như các hệ thống tin tức, CMS, … Kĩ thuật Cache mang lại hiệu quả rất lớn và tiết kiệm rất nhiều chi phí.
Tuy nhiên, đối với các hệ thống mà nội dung có sự thay đổi và liên tục, Cache không phải là kĩ thuật hiệu quả. Ngược lại nó làm tăng chi phí của hệ thống lên do phải chịu thêm tải thêm và xoá cache. Do vậy nên cân nhắc trước khi áp dụng kĩ thuật này.