Phục vụ các tệp tĩnh với nginx qua NFS?


9

Tôi có một trang web nhận được khoảng 7k yêu cầu mỗi giây trên máy chủ nginx. Máy chủ này vừa xử lý ghi lại vào máy chủ Apache cũng như phục vụ trực tiếp các tệp tĩnh, hình ảnh, v.v. Các tệp tĩnh là phần lớn nhất trong đó với khoảng 5k yêu cầu.

Với nâng cấp kiến ​​trúc, tôi nghĩ về việc sử dụng máy chủ tệp trung tâm xuất thư mục chứa các tệp tĩnh này qua NFS. Sẽ không có quyền ghi vào các tệp này, vì vậy thư mục có thể được gắn ở chế độ chỉ đọc trên máy nginx. Mối quan tâm chính của tôi là:

NFS có đủ nhanh cho việc này không? Có giới hạn về số lượng yêu cầu NFS có thể xử lý không? Có một số tùy chọn "phải có" khi đi theo cách này?

Phần thưởng: có những lựa chọn thay thế khác cho thiết lập này ngoài NFS không?

Cảm ơn!


Không có quyền truy cập đọc, hoặc "chỉ" truy cập đọc?
pauseka

Cảm ơn! Chỉ truy cập đọc, không có quyền truy cập ghi.
j0nes

2
7k yêu cầu một giây là ~ 6.048,00.000 yêu cầu mỗi ngày, nếu bạn đang chạy nó trên một máy chủ NGINX, chúng tôi (Và các công ty sử dụng cụm máy chủ cho một nửa tải đó) rất muốn biết thiết lập của bạn.
Smudge

Câu trả lời:


2

Bằng cách thiết lập một máy chủ NFS trung tâm, bạn đưa ra một điểm thất bại duy nhất vào thiết kế của mình. Điều đó một mình nên là một breaker thỏa thuận. Nếu không, NFS có thể đủ nhanh để tải như thế này. Các yếu tố quan trọng sẽ có đủ RAM để lưu trữ tệp, kết nối độ trễ thấp (Gig-E hoặc tốt hơn) và điều chỉnh (ít hơn so với trước đây).

Bạn cũng nên cân nhắc mạnh mẽ việc sử dụng rsync hoặc một công cụ tương tự để giữ các bản sao cục bộ của các bản cập nhật tệp tĩnh trên mỗi máy chủ web riêng lẻ. Một tùy chọn khác có thể là giải pháp máy chủ SAN hoặc NFS dự phòng (cả hai đều sẽ phức tạp và tốn kém hơn nhiều so với ý tưởng rsync).


2
NFS không phải là SPoF
gWaldo

@gWaldo Làm thế nào chính xác bạn có thể thiết lập "máy chủ NFS trung tâm" và nó không phải là SPoF?
Chris S

Bạn làm điều đó bằng cách nhận ra rằng, như bạn đã nói, một máy chủ NFS trung tâm là SPoF, và thay vào đó chọn thực hiện một cụm NFS. Tôi thực sự không đồng ý với bạn ....
gWaldo

Cảm ơn - chấp nhận giải pháp này vì tôi nghĩ rằng tôi sẽ đi theo con đường rsync, tránh những điểm thất bại duy nhất (đó là mối quan tâm chính của tôi).
j0nes

Thật đơn giản để thực hiện một máy chủ NFS sao chép kép có tính sẵn sàng cao sử dụng GlusterFS và CTDB. Về mặt hiệu suất, cụm của tôi đã nhận được khoảng 10 nghìn yêu cầu mỗi giây và nó cũng rất ổn. Vấn đề duy nhất là các máy chủ NFS sẽ cần rất nhiều RAM.
Alpha01

2

Tôi sử dụng bộ đệm ẩn (và một nhân linux gần đây, với bộ đệm) để lưu các tệp NFS vào HD cục bộ. Bằng cách này, mọi lần đọc trong nfs sẽ sao chép tệp vào thư mục / var / cache / fs và các lần đọc tiếp theo sẽ được gửi từ đó, với nhân kiểm tra trong nfs nếu nội dung vẫn hợp lệ.

Bằng cách này, bạn có thể có một NFS trung tâm, nhưng không làm mất hiệu suất của các tệp cục bộ

Cachefilesd sẽ đảm nhiệm việc dọn dẹp các tệp cũ khi kích thước / nút miễn phí đạt đến mức được định cấu hình, do đó bạn có thể phục vụ dữ liệu không phổ biến từ NFS và các yêu cầu phổ biến từ HD

Tất nhiên, cũng sử dụng một vecni để lưu trữ các yêu cầu phổ biến hơn và lưu nginx / NFS khỏi phục vụ sau đó.

Đây là một cache nhỏ


1

Tốc độ phụ thuộc vào nhiều yếu tố:

  • Làm thế nào các máy chủ của bạn sẽ được kết nối với mục tiêu NFS? Một đĩa đơn cổng kép có thể sử dụng tốc độ truyền 6gbit / s. Hãy ghi nhớ điều này nếu bạn dự định sử dụng Ethernet 1gig (bạn có thể trừ đi 20% chi phí TCP từ đó).
  • Máy chủ NFS sẽ lấy loại bộ đệm nào? Bạn có đang sử dụng bộ điều khiển mảng cấp doanh nghiệp với nhiều bộ đệm không? Đọc bộ nhớ cache là chìa khóa trong thiết lập này
  • Có bao nhiêu máy chủ sẽ truy cập cùng một tệp? Khóa NFS có thể làm tổn thương - rất tệ

Giới hạn của các tệp đang mở thông qua NFS là một giới hạn của hệ điều hành máy chủ. Ví dụ, FreeBSD có nhiều tùy chọn điều chỉnh khác nhau để hỗ trợ một số lượng lớn tệp đang mở, nhưng nó phụ thuộc vào dung lượng RAM trong máy chủ của bạn.

Một thay thế cho một máy chủ tệp trung tâm là sử dụng đồng bộ hóa / sao chép giữa các máy chủ web của bạn (như Chris S gợi ý). rsync hoặc DRBD có thể là một lựa chọn tuyệt vời và hiệu quả về chi phí.


1

Tôi sẽ khuyên chống lại NFS trừ khi bạn đặt một số bộ đệm vào đó. Bộ đệm nginx tốt hơn không có gì, nhưng Varnish tốt hơn.

Như đã nói, nếu tải của bạn thay đổi thành nội dung động hơn tĩnh, thì việc phục vụ các tệp ứng dụng từ đĩa cục bộ sẽ trở nên quan trọng hơn.

Nếu bạn đặt NFS vào, hãy chắc chắn rằng bạn có dự phòng.


Điều này có thể đòi hỏi một chút thay đổi kiến ​​trúc. Ngoài việc sử dụng lớp bộ đệm như Varnish, bạn cũng nên sử dụng thiết lập CDN kéo gốc cho tất cả các tệp tĩnh sẽ có trên chia sẻ NFS. Điều này sẽ làm giảm tải khi nhấn vào phụ trợ NFS.
Alpha01
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.