Giả sử tôi cần triển khai ứng dụng web sẽ có lượng người dùng đồng thời cao. Tôi quyết định sử dụng node.js vì nó có độ phân giải rất tốt, nó có hiệu suất tốt, cộng đồng nguồn mở, v.v. Sau đó, để tránh tắc nghẽn vì tôi có thể có các gazillions của người dùng trong cùng một vòng lặp sự kiện, tôi quyết định sử dụng một cụm các quy trình để tận dụng lợi thế của CPU đa lõi. Hơn nữa, tôi có 3 máy (main + 2) vì tôi cần thao tác dữ liệu lớn với Cassandra. Tuyệt vời, điều này có nghĩa là tôi có các quy trình 3 * n node.js trong đó n là số lõi của cpu (các máy giống nhau).Cách thiết kế máy chủ web node.js phân tán
Ok, sau đó tôi bắt đầu một nghiên cứu và tôi kết thúc với giản đồ sau:
- Nginx lắng nghe trên cổng 80 và chỉ được sử dụng để phục vụ nội dung tĩnh (img, css, js, vv).
Chuyển tiếp lưu lượng truy cập động tới haproxy. Tôi biết cách cấu hình nginx nhưng tôi vẫn phải xem xét haproxy, vì vậy tôi sẽ nói rằng haproxy đang lắng nghe trên cổng 4000. Nginx và haproxy được cài đặt trong máy chính (điểm vào). - Cân bằng tải Haproxy giữa 3 máy. Nó chuyển tiếp lưu lượng tới cổng 4001, có nghĩa là, các quá trình Node.js đang nghe 4001.
- Mỗi Node.js đã một cụm của các quá trình n nghe 4001.
Nếu tôi đúng một đơn Yêu cầu http sẽ được chuyển tiếp đến một quá trình node.js duy nhất.
Tạo phiên là khá bình thường, phải không? Một phiên chỉ là một bản đồ, và bản đồ này là một đối tượng, và đối tượng này sống trong một quá trình node.js. Haproxy sẽ được cấu hình với một bộ lập lịch vòng tròn, vì vậy cùng một người dùng có thể được chuyển tiếp đến các tiến trình node.js khác nhau. Làm thế nào tôi có thể chia sẻ cùng một đối tượng phiên trên tất cả các tiến trình node.js? Làm thế nào tôi có thể chia sẻ một đối tượng toàn cầu (điều này bao gồm trong cùng một máy (cụm node.js) và trên mạng)? Tôi nên thiết kế một ứng dụng web phân tán với node.js như thế nào? Có bất kỳ mô-đun nào dễ dàng thực hiện tác vụ đồng bộ hóa không?
haproxy có nhiều cách xử lý các phiên dính, http: // stacko verflow.com/questions/6498030/load-balancing-haproxy-or-other-sticky-sessions. Đối với một đối tượng toàn cầu, sử dụng redis hoặc một cái gì đó. – numbers1311407
Tương tự như http://stackoverflow.com/questions/5398209/scaling-node-js-across-multiple-cores-servers Cũng chỉ có 3 máy chủ. –