Giới thiệu về Nginx Cache cho các website sử dụng WordPress

Giới thiệu về Nginx Cache cho các website sử dụng WordPress

Cài đặt 1 website WordPress cơ bản trên hệ thống Linux (CentOS 6)
CloudFlare: CDN bình dân, rẻ và tương đối ngon
AWS Reserved Instance: tiết kiệm 3/4 chi phí cho AWS EC2/RDS

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

  1. Amazon EC2 Instance sử dụng cấu hình m4.large đặt tại Singapore:
    • 2 CPUs
    • 8 GB RAM
    • SSD
    • 450Mbps Network
  2. Nginx 1.10.3
  3. PHP-FPM 5.6.28
  4. MySQL Community Server 5.6.33
  5. WordPress 5.6.1

4. TRIỂN KHAI

  1. 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)
  2. Cài đặt Nginx Cache Controller plugin cho WordPress https://github.com/tuanpm29/nginx-champuru-mobile-detect
  3. 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)
  4. 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

  • Thời gian phản hồi trung bình: 6660 ms
  • Thời gian ngắn nhất: 285 ms
  • Thời gian lâu nhất: 8398 ms
  • Tải CPU cao nhất: 99%
  • RAM sử dụng: 500MB
  • Thời gian phản hồi trung bình: 174 ms
  • Thời gian ngắn nhất: 125 ms
  • Thời gian lâu nhất: 1074 ms
  • Tải CPU cao nhất: 15.41%
  • RAM sử dụng: 5MB
1000 requests,

100 request đồng thời

  • Thời gian phản hồi trung bình: 13373 ms
  • Thời gian ngắn nhất: 4443 ms
  • Thời gian lâu nhất: 34926 ms
  • Tải CPU cao nhất: 100%
  • RAM sử dụng: 500MB
  • Thời gian phản hồi trung bình: 232 ms
  • Thời gian ngắn nhất: 147 ms
  • Thời gian lâu nhất: 931 ms
  • Tải CPU cao nhất: 20.01%
  • RAM sử dụng: 7MB

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.

COMMENTS