Node.js có thực sự tăng khả năng mở rộng không?


21

Tôi đã đọc về Sự cố C10K và đặc biệt lưu ý là phần đề cập đến I / O của máy chủ không đồng bộ. http://www.kegel.com/c10k.html#aio

Tôi tin rằng điều này khá nhiều tóm tắt những gì Node.js làm trên máy chủ, bằng cách cho phép các luồng xử lý các yêu cầu của người dùng trong khi dựa vào các ngắt I / O (sự kiện) để thông báo các luồng công việc đã hoàn thành, thay vì luồng xử lý chịu trách nhiệm cho CPU đầy đủ. Chuỗi có thể tiếp tục với những thứ khác (không chặn) và được thông báo khi hoàn thành công việc (ví dụ: tìm thấy tệp hoặc video bị nén).

Điều này sau đó có nghĩa là một luồng 'có sẵn' hơn cho các socket và do đó cho người dùng trên máy chủ.

Sau đó, tôi tìm thấy cái này: http://teddziuba.com/2011/10/st dán-talk-on-event-loops.html

Người viết ở đây tuyên bố rằng mặc dù khung điều khiển sự kiện (luồng bị gián đoạn), có thể giải phóng các luồng, nhưng nó không thực sự làm giảm số lượng công việc mà CPU phải làm! Lý do ở đây là nếu người dùng yêu cầu nén video họ đã tải lên, CPU vẫn phải thực hiện công việc này và sẽ chặn trong khi thực hiện (vì đơn giản, hãy quên việc xử lý song song ở đây - trừ khi bạn biết rõ hơn!).

Tôi là một lập trình viên đơn giản, không phải là quản trị viên máy chủ hay bất cứ thứ gì tương tự. Tôi chỉ muốn biết: Node.js là một món quà từ các vị thần của 'điện toán đám mây' hay nó hoàn toàn là không khí nóng, và sẽ không thực sự tiết kiệm thời gian và / hoặc tiền của các công ty bằng cách cải thiện khả năng mở rộng?

Cảm ơn nhiều.


12
Thứ nhất ted là một troll, thứ hai là node.js dành cho các ứng dụng ràng buộc IO chứ không phải các ứng dụng gắn với CPU. Những gì bạn muốn là sự kết hợp của cả hai. Bất cứ điều gì ràng buộc CPU đều đi vào một luồng / tiến trình mới. Bất cứ điều gì ràng buộc IO đi trong một vòng lặp sự kiện.
Raynos

1
+! Anh chàng đó chắc chắn là một kẻ troll.
Patrick Hughes

Nó phụ thuộc vào những gì bạn so sánh - nếu bạn vẫn sử dụng Apache (vì một số lý do) - thì Node là món quà từ các vị thần, nhưng nếu bạn so sánh nó với Nginx - thì những cải tiến sẽ kém hơn rất nhiều và Node thậm chí còn chậm hơn. (chậm hơn mười lần, 2ms so với 20ms để tạo ra một mặt nạ, NHƯNG trong các thử nghiệm của chúng tôi, Nginx đã cho 504 dưới tải nặng vừa phải và Node cho phản hồi bình thường).
c69

Bây giờ bạn đề cập đến nó, các anh chàng troll rõ ràng là một troll. @ c69 đó là thông tin tốt, cảm ơn rất nhiều.
Alex

Liên kết "nói thẳng về vòng lặp sự kiện" của bạn không còn hoạt động.
Robert Harvey

Câu trả lời:


20

Tất nhiên bất kỳ công việc ràng buộc CPU sẽ sử dụng CPU. Nó sẽ chặn CPU bằng bất kỳ ngôn ngữ hoặc khung nào bạn viết nó.

Node.js rất phù hợp khi bạn có công việc ràng buộc I / O, không bị ràng buộc CPU. Tôi sẽ không làm việc nặng trong Node, mặc dù điều đó có thể được thực hiện. Node.js giải quyết các vấn đề thực tế , không phải là những vấn đề hư cấu hoặc tưởng tượng như máy chủ số Wikipedia . Đó không phải là không khí nóng.


Chỉ cần kiểm tra một số điểm chuẩn và thực sự nó không có vẻ cách nhanh hơn ở các trang phục: zgadzaj.com/... .. Tôi đoán đây là những gì tôi là sau khi ...
Alex

3
@AlexW: Điểm hay về những điểm chuẩn đó là về cơ bản bạn đang phục vụ nội dung tĩnh. Xem phần triệu của tôi một ngày . Quay vòng trình thông dịch PHP cho điều đó là lãng phí. Nhìn vào một cái gì đó như nút tĩnh để phục vụ các thư mục tệp.
Josh K

@AlexW, Chỉ cần nhắc rằng zgadzaj.com/, sử dụng node.js 0.1.103, hiện đã cũ !!
Samyak Bhuta

4

Mặc dù bài báo C10K có phần lỗi thời liên quan đến các chi tiết triển khai, đồng thời dựa trên sự kiện (mô hình lò phản ứng) vẫn ở một số cách vượt trội so với lập lịch ưu tiên. Ví dụ, một mô hình lập lịch ưu tiên có thể lên lịch các luồng trong khi chúng bị chặn IO. Điều này cho phép nút (và các công cụ khác như Máy sự kiện của Ruby và Twisted của Python) sử dụng tốt hơn các chu trình có sẵn bằng cách dành nhiều thời gian hơn để thực hiện công việc thực tế và giảm thời gian chặn.


-1

Đa luồng vẫn tăng hiệu suất. Giải thích ban đầu là ngu ngốc vì nó không xem xét sự tồn tại của nhiều lõi. Thời điểm bạn có nhiều hơn một lõi, chủ đề không có nhiều chủ đề. Họ là những người siêu âm. Bất kỳ ứng dụng chuyên sâu nào cũng sẽ được hưởng lợi từ nó nhiều hơn một ứng dụng luồng đơn.


2
Điều này không thực sự giải thích sự nhiệt thành của Node.JS. Lợi ích chính của Node.JS là khả năng xử lý nhanh chóng và gửi nhiều yêu cầu từ một luồng, không xử lý hiệu quả khối lượng công việc nặng, mà câu trả lời của bạn không giải quyết được.
Robert Harvey

Lợi ích chính của node.js là có một ngôn ngữ duy nhất cho front và backend. Tất cả những tuyên bố khác chỉ là lông tơ để làm cho nó có vẻ quan trọng hơn.
tên gì

2
@whatsisname đồng thời luồng đơn là một lợi ích rất lớn, lớn hơn nhiều so với việc có một ngôn ngữ duy nhất theo quan điểm của tôi.
vui mừng
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.