Tôi đã đăng bài này lên ServerFault, nhưng cộng đồng Node.js có vẻ nhỏ bé ở đó, vì vậy tôi hy vọng điều này sẽ mang lại nhiều hơn Phơi bày.Cách triển khai Node.js trên đám mây để có tính sẵn sàng cao bằng cách sử dụng đa lõi, đảo ngược proxy và SSL
Tôi có ứng dụng Node.js (0.4.9) và đang nghiên cứu cách triển khai và duy trì tốt nhất. Tôi muốn chạy nó trong đám mây (EC2 hoặc RackSpace) với tính sẵn sàng cao. Ứng dụng sẽ chạy trên HTTPS. Tôi sẽ lo lắng về sự chuyển đổi dự phòng hoàn toàn của East/West/EU sau này.
Tôi đã thực hiện rất nhiều việc đọc về các tiện ích đa sức sống (Upstart, Forever), đa lõi (Fugue, multi-node, Cluster) và proxy/load balancers (node-http-proxy, nginx, Varnish) , và Pound). Tuy nhiên, tôi không chắc chắn làm thế nào để kết hợp các tiện ích khác nhau có sẵn cho tôi.
Tôi có ý tưởng thiết lập này và cần đưa ra một số câu hỏi và nhận phản hồi.
- Cụm là tiện ích đa lõi tích cực nhất được phát triển và dường như phổ biến cho Node.js, vì vậy sử dụng để chạy 1 nút "cluster" mỗi máy chủ ứng dụng trên cổng không có đặc quyền (nói 3000). Q1: Nên Mãi mãi được sử dụng để giữ cho cụm tồn tại hoặc chỉ là dư thừa?
- Sử dụng 1 nginx mỗi máy chủ ứng dụng đang chạy trên cổng 80, chỉ cần đảo ngược proxy đến nút trên cổng 3000. Q2: Would nút-http-proxy thể phù hợp hơn cho nhiệm vụ này mặc dù nó không gzip hoặc các tập tin tĩnh máy chủ một cách nhanh chóng?
- Có tối thiểu 2x máy chủ như được mô tả ở trên, với một máy chủ độc lập hoạt động như bộ cân bằng tải trên các hộp này. Sử dụng số Pound nghe 443 để chấm dứt HTTPS và chuyển HTTP sang Varnish sẽ làm tròn số dư tải trên toàn bộ các máy chủ ở trên. Q3: Nên nginx được sử dụng để thực hiện cả hai thay vào đó? Q4: nên AWS hoặc Rackspace cân bằng tải được coi là thay vì (sau này không chấm dứt HTTPS)
Câu hỏi chung:
- Bạn có thấy một nhu cầu (2) ở trên tại tất cả các?
- Đâu là nơi tốt nhất để chấm dứt HTTPS?
- Nếu WebSockets là cần thiết trong tương lai, bạn sẽ thực hiện những thay thế nginx nào?
Tôi thực sự muốn biết cách mọi người đang thiết lập môi trường sản xuất hiện tại và sự kết hợp các công cụ mà họ thích. Nhiều đánh giá cao.
Lưu ý rằng Cụm v.v. không cung cấp đa luồng, chúng chỉ đơn giản cung cấp việc sử dụng nhiều lõi thông qua nhiều quy trình. Điều này hoàn toàn khác. Cũng lưu ý rằng Cluster sẽ không cung cấp tính khả dụng cao nếu master của bạn bị hỏng. Đứa trẻ sẽ tự tử và thầy sẽ không hồi sinh. Có lẽ bạn có thể sử dụng một cái gì đó như Forever để khởi động lại tổng thể. Ngoài ra, lưu ý rằng Nginx không có khả năng định tuyến các kết nối websocket. Cuối cùng, "một máy chủ độc lập hoạt động như một bộ cân bằng tải trên các hộp này": nếu máy chủ này bị hỏng? – Tom
@Tom, tất cả các điểm tuyệt vời. Tôi sẽ cập nhật các câu hỏi để lưu ý sử dụng đa lõi, không phải đa luồng, nhưng trước đây là những gì tôi có ý nghĩa. Tôi muốn sử dụng Monit trên mỗi máy chủ để xem PID của Cluster và khởi động lại nó nếu cần thiết. Tôi hiểu giới hạn WS/WSS hiện tại của nginx nhưng không cần điều đó. Tôi cũng sử dụng Monit trên bộ cân bằng tải, nhưng vẫn chưa có giải pháp tốt cho điểm lỗi duy nhất đó, thiếu nhiều vùng sẵn có (bản sao của toàn bộ thiết lập này). –
@ChrisF nói chuyện với các nodejitsu guys trong #nodejitsu trên freenode. Nếu bạn muốn biết về kiến trúc nút đó là nơi để được. – Raynos