Nginx cache được chia sẻ giữa nhiều máy chủ


9

Chúng tôi có 8 máy chủ API REST-ish với Nginx sử dụng FastCGI với PHP-FPM để xử lý các yêu cầu. Chúng tôi hiện đang sử dụng bộ nhớ đệm FastCGI của Nginx (các chỉ thị như fastcgi_cache_path). Điều này có nghĩa là các phản hồi API được lưu trữ, nhưng có một bộ đệm riêng cho mỗi máy chủ.

Có cách nào tốt để chia sẻ bộ nhớ cache giữa tất cả tám máy chủ không?

Chúng tôi đã xem xét sử dụng Redis làm bộ nhớ chia sẻ, nhưng các mô-đun có sẵn dường như yêu cầu thay đổi ứng dụng. Trong một số trường hợp, chúng tôi có thể muốn phản hồi bộ đệm ngoài tầm kiểm soát của chúng tôi (qua HTTP sang API bên ngoài). Lý tưởng nhất là một sự thay thế thả vào cho bộ nhớ đệm tích hợp Nginx của các phản hồi FastCGI và HTTP sẽ có sẵn.


Tại sao bạn không tạo bộ nhớ đệm không phải trên lớp frontend (Nginx), mà là trên lớp phụ trợ (ứng dụng PHP)?
Max Kochubey

@hangover Mình thấy không có lý do gì để phát minh lại bánh xe. Nginx cache hoạt động tốt và nhanh chóng. Nếu chúng ta có thể tránh được chi phí hoạt động thông qua ứng dụng, chúng ta có thể giữ mọi thứ tốt và nhanh chóng. Nginx đáp ứng các yêu cầu được lưu trong bộ nhớ cache cho chúng tôi trong vòng dưới 5 mili giây. Khởi chạy ứng dụng PHP của chúng tôi, ngay cả để nó cung cấp phản hồi được lưu trong bộ nhớ cache, có thể sẽ chậm hơn gấp 10 lần. Bộ nhớ đệm Nginx đang hoạt động tốt cho chúng tôi, chúng tôi chỉ cần phân phối bộ đệm đó giữa nhiều máy chủ.
Brad

1
ok, hơn bạn có thể thử sử dụng mô-đun Nginx SRCache của bên thứ 3 để lưu trữ nội dung được lưu trong bộ nhớ cache trong Memcached od Redis chuyên dụng.
Max Kochubey

1
@Brad Đây là một hacky vì vậy tôi sẽ không đặt nó làm câu trả lời: chúng tôi hiện có một tập lệnh chạy hàng đêm sử dụng rsync giữa các thư mục bộ đệm nginx trên các máy chủ của chúng tôi để cập nhật từng tập tin bộ nhớ cache mới nhất từ ​​tất cả các tập tin khác. Script kết thúc với một khởi động lại nginx duyên dáng và kiểm tra thành công. Như tôi đã nói, đó là hacky, nhưng nó hoạt động với chúng tôi trên một hệ thống thông lượng cao.
mVChr

@mVChr Thú vị. Bạn đã thử chạy rsync hoặc tương tự liên tục? Cuối cùng, tôi đã sử dụng Redis nhưng điều này không cho phép bộ đệm rất lớn do toàn bộ bộ sưu tập Redis phải nằm trong bộ nhớ. 16GB điền nhanh vào ứng dụng của tôi.
Brad

Câu trả lời:


1

Dường như có một bài đăng blog khá mới tại https://www.nginx.com/blog/spl-caches-nginx-plus-cache-cl cluster-part-1 / về vấn đề này. Ví dụ đầu tiên này có thể hữu ích nếu bạn chạy nhiều hơn hai máy chủ bộ đệm nginx.

Đặc biệt là phần thứ hai của bài đăng nghe có vẻ thú vị cho trường hợp sử dụng hiện tại của tôi, nơi tôi muốn tự động thu thập lại các mục đã thay đổi vào bộ nhớ cache của mình.

Nó cũng hoạt động với Phiên bản NGINX mã nguồn mở. Về cơ bản, nó hoạt động bằng cách ủy quyền yêu cầu xếp tầng qua từng Máy chủ NGINX (Nginx-Cache1-> NGinx-Cache2-> Origin-Server) mỗi máy chủ lưu trữ từ thượng nguồn có liên quan và nếu muốn cũng có thể tạo một Cụm HA. https://www.nginx.com/blog/spl-caches-nginx-plus-cache-cl cluster-part-2 /

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.