node.js có thể mở rộng, điều đó có nghĩa là gì? Phần nào của máy chủ node.js có thể mở rộng được. Tôi đọc rằng nó là một công nghệ đơn luồng không thích hợp cho các ứng dụng cần nhiều tài nguyên CPU. Những sự kiện này không phù hợp với khả năng mở rộng, vậy điều đó có nghĩa là gì?Tại sao Node.js có thể mở rộng?
Trả lời
Nút javascript chạy là luồng đơn, nhưng rất nhiều thứ bạn gọi trong nút - chẳng hạn như mạng hoặc tệp io - chạy trong chủ đề nền. Xem bài đăng này cho một cái nhìn tổng quan cơ bản: Node is not single threaded
Nếu bạn cần các chi tiết gritty, bạn nên xem xét libuv đó là 'ma thuật' mảnh chuyển đổi chủ đề thành sự kiện bẹ: http://nikhilm.github.io/uvbook/basics.html#event-loops
Ngoài ra, nếu bạn cần để làm một cái gì đó CPU chuyên sâu trong nút chính nó, bạn có thể dễ dàng gửi này cho một quá trình con - xem http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options để biết chi tiết
Các hoạt động như đọc từ cơ sở dữ liệu hoặc cập nhật chúng, chặn hoặc không chặn? Đây là w.r.t đến RDBMS. Bạn có đề xuất Nút cho các ứng dụng như vậy không? – LearningToCode
có thể mở rộng do cân bằng tải. Về cơ bản bạn có thể có nhiều công việc cho nút để xử lý và nó có thể xử lý nó mà không có gánh nặng đáng kể. Điều này làm cho nó có thể mở rộng.
Cân bằng tải được thực hiện như thế nào? – vuvu
Đó không phải là khả năng mở rộng hơn "mỗi lần". Tất cả những gì bạn làm là (I/O) có thể mở rộng mà không phải làm gì đặc biệt.
I/O an toàn hơn và dễ dàng hơn để làm song song, vì nó có xu hướng không chia sẻ dữ liệu giữa các chuỗi thực thi. Node.js cho phép bạn làm điều đó bằng cách sử dụng lập trình sự kiện đơn giản, thanh lịch và dễ sử dụng. Là một mô hình lập trình cũ và đã được chứng minh, được sử dụng trong nhiều năm qua GUI và các ứng dụng đồ họa chuyên sâu khác như trò chơi chẳng hạn.
Trên thực tế ít khả năng mở rộng hơn các ngôn ngữ chính thức như C++, c, java, v.v. có thể mở rộng tốt hơn nhiều nhờ sử dụng đa luồng đầy đủ. Điều này cho phép để quy mô CPU quá, nhưng cũng mở ra một thể của sâu. Để chia sẻ CPU, bạn phải chia sẻ dữ liệu và đó là một câu chuyện khác (semaphores, locks, etc ...)
Bạn có thể làm giống như node.js với bất kỳ ngôn ngữ nào ở trên, nhưng không phải là một phần của chính ngôn ngữ đó, vì vậy bạn phải tự cuộn hoặc sử dụng các thư viện cung cấp cho bạn. Điều đó nói rằng, không phải là khó, nhưng chắc chắn khó hơn trong node.js.
Hầu hết các dịch vụ web, đều bị ràng buộc IO, vì vậy Node.js phù hợp tốt và là Ok đối với hầu hết các trường hợp. Nhưng một khi bạn bắt đầu sử dụng CPU làm việc chuyên sâu, các sự kiện không được phục vụ và tất cả các điểm dừng. Trong trường hợp đó, hãy sử dụng ngôn ngữ khác tốt hơn. Không có giải pháp tốt nào ở Node cho điều đó. Bạn có thể sinh ra nhiều quy trình, nhưng sau đó bạn sẽ không thể chia sẻ dữ liệu giữa chúng. Nếu không có dữ liệu chia sẻ, không có cách nào để mở rộng CPU hiệu quả, vì vậy tốt hơn không nên thử.
Sử dụng Node.js cho IO và một số ngôn ngữ phù hợp hơn với đa luồng thích hợp cho công việc chuyên sâu của CPU.
Tất cả các API của nút được viết là cách chúng hỗ trợ gọi lại.
Ví dụ: chức năng đọc tệp có thể bắt đầu đọc tệp và trả về điều khiển cho môi trường thực thi một cách vô cùng để có thể thực hiện lệnh tiếp theo. Khi tệp I/O hoàn tất, nó sẽ gọi hàm gọi lại trong khi truyền hàm gọi lại, nội dung của tệp dưới dạng tham số. Vì vậy, không có ngăn chặn hoặc chờ đợi cho File I/O. Điều này làm cho Node.js có khả năng mở rộng cao, vì nó có thể xử lý số lượng yêu cầu cao mà không cần đợi bất kỳ hàm nào trả về kết quả. - Hướng dẫn của điểm.
- 1. Có thể "mở rộng" IntelliJ sao cho tôi có thể mở tệp hiện tại trong VIM
- 2. Node.js - Expressjs middleware để mở rộng res.render
- 3. Tìm kiếm triển khai "tại" có thể mở rộng
- 4. lý do tại sao thang máy web có thể mở rộng được?
- 5. Tại sao Samsung Galaxy S bỏ qua thẻ meta có thể mở rộng người dùng?
- 6. Tại sao đặc điểm Scala có thể mở rộng một lớp học?
- 7. .tiện ích mở rộng gốc của mạng cho node.js
- 8. Có thể viết phần mở rộng node.js trong C (không phải C++) không?
- 9. Tại sao Joda instants mở rộng loại thô Comparable?
- 10. lý do tại sao mở rộng danh sách python
- 11. Tại sao Vim lưu tệp bằng phần mở rộng ~?
- 12. Tại sao các phần mở rộng JPEG khác nhau?
- 13. Có thể mở rộng Java Enums không?
- 14. Tại sao node.js không thể chạy trên shared hosting?
- 15. Tạo tiện ích mở rộng gốc node.js trên Windows
- 16. Sao chổi có thể mở rộng sao chổi/đảo ngược ajax của khung nâng?
- 17. Tại sao tôi không thể mở rộng túi của mọi người trong nowjs?
- 18. Tại sao tôi không thể "thấy" phương pháp mở rộng enum này?
- 19. Có phải nginx/node.js/postgres là một kiến trúc có khả năng mở rộng không?
- 20. Tại sao cơ sở dữ liệu quan hệ có vấn đề về khả năng mở rộng?
- 21. tại sao tệp tiêu đề STL không có phần mở rộng?
- 22. Tại sao mọi người nói rằng Java có khả năng mở rộng hơn so với python?
- 23. Có biến Emacs để tắt sao lưu các tệp có phần mở rộng cụ thể không?
- 24. Tại sao tôi không thể gán một biến lặp tùy ý cho một lát mở rộng có bước là -1?
- 25. Tại sao MySQL trong Node.js quá chậm?
- 26. Tôi có thể 'mở rộng' một cấu trúc trong C?
- 27. Tại sao PHP không thể trên Windows thấy phần mở rộng php_intl.dll mặc dù nó tồn tại?
- 28. Có thể có phương pháp mở rộng riêng tư không?
- 29. Không thể mở rộng RemoteViews
- 30. Trong Javascript, bạn có thể mở rộng DOM không?
Bản sao của: [Scaling node.js] (http://stackoverflow.com/questions/4710420/scaling-node-js). –
@ Jason Tôi không tìm kiếm các câu trả lời mã hóa kỹ thuật – vuvu
Bài đăng đó làm nổi bật khả năng mở rộng, bao gồm cân bằng tải và redis. –