2012-11-13 39 views
5

Theo như tôi hiểu, một máy chủ Node.js về cơ bản là một tệp JavaScript, được chạy bởi thực thi node. Có thể cập nhật tệp này mà không ngừng xử lý yêu cầu không?Làm cách nào để cập nhật các máy chủ Node.js đang chạy?

Tôi đoán việc thực thi nút phải được dừng cho điều này, vì vậy tôi nghĩ tôi nên sử dụng proxy ngược. Ví dụ:

  1. phiên bản máy chủ gốc lắng nghe trên localhost: 50001
  2. Proxy server lắng nghe các yêu cầu trên webinterface: 80 và chuyển chúng tới localhost: 50001
  3. phiên bản máy chủ mới nên được bắt đầu trên localhost: 50.002
  4. Proxy server chuyển tiếp mục tiêu nên được thay đổi để localhost: 50002
  5. phiên bản máy chủ gốc nên được dừng lại

Đây có phải là phương pháp hợp lệ không? Làm thế nào có thể cập nhật phiên bản như vậy được thực hiện tự động trên nhiều máy chủ (có thể truy cập từ cùng một mạng LAN)?

+3

tôi sử dụng https://github.com/isaacs/node-supervisor cho các cửa sổ, nó theo dõi những thay đổi tập tin và tự khởi động lại. Trên Linux, tôi sử dụng https://github.com/nodejitsu/forever. – Dev

+3

Cả hai công cụ đều tuyệt vời, nhưng chúng không giúp bạn ngăn máy chủ khởi động lại. –

Trả lời

10

A "thuần nút" khác nhau giải pháp là sử dụng được xây dựng trong cluster mô-đun:

Mã của bạn chạy như một cụm khách hàng (nhiều). Một quá trình cụm máy chủ liên kết với cổng và tự động cân bằng tải giữa các máy khách. Khi bạn đã thay đổi mã, bạn có thể gửi tín hiệu đến máy chủ cụm và nó sẽ khởi động lại khách hàng của bạn một cách duyên dáng mà không làm mất bất kỳ kết nối hiện có nào.

Dưới đây là một số dự án có thể làm công tác quản lý cụm máy chủ dành cho bạn:

Ưu điểm:

  • Ít thành phần trong ngăn xếp của bạn. (Dễ triển khai/quản lý hơn.)
  • Có thể tự động bắt đầu quá trình nút cho mỗi lõi trên CPU, vì vậy chương trình của bạn có thể tận dụng triệt để phần cứng cơ bản.
  • Không cần phải tìm hiểu cú pháp cấu hình nginx của
+0

Cảm ơn bạn, đây là chính xác những gì tôi cần! – kol

4

Về cơ bản, những gì bạn có thể (nên) làm là như sau:

  • Chạy một máy chủ web như Nginx như một reverse proxy
  • Sử dụng ít nhất hai Node.js trường đằng sau nó
  • (!)
  • Đặt phiên trong một cơ sở dữ liệu như Redis

Khi bạn cần cập nhật hệ thống của bạn, đóng cửa một trong hai trường hợp Node.js, cập nhật nó, và khởi động lại nó. Sau đó, làm tương tự với nhau.

Về cơ bản, điều này nên thực hiện.

Nhược điểm là bạn có khả năng chạy các phiên bản khác nhau của ứng dụng trong một khoảng thời gian ngắn đồng thời, và cơ sở dữ liệu của bạn (ví dụ) cần có khả năng bắt kịp với điều này.

+0

Cảm ơn bạn đã trả lời. Xin lỗi vì đã hủy bỏ chấp nhận, nhưng tôi thích giải pháp "thuần khiết" hơn. Thật không may là không có cách nào để chấp nhận nhiều hơn một câu trả lời: ( – kol

Các vấn đề liên quan