Ra mắt plugin Hybrid Object Cache độc quyền dành cho khách hàng sử dụng WordPress Hosting.
Như các bạn đã biết, cách đây khoảng hơn 1 tháng, chúng tôi đã ra mắt plugin APCu Object Cache độc quyền tại WP Căn bản mang tên WPCB APCu Cache Manager. Ưu điểm của plugin này là sử dụng bộ nhớ RAM để cache các truy vấn database nên cho tốc độ truy xuất rất nhanh. Tuy nhiên, nó có 2 nhược điểm chí mạng khiến chúng tôi phải loại bỏ sau một thời gian triển khai. Một là dung lượng cache bị giới hạn ở 32MB (chia sẻ chung cho tất cả các website trên cùng một host) khiến nó nhanh chóng bị đầy. Hai là dữ liệu được lưu trên RAM nên không có tính bền bỉ, thường xuyên bị xóa khiến hệ thống mất thời gian nạp lại cache từ đầu. Trong một số trường hợp tệ hơn, plugin thậm chí khiến người dùng không thể đăng nhập được vào WordPress Admin vì hệ thống bị treo trong quá trình nạp lại một lượng cache quá lớn.
Không nản chí trước khó khăn, với quyết tâm và đam mê sẵn có, sau nhiều ngày nghiên cứu, chúng tôi đã tìm ra giải pháp cho vấn đề. Đó là kết hợp APCu (cache trên RAM) với một tiện ích khác là SQLite (cache trên ổ đĩa cứng) để tạo ra hệ thống lai có 3 lớp cache. Nó vừa sở hữu tốc độ của RAM vừa có sự bền bỉ của ổ đĩa cứng, một giải pháp hoàn hảo. Plugin mới được đặt tên là WPCB Hybrid Cache Manager.
Tham khảo thêm:
- Hướng dẫn thiết lập Object Cache trên plugin LiteSpeed Cache
- Hướng dẫn sử dụng OpCode Cache với plugin LiteSpeed Cache
Giới thiệu về Hybrid Object Cache
WPCB Hybrid Cache Manager không chỉ là một plugin cache thông thường. Nó được thiết kế như một drop-in thay thế hoàn toàn cho hệ thống bộ nhớ đệm đối tượng (Object Cache) mặc định của WordPress. Mục tiêu của nó là giải quyết hai vấn đề lớn: hiệu suất truy vấn và tính bền bỉ của dữ liệu cache.
Kiến trúc cache phân tầng
Điểm cốt lõi của plugin là kiến trúc cache 3 lớp, được định nghĩa trong tệp includes/object-cache.php
. Mỗi lớp có một vai trò và tốc độ khác nhau, tạo nên một hệ thống lai cân bằng giữa hiệu suất và sự ổn định.
Lớp 1: Local cache (bộ nhớ đệm cục bộ)
- Cơ chế: là một mảng (array) trong PHP (
$this->local_cache
). - Đặc điểm: tốc độ truy xuất nhanh nhất vì nó nằm trực tiếp trong bộ nhớ của tiến trình PHP đang chạy. Tuy nhiên, dữ liệu này chỉ tồn tại trong một truy vấn (request) duy nhất và sẽ bị hủy ngay khi request kết thúc.
- Mục đích: giảm thiểu việc truy cập lặp đi lặp lại vào cùng một đối tượng trong cùng một lần tải trang. Ví dụ, nếu một tùy chọn (option) được gọi 10 lần trong một request, nó sẽ chỉ được lấy từ APCu hoặc SQLite một lần, 9 lần còn lại sẽ được lấy từ local cache. Các chỉ số
local_hits
vàlocal_misses
dùng để theo dõi hiệu quả của lớp này.
Lớp 2: APCu cache (bộ nhớ đệm chia sẻ)
- Cơ chế: sử dụng tiện ích mở rộng APCu của PHP.
- Đặc điểm: đây là bộ nhớ đệm chia sẻ (shared memory), có nghĩa là tất cả các tiến trình PHP trên host đều có thể truy cập chung vào vùng nhớ này. Tốc độ rất nhanh, chỉ sau local cache. Dữ liệu sẽ mất khi máy chủ khởi động lại (restart) hoặc dịch vụ PHP được restart.
- Mục đích: tăng tốc cho các request khác nhau. Khi một người dùng truy cập trang và tạo ra cache, những người dùng sau đó có thể tái sử dụng ngay lập tức mà không cần truy vấn SQLite hay cơ sở dữ liệu chính.
Lớp 3: SQLite cache (bộ nhớ đệm bền bỉ)
- Cơ chế: là một tệp cơ sở dữ liệu SQLite duy nhất (mặc định là
wp-content/object-cache.db
). - Đặc điểm: tốc độ chậm hơn so với cache trong bộ nhớ nhưng dữ liệu có tính bền bỉ (persistent), tức là không bị mất khi máy chủ khởi động lại. Plugin sử dụng
PRAGMA journal_mode = WAL;
để tối ưu hóa cho các tác vụ đọc/ ghi đồng thời. - Mục đích: đây là lớp phòng thủ cuối cùng. Nó đảm bảo rằng ngay cả khi APCu cache trống (ví dụ sau khi khởi động lại), trang web vẫn có một lớp cache mạnh mẽ để sử dụng, giúp “làm ấm” lại APCu cache một cách nhanh chóng và tránh việc truy vấn trực tiếp vào cơ sở dữ liệu MySQL.
Luồng hoạt động của cache
Được mô tả đơn giản và dễ hiểu thông qua sơ đồ dưới đây:
Khi lấy dữ liệu (wp_cache_get
)
Luồng hoạt động được thiết kế để ưu tiên tốc độ:
1. Tìm trong local cache: nếu tìm thấy (local_hits
), trả về ngay lập tức.
2. Tìm trong APCu cache: nếu không có trong local cache (local_misses
), tìm trong APCu. Nếu thấy (apcu_hits
), lưu vào local cache rồi trả về.
3. Tìm trong SQLite cache: nếu không có trong APCu (apcu_misses
), tìm trong SQLite.
4. Xử lý dữ liệu “cũ” (stale cache) và chống cache stampede:
- Nếu dữ liệu trong SQLite đã hết hạn (
is_stale
), plugin sẽ không chờ để tạo mới. Thay vào đó, nó sẽ cố gắng đặt một khóa (lock) ngắn hạn trong APCu. - Nếu đặt khóa thành công, request này sẽ chịu trách nhiệm tạo cache mới.
- Nếu đặt khóa thất bại (nghĩa là một request khác đang tạo cache mới), request hiện tại sẽ phục vụ dữ liệu cũ (
stale_hits
) để đảm bảo người dùng không phải chờ đợi. Đây là một kỹ thuật quan trọng để chống lại hiện tượng “cache stampede” (dogpiling), khi nhiều request cùng lúc cố gắng tạo lại một cache đã hết hạn.
5. Nếu tìm thấy dữ liệu hợp lệ trong SQLite (sqlite_hits
), nó sẽ được lưu vào local cache và APCu cache, sau đó trả về.
6. Nếu không tìm thấy ở bất cứ đâu (sqlite_misses
), hàm sẽ trả về false
.
Khi lưu dữ liệu (wp_cache_set
)
Dữ liệu sẽ được ghi đồng thời vào các lớp cache:
1. Lưu vào local cache.
2. Lưu vào APCu cache với một TTL (Time-to-live) được tính toán (ví dụ 1 giờ).
3. Lưu vào SQLite cache với một TTL dài hơn (mặc định tối đa 7 ngày) để đảm bảo tính bền bỉ.
Cơ chế xóa cache thông minh
Đây là một trong những tính năng nổi bật nhất, được định nghĩa trong includes/wpcb-cache-hooks.php
. Thay vì gọi wp_cache_flush()
(xóa toàn bộ cache) trong mọi trường hợp, plugin chỉ nhắm đến những phần cache cần thiết. Ví dụ:
- Khi một bài viết được cập nhật (
save_post
): chỉ cache của bài viết đó (clean_post_cache
) bị xóa. - Khi một danh mục (
term
) được sửa (edit_term
): chỉ cache của danh mục đó (clean_term_cache
) bị xóa. - Khi một tùy chọn được cập nhật (
updated_option
): chỉ cache của tùy chọn đó (wp_cache_delete(..., 'options')
) bị xóa. - Khi vai trò người dùng, theme hoặc plugin thay đổi: plugin sẽ chỉ xóa nhóm cache options (
wp_cache_flush_group('options')
) vì những hành động này thường ảnh hưởng đến các tùy chọn toàn cục, thay vì xóa tất cả mọi thứ.
Cách tiếp cận này giúp giữ lại phần lớn cache, duy trì hiệu suất cao cho trang web ngay cả khi có các hoạt động chỉnh sửa thường xuyên.
Quản lý và bảo trì
Plugin thực hiện nhiều tác vụ nền để đảm bảo hệ thống hoạt động trơn tru.
Kích hoạt và gỡ bỏ (activate
/ deactivate
)
- Khi kích hoạt, plugin sẽ kiểm tra các yêu cầu hệ thống (APCu, SQLite3, quyền ghi
wp-content
), sao chép tệpobject-cache.php
vào thư mụcwp-content
và lên lịch cho các tác vụ cron. - Khi vô hiệu hóa, nó sẽ xóa tệp
object-cache.php
(nếu do chính nó tạo ra) và hủy các tác vụ cron đã lên lịch. Tập tin cơ sở dữ liệuobject-cache.db
không bị xóa để người dùng có thể giữ lại cache nếu muốn.
Tác vụ cron tự động
wpcb_hybrid_prune_event
(hàng giờ): chạy lệnhDELETE FROM cache WHERE expires <= time()
để dọn dẹp các mục đã hết hạn trong SQLite.wpcb_hybrid_vacuum_event
(hàng ngày): chạy lệnhVACUUM
trên tệp SQLite để tối ưu hóa kích thước tệp và chống phân mảnh.
Giao diện quản trị
- Nút Xóa Hybrid Cache trên Admin Bar: cung cấp một cách nhanh chóng để xóa toàn bộ cache (APCu và SQLite) khi cần thiết.
- Widget thống kê: hiển thị chi tiết các chỉ số
hits
,misses
,stale_hits
, cũng như thông tin về bộ nhớ APCu và kích thước tệp SQLite, giúp quản trị viên đánh giá được hiệu quả của hệ thống cache.
Cập nhật tự động
Plugin được tích hợp sẵn tính năng cập nhật tự động, cho phép các bạn có thể cập nhật phiên bản mới một cách dễ dàng ngay khi nó phát hành.
Hiệu quả thực tế của WPCB Hybrid Cache Manager
Ở đây, chúng tôi đã dùng loader.io để tiến hành một bài test về khả năng chịu tải của website khi có và không có plugin WPCB Hybrid Cache Manager. Website được dùng để test là bộ mã nguồn demo của theme Paradise chạy trên gói CP Nano dịch vụ WordPress Hosting do WP Căn bản cung cấp. Bộ mã nguồn và môi trường test bao gồm:
- WordPress 6.8.1 mới nhất.
- 7 plugin đi kèm theo theme, tất cả đều đã được cập nhật lên phiên bản mới nhất.
- Host sử dụng PHP 8.3 và không cài đặt bất cứ plugin page cache nào khác.
Kết quả thử nghiệm cho thấy:
- Khi không có plugin WPCB Hybrid Cache Manager, website chịu được tối đa 245 người truy cập trong vòng 1 phút mà không bị lỗi. Nếu nâng lên mức 250 người truy cập trong vòng 1 phút thì sẽ xuất hiện lỗi 500.
- Khi có plugin WPCB Hybrid Cache Manager, website chịu được tối đa 270 người truy cập trong vòng 1 phút mà không bị lỗi. Nếu nâng lên mức 275 người truy cập trong vòng 1 phút thì sẽ xuất hiện lỗi 500.
Như vậy, chỉ riêng WPCB Hybrid Cache Manager đã giúp website thử nghiệm tăng thêm hơn 10% khả năng chịu tải. Một con số rất đáng kể phải không nào? Nếu kết hợp với các plugin tạo page cache khác, chẳng hạn như LiteSpeed Cache thì hiệu quả sẽ tăng lên rất nhiều.
Làm sao để cài đặt WPCB Hybrid Cache Manager?
Đây là plugin độc quyền và hiện tại chúng tôi chỉ triển khai cho các website đang sử dụng dịch vụ WordPress Hosting do WP Căn bản cung cấp. Nó sẽ có mặt trong dịch vụ tối ưu WordPress miễn phí.
Số lượng website được hỗ trợ cài đặt tùy theo gói host mà bạn đã mua. Cụ thể:
- Nano: 1 website
- Mini: 2 website
- Small: 3 website
- Medium: 4 website
- Large: 5 website
- Special: 6 website
Bạn muốn sở hữu plugin này trên website của mình? Hãy liên hệ ngay với chúng tôi nhé.
Nếu bạn thích bài viết này, hãy theo dõi blog của tôi để thường xuyên cập nhật những bài viết hay nhất, mới nhất. Cảm ơn rất nhiều. :)
Web của mình có nên cài không bạn Hiếu nhỉ?
Nên chứ. Mình cài cả 3 web cho bạn rồi mà? 😅
Ơ đúng rồi nhỉ, cảm ơn bạn Hiếu nhé. Đúng là WP Căn Bản dịch vụ No1! :D