7 phút đọc

Xây CMS chịu tải cao bằng Java Spring Boot

Bài học sau khi release nền tảng biên tập của MMP - đường đi của request, pattern truy cập MySQL, và những lớp cache thực sự quan trọng.

  • Java
  • Spring Boot
  • MySQL
  • Architecture

Khi MMP đề nghị thay thế workflow biên tập rời rạc bằng một CMS duy nhất, yêu cầu rất rõ và khắt khe: xử lý dataset biên tập lớn và phục vụ trang public lưu lượng cao mà vẫn giữ trải nghiệm cho biên tập viên. Đây là cách chúng tôi làm.

Bắt đầu từ hình thái traffic

Một CMS hướng tới quy mô biên tập phải được tinh chỉnh theo hình thái traffic, không chỉ theo hình thái dữ liệu. Chúng tôi profile các trang hiện có, tìm ra các route long-tail, và xây kiến trúc xoay quanh đường đi của request trước - mọi thứ khác theo sau.

  • Apache đứng trước mọi request và phục vụ trực tiếp các tài nguyên tĩnh.
  • Spring Boot xử lý workflow biên tập sau một bề mặt REST nhỏ.
  • Query MySQL được tinh chỉnh thủ công, index được chứng minh bằng EXPLAIN ANALYZE.

Cache đúng chỗ

Chúng tôi chỉ chọn đúng hai lớp cache: HTTP-level cache trên Apache cho các trang bài viết đã render đầy đủ, và in-process cache cho trang chủ biên tập. Thêm nữa là rước thêm bug invalidation không cần thiết.

@Cacheable(value = "homePage", key = "#section", unless = "#result == null")
public HomePageView load(String section) {
  return repo.findHomePageBySection(section);
}

Nếu làm lại tôi sẽ

Lần sau tôi sẽ ship hook invalidate cache sớm hơn - chúng tôi mất một sprint để chạy theo các trang cũ sau khi publish CMS. Nối thẳng publish event vào cache eviction ngay từ đầu sẽ tiết kiệm rất nhiều thời gian.

← Về danh sách blog