Hosting WordPress, Cách Scale Up WordPress

Bài toán Hosting WordPress cho website có lượng truy cập lớn luôn là những vấn đề nan giản về infrastructure cho WordPress. Do đó bài viết này mình sẽ hướng dẫn các anh em cách mở rộng website được xây dựng bởi WordPress, với lượng truy cập lớn.

Dưới đây là một cái hình mình vô tình lượm được đâu đó cũng không nhớ nữa ???, mô tả về cách mở rộng WordPress bằng cách sử dụng một số service của AWS

hosting wordpress on aws
infrastructure scaling WordPress cho website với lượng truy cập lớn

Về cơ bản có khá nhiều cách để triển khai một cơ sở hạ tầng đủ tốt cho những website WordPress có lượng truy cập lớn. Trong bài viết này mình sẽ đề cập cách mà mình biết để giúp các anh em trong vấn đề scaling Hosting WordPress cho website của mình.

Sơ đồ Infrastructure Hosting WordPress

Dưới đây là sơ đồ tổng quan về cơ sở hạ tầng dùng để scaling Hosting WordPress. Cách này có phần hơi giống như cái hình đầu tiên mà mình đã đề cập nhưng có phần thay đổi một xíu để nó đơn giản và dễ hiểu hơn.

hosting wordpress infrastructure
Hosting WordPress infrastructure cho website WordPress có lượng truy cập lớn

Bình thường thì mình thấy các anh em luôn setup Web Server, Database Server, Storage vào chung một Sharing Hosting. Khi mà lượng truy cập lớn mà với một Server nhỏ để handle tất cả như vậy nó sẽ dẫn đến tình trạng quá tải.

Nên ý tưởng ở đây chúng ta sẽ phân tách các Service ra từng phần riêng biệt (chia để trị) và dùng thêm caching để giải quyết vấn đề quá tải trên.

Mình sẽ đi qua chi tiết giải thích tại sao lại sử dụng từng service một và cuối cùng là Flow của sơ đồ trên.

Amazon CloudFront

Các resource như CSS, HTML hoặc JS chúng ta sẽ lưu trữ trên Amazon CloudFront và dịch vụ này sẽ giúp caching các tài nguyên giảm tải cho việc gửi request đến Server. Các anh em có thể dùng Assets Pull Addon để lưu các tài nguyên này lên Amazon CloudFront cho website WordPress của mình.

Elastic Load Balancer

Mục đích chúng ta là cần có một hệ thống chịu tải và scale up dễ dàng do đó ở đây mình sẽ dùng 2 WordPress Instance để thay phiên nhau xử lí các request cho User. Để điều hướng được request chúng ta cần phải có một Load Balancer để điều hướng.

Đó là lý do mình đề cập Elastic Load Balancer ở đây.

Auto Scaling

Là một service hữu ích của AWS, nhằm cho một trong 2 WordPress Instance chết nó sẽ tự động tạo ra 2 instance mới và tự động chuyển request người dùng tới 2 instance mới đó.

WordPress Instance

Ở đây các anh em có thể sử dụng AWS EC2 cài Nginx Web Server và bỏ source code WordPress vào đây.

Bình thường mình sẽ push WordPress code lên github, dùng Docker để setup môi trường trên con EC2 và sau đó pull code về trong container trong EC2.

Ở đây mình có 2 instance nghĩa nó là hai instance này đều giống y chang nhau.

Cách anh em có thể tham khảo thêm về cách setup WordPress bằng Docker qua bài viết này của mình:

https://hungphamdevweb.com/docker-config-docker-tren-wordpress.html

S3 Bucket

Về hình ảnh cho website WordPress chúng ta sẽ lưu trên S3 Bucket của AWS, nhất là những website có nhiều hình ảnh và việc lưu cùng một nơi chung với web resource không phải là ý tưởng tốt. Với việc dùng S3 Bucket nó sẽ giúp chúng ta dễ dàng di chuyển web resource hơn.

MariaDB Instance

WordPress dùng cơ sở dữ liệu là MySQL nhưng các anh em có thể dùng MariaDB thay thế cũng được vì nó sẽ tăng được một tí Performance.

Ở đây mình sẽ tách DB Server ra một Instance riêng. Lợi ích của việc tách DB Server ra riêng là để dễ upgrade, quản lý.

Varnish Cache Instance

Như mình nói caching sẽ giảm tải cho Web Server đi khá nhiều nên chúng ta sẽ có thêm một Server Caching nằm ở giữa Load Balancer và WordPress Instance.

Các anh em có thể dùng Memcache thay cho Varnish cũng được. Nhưng mình đề nghị dùng Varnish vì nó dễ cấu hình và cũng support cho WordPress khá tốt. Còn việc tại sao Varnish tốt cho WordPress mình sẽ nói trong một bài viết khác.

Flow của sơ đồ

Sau khi đã nắm được chi tiết mục đích của các service rồi, chúng ta sẽ tìm hiểu về Flow của sơ đồ trên.

Khi có một user gửi request đến Server, CloudFront sẽ có nhiệm vụ checking nếu lần đầu nó sẽ gọi tới website để lấy HTML, CSS, JS nhưng nếu user đã từng truy cập website nó sẽ trả về Cache.

Nếu User là lần đầu truy cập thì nó sẽ bỏ qua CloudFront và đi thẳng tới Elastic Load Balancer và Load Balancer sẽ có nhiệm vụ điều hướng tới một trong hai WordPress Instance.

Giả sử có 1000 user truy cập cùng lúc thì Load Balancer sẽ chia 500 user cho WordPress Instance thứ 1 và số user còn lại sẽ gọi đến WordPress Instance thứ 2.

Khi một request gửi đến WordPress Instance, thì bản thân nó sẽ tự động check với Varnish Cache Instance, nếu đó là lần đầu thì nó sẽ tự thực thi request còn không nó sẽ tự lấy Cache từ Varnish để trả về User.

Mỗi khi WordPress Instance thực thi nó sẽ gọi đến S3 Bucket để lấy ảnh về thay vì load ảnh bên trong Intance của nó và sẽ gọi đến MariaDB Instance để query dữ liệu.

WordPress Instance chỉ việc thực hiện nhiệm vụ duy nhất là thực thi PHP Script, ảnh sẽ do S3 đảm nhận và content sẽ do MariaDB phụ trách.

Ưu điểm

  • Giảm tải công việc bằng việc phân tách các service bằng nhiều Instance khác nhau xử lí
  • Dễ dàng upgrade và monitor cách service
  • Dễ dàng scale cơ sở hạ tầng
  • Website có tốc độ phản hồi nhanh
  • Website có khả năng đáp ứng lượng truy cập lớn
  • Giảm thiểu khả năng sập website

Nhược điểm

  • Sử dụng nhiều Service sẽ tốn chi phí
  • Phải cần có kiến thức về AWS và DevOps để quản lý
  • Mất một khoảng thời gian để setup cơ hạ tầng
  • Phụ thuộc vào AWS, mất thời gian để chuyển cơ sở hạ tầng qua Service Provider khác

Kết luận

Việc áp dụng cơ sở hạ tầng như sơ đồ ở trên sẽ giải quyết được vấn đề Hosting WordPress trong trường hợp website có lượng truy cập ngày càng lớn. Giảm thiểu khả năng thiệt hại bị DDOS hoặc quá tải cho Server. Tăng khả năng bảo trì và Monitor (sử dụng Newrelic để theo dõi ) các service riêng biệt cho một website.

Leave a Reply