On WordPress Scaling and Performance, The Zillow Way

Bài tóm tắt Zillow 2012 2. Tăng trưởng Độ khó: Dễ

Zillow · 2012 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc

Bối cảnh

  • Sản phẩm Premier Agent Websites (website cho môi giới) dựng trên lõi WordPress, tự host, chỉ dùng tối thiểu plugin ngoài vì lý do bảo mật; mục tiêu chạy hàng chục tới hàng trăm nghìn site trên một nền tảng chung (2012).
  • Toàn bộ hạ tầng trên AWS.

Thay đổi chính

  • DNS: domain của khách và domain CDN host trên Route 53, quản lý qua API và UI riêng.
  • Hai tầng cache: một nhóm server Varnish tự autoscale đứng trước; mỗi site được gán cho một server Varnish, và khi site đổi gì thì xoá cả domain khỏi server đó. Varnish bỏ hết cookie để tăng tỉ lệ hit; hai tính năng cần cookie (bài viết có mật khẩu, tự điền bình luận) được làm lại bằng query string hoặc bỏ. Tầng sau là Memcached cho các request lọt qua Varnish, và code riêng cũng gọi wp_cache_*.
  • App server PHP autoscale theo tải.
  • Chia DB theo khách: plugin HyperDB + thư viện Flexihash, consistent hashing (MD5) chọn DB server cho từng khách, để thêm server mới chỉ phải dời một phần nhỏ khách.
  • mod_pagespeed tự minify, gộp request và viết lại URL tài nguyên tĩnh sang CloudFront với cache 1 năm, nên app server chỉ còn phục vụ PHP.
  • File người dùng lưu thẳng lên S3, URL viết lại sang nhiều hostname CloudFront; tên file chứa hash nội dung và header cache 10 năm, nên sửa ảnh thì URL đổi và trình duyệt thấy ngay.

Vì sao

Bài học cho SWE

  • Invalidation thô (xoá cả domain) chấp nhận được khi đơn vị cache nhỏ và lần ghi hiếm.
  • Tên file theo hash nội dung biến bài toán invalidation CDN thành bài toán đặt tên: cache vĩnh viễn, đổi nội dung thì đổi URL.
  • Gỡ tính năng phụ thuộc cookie khỏi đường cache thay vì để cookie phá tỉ lệ hit.

Liên quan