Sử dụng máy chủ Node.js, tôi tự hỏi nếu có thể và được khuyến nghị gửi phản hồi HTTP từ quy trình công nhân được ủy nhiệm, thay vì quy trình chính. Các quy trình công nhân này có thể là các máy chủ Node.js, hoặc đơn giản là các tiến trình con Node.js giao tiếp thông qua IPC."Phản hồi trực tiếp với Node.js" - Gửi phản hồi HTTP với quy trình Node.js khác (khác với quy trình chính)
Tôi không nghĩ rằng mô-đun lõi cụm https://nodejs.org/api/cluster.html có thể làm những gì tôi muốn làm, bởi vì trong mô hình đó, tất cả công nhân đang lắng nghe trên cùng một cổng và xử lý tất cả yêu cầu thay mặt cho quy trình tổng thể. Những gì tôi đang tìm kiếm là một quá trình Node.js chính đáp ứng tất cả các yêu cầu HTTP, có thể thực hiện xác thực và xử lý một số yêu cầu, nhưng cũng có khả năng ủy nhiệm các yêu cầu chuyên sâu về dữ liệu hoặc CPU tới một nhóm công nhân.
Hãy tưởng tượng rằng chúng tôi có yêu cầu GET cho một lượng lớn dữ liệu, giả sử 2-3MB.
Chúng tôi có ít nhất 3 tình huống có thể:
- Quá trình chính nhận được yêu cầu, yêu cầu các cơ sở dữ liệu cho số lượng lớn các dữ liệu và sau đó gửi dữ liệu trở lại để người yêu cầu.
- Quá trình chính nhận yêu cầu, gửi một số dữ liệu đến quy trình công nhân sử dụng IPC, nhân viên lấy dữ liệu từ DB thực hiện một số thao tác nặng và sau đó nhân viên sử dụng IPC để gửi tất cả 3MB dữ liệu trở lại quy trình, sau đó gửi lại phản hồi.
- Quy trình chính nhận được yêu cầu, gửi lượng thông tin nhỏ nhất có thể về luồng yêu cầu tới công nhân, công nhân thực hiện tất cả công việc và nhân viên gửi trả lời HTTP.
Tôi đặc biệt tò mò về việc làm # 3 có thể.
Một mô tả đơn giản của kịch bản 3 là dưới đây:
(Chỉ cần được rõ ràng, tôi không muốn 3 câu trả lời cho một yêu cầu, tôi chỉ cố gắng để chứng minh rằng một nhân viên có thể có thể gửi phản hồi thay mặt cho quá trình chính).
Bất kỳ ai biết cách này có thể hoạt động với Node.js như thế nào? Làm thế nào nó có thể làm việc trong các ngôn ngữ khác? Thông thường tôi không có vấn đề với mô hình đồng thời Node.js, nhưng với một số loại dữ liệu, sử dụng mô-đun Cluster có lẽ không phải là cách tốt nhất để đạt được mức đồng thời cao nhất.
Tôi tin rằng một cụm từ cho mô hình này là "phản hồi trực tiếp", nghĩa là người lao động phản hồi trực tiếp yêu cầu. Và có lẽ nó có thể chỉ đơn giản là sử dụng mô-đun lõi cluster https://nodejs.org/api/cluster.html cho việc này.
Tôi đã có một ý tưởng tương tự cách đây không lâu nhưng sau khi tìm kiếm rộng rãi, tôi đã sử dụng nginx như một bộ cân bằng tải giống như những gì bạn đang cố gắng đạt được với điều này nhưng không quay lên toàn bộ ứng dụng. Tôi cũng muốn biết về giải pháp này nếu có ai có. – shriek
chắc chắn, cảm ơn, tôi nghĩ cluster.setupMaster có thể làm những gì tôi muốn, nhưng tôi không chắc chắn, xem: https://nodejs.org/api/cluster.html#cluster_cluster_setupmaster_settings –
ví dụ, xem câu trả lời được chấp nhận tại đây: http://stackoverflow.com/questions/23771516/using-cluster-in-a-node-module/24463511#comment59142347_24463511 –