Có điểm chuẩn hoặc so sánh nào nhanh hơn: đặt nginx trước nút và để nó phân phát tệp tĩnh trực tiếp hay chỉ sử dụng nút và phân phát tệp tĩnh bằng cách sử dụng nó?
giải pháp nginx dường như dễ quản lý hơn đối với tôi, bất kỳ suy nghĩ?
Có điểm chuẩn hoặc so sánh nào nhanh hơn: đặt nginx trước nút và để nó phân phát tệp tĩnh trực tiếp hay chỉ sử dụng nút và phân phát tệp tĩnh bằng cách sử dụng nó?
giải pháp nginx dường như dễ quản lý hơn đối với tôi, bất kỳ suy nghĩ?
Câu trả lời:
Tôi sẽ không đồng ý với câu trả lời ở đây. Mặc dù Node sẽ hoạt động tốt, nhưng nginx chắc chắn sẽ nhanh hơn khi được định cấu hình chính xác. nginx được triển khai hiệu quả trong C theo một mô hình tương tự (chỉ quay lại kết nối khi cần thiết) với một dấu chân bộ nhớ nhỏ. Hơn nữa, nó hỗ trợ syscall sendfile để cung cấp các tệp đó nhanh nhất có thể khi bạn có thể nhận được khi cung cấp tệp, vì chính nhân hệ điều hành đang thực hiện công việc.
Đến nay nginx đã trở thành tiêu chuẩn trên thực tế với tư cách là máy chủ giao diện người dùng. Bạn có thể sử dụng nó cho hiệu suất của nó trong việc cung cấp các tệp tĩnh, gzip, SSL và thậm chí cân bằng tải sau này.
Tái bút: Điều này giả định rằng các tệp thực sự "tĩnh" như ở trạng thái còn lại trên đĩa tại thời điểm yêu cầu.
sendfile
- nhưng có vẻ như bạn phải viết một số mã, xem ví dụ: blog.std.in/2010/09/09/using-sendfile-with-nodejs
Tôi đã nhanh chóng phân ab -n 10000 -c 100
phát một byte tĩnh 1406 favicon.ico
, so sánh nginx, Express.js (phần mềm trung gian tĩnh) và Express.js được phân cụm. Hi vọng điêu nay co ich:
Rất tiếc, tôi không thể kiểm tra 1000 hoặc thậm chí 10000 yêu cầu đồng thời vì nginx, trên máy của tôi, sẽ bắt đầu phát ra lỗi.
CHỈNH SỬA : theo gợi ý của artvolk, đây là kết quả của cluster + static
middleware (chậm hơn):
static
phần mềm trung gian bộ nhớ đệm sẽ làm trong quá trình sản xuất.
Tôi có cách hiểu khác về biểu đồ của @ gremo. Đối với tôi, nó giống như cả quy mô nút và nginx với cùng một số lượng yêu cầu (từ 9-10k). Chắc chắn độ trễ trong phản hồi cho nginx thấp hơn 20ms không đổi, nhưng tôi không nghĩ rằng người dùng nhất thiết sẽ cảm nhận được sự khác biệt đó (nếu ứng dụng của bạn được xây dựng tốt). Với một số lượng máy cố định, sẽ mất một lượng tải đáng kể trước khi tôi chuyển đổi một máy nút thành nginx vì xem nút đó là nơi phần lớn tải sẽ xảy ra ngay từ đầu. Một điểm đối phó với điều này là nếu bạn đã dành một máy cho nginx để cân bằng tải. Nếu đúng như vậy thì bạn cũng có thể để nó phân phát nội dung tĩnh của mình.
Dù bằng cách nào, tôi sẽ thiết lập Nginx để lưu vào bộ đệm các tệp tĩnh ... bạn sẽ thấy sự khác biệt LỚN ở đó. Sau đó, cho dù bạn phân phát chúng từ nút hay không, về cơ bản bạn sẽ nhận được cùng một hiệu suất và cùng một mức giảm tải trên ứng dụng nút của bạn.
Cá nhân tôi không thích ý tưởng giao diện người dùng Nginx của mình phân phát nội dung tĩnh trong hầu hết các trường hợp, trong đó
1) Dự án hiện phải ở trên cùng một máy - hoặc phải được chia thành nội dung (trên máy nginx) & ứng dụng web (trên nhiều máy để mở rộng)
2) Cấu hình Nginx bây giờ phải duy trì vị trí đường dẫn cho nội dung tĩnh / tải lại khi chúng thay đổi.
Đó là một câu hỏi khó trả lời. Nếu bạn đã viết một máy chủ nút thực sự nhẹ để chỉ phục vụ các tệp tĩnh, nó rất có thể sẽ hoạt động tốt hơn nginx, nhưng nó không đơn giản như vậy. ( Đây là "điểm chuẩn" so sánh máy chủ tệp nodejs và lighttpd - có hiệu suất tương tự như ngingx khi cung cấp tệp tĩnh).
Hiệu suất liên quan đến việc cung cấp các tệp tĩnh thường phụ thuộc vào nhiều hơn là chỉ máy chủ web thực hiện công việc. Nếu bạn muốn có hiệu suất cao nhất có thể, bạn sẽ sử dụng CDN để phân phát tệp của mình nhằm giảm độ trễ cho người dùng cuối và hưởng lợi từ bộ nhớ đệm cạnh.
Nếu bạn không lo lắng về điều đó, nút có thể phân phát các tệp tĩnh tốt trong hầu hết các tình huống. Node tự sử dụng mã không đồng bộ, mã này cũng dựa vào vì nó là một luồng đơn và bất kỳ i / o chặn nào cũng có thể chặn toàn bộ quá trình và làm giảm hiệu suất ứng dụng của bạn. Nhiều khả năng bạn đang viết mã của mình theo cách không chặn, nhưng nếu bạn đang thực hiện đồng bộ bất cứ điều gì, bạn có thể gây ra việc chặn, điều này sẽ làm suy giảm tốc độ phục vụ các tệp tĩnh của các khách hàng khác. Giải pháp dễ dàng là không viết mã chặn, nhưng đôi khi đó không phải là một khả năng hoặc bạn không thể luôn thực thi nó.
Tôi chắc chắn rằng node.js thuần túy có thể vượt trội hơn nginx ở nhiều khía cạnh.
Tất cả đều nói rằng tôi phải ở lại NginX có một bộ nhớ cache tích hợp, trong khi node.js không được cài đặt tại nhà máy (BẠN PHẢI XÂY DỰNG FILE CACHE CỦA RIÊNG MÌNH). Bộ đệm tệp tùy chỉnh hoạt động tốt hơn nginx và bất kỳ máy chủ nào khác trên thị trường vì nó siêu đơn giản.
Ngoài ra Nginx cũng chạy trên nhiều lõi. Để sử dụng hết tiềm năng của Node, bạn phải phân cụm các máy chủ nút. Nếu bạn quan tâm để biết làm thế nào thì vui lòng pm.
Bạn cần phải đào sâu để đạt được hiệu suất niết bàn với nút, đó là vấn đề duy nhất. Sau khi hoàn thành, yeah ... nó đánh bại Nginx.