2013-07-30 42 views
6

Tôi muốn thiết lập 4 trường hợp node.js khác nhau, mỗi trường hợp trên lõi của chính chúng. Liệu node.js có thu thập các cá thể mới trên cùng một lõi hay đặt chúng trên các lõi mới không?Nhiều phiên bản của node.js trên các lõi khác nhau

Các trường hợp không liên quan và nhận yêu cầu riêng lẻ. Tôi muốn tải cpu trải đều. Tôi không thể tìm thấy câu trả lời cuối cùng cho câu hỏi này.

+0

bạn pls thể thêm một số chi tiết của kịch bản mà bạn muốn đạt được? –

+0

@VivekBajpai Tôi có 4 máy chủ nodejs chạy mãi mãi, vào những thời điểm cao nhất mà mỗi người có thể gặp phải tải nặng, tôi nghĩ rằng việc họ cài đặt từng lõi của họ sẽ giúp ích vào thời gian cao điểm. – GameDevGuru

+0

Bạn có đang chạy nó bên trong một máy chủ ảo như EC2 hay các máy chủ chuyên dụng không? –

Trả lời

7

Nói chung, hệ thống sẽ cố gắng thực hiện điều này, để tối đa hóa việc sử dụng CPU. Tuy nhiên nếu bạn muốn nhắm mục tiêu một CPU cụ thể, bạn nên kiểm tra TaskSet. Nó đặt mối quan hệ của quá trình.

Ngoài ra còn có một số câu hỏi hữu ích thảo luận cùng một chủ đề. Có một cái nhìn.

  1. Upstart: each process on different core Nodejs

  2. Node.js - targeting a cpu core

  3. Node.js on multi-core machines

  4. In AmazonEC2 cpu core and nodejs

  5. How to deploy Node.js in cloud for high availability using multi-core

  6. Multi node modlue to utilize cpu

Ngoài ra còn có một mô-đun, Cluster, mà cũng có thể rất hữu ích cho việc sử dụng CPU. Nó cho phép bạn chia rẽ nhiều quy trình để phân phối tải tới nhiều lõi.


CẬP NHẬT


Cuối cùng, tôi đã triển khai một cái gì đó tương tự theo OP.


Trường hợp 1.


  1. Tôi có một sever chuyên dụng với 8 lõi của CPU.
  2. Tôi đã triển khai một chuỗi nút duy nhất và sử dụng mô-đun Cụm để chia sẻ tải công việc (Như được mô tả bởi pl47ypus PS: cảm ơn câu trả lời của anh ấy).
  3. Kết quả là tốt, nhưng một số lần các chủ đề con có thể trở nên không phản hồi, Vì vậy, tôi đã quyết định thử quá trình cũ, mà tôi đã sử dụng trong ứng dụng trước đây của tôi.

Trường hợp 2.


  1. Cùng máy chủ, tôi đã triển khai 8 quy trình Node.js với cổng khác nhau.
  2. Sau đó, tôi đặt nginx trước mặt, lắng nghe cổng 80 với quy trình công nhân 8.
  3. Kết quả tốt nhất so với trường hợp 1 và cũng rất dễ cấu hình nginx, ổn định nhất.

Tôi cũng khuyên bạn chỉ nên thử một số giải pháp được đề cập và tiếp tục theo dõi hệ thống của bạn trong từng trường hợp; như CPU, sử dụng bộ nhớ và io. Cuối cùng, từ các thử nghiệm của bạn, bạn sẽ thấy giải pháp tốt nhất cho trường hợp sử dụng của bạn. Mỗi ứng dụng đều có các yêu cầu riêng, vì vậy tốt hơn hết là nên thử và tìm thấy những gì các ứng dụng của bạn thực sự cần.

0

thử điều này:

var cluster = require('cluster') 
    , numCPUs = require('os').cpus().length; 

if(cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('exit', function(worker, code, signal) { 
    console.log('worker ' + worker.pid + ' died'); 
    }); 

    return; 
} 

hoàn chỉnh đang here

cũng, nhìn here

+1

có u đọc câu hỏi của nó không hỏi làm thế nào để làm đa luồng trong nodejs của nó yêu cầu làm thế nào để chạy khác nhau quá trình nút dụ trên core.So khác nhau là nó hữu ích để sử dụng cluster? –

+0

đây là một trích dẫn từ tài liệu api nodejs "Mô-đun cụm cho phép bạn dễ dàng tạo một mạng lưới các quá trình mà tất cả các cổng máy chủ chia sẻ." bạn có muốn truy cập tất cả các tiến trình thông qua cùng một cổng không? (http://nodejs.org/api/cluster.html#cluster_cluster) – pl47ypus

+0

Đầu tiên của tất cả các mô-đun cụm là thử nghiệm thứ hai trong phần đầu của doc http://nodejs.org/api/cluster.html#cluster_cluster đề cập rõ ràng "Một ví dụ duy nhất của Node chạy trong một luồng duy nhất. Để tận dụng lợi thế của các hệ thống đa lõi, người dùng đôi khi sẽ muốn khởi chạy một cụm các quy trình Node để xử lý tải" Vì vậy, hãy đọc mọi thứ rõ ràng ". Ví dụ của quá trình tương tự để cân bằng tải " –