Tình huống của tôi là chúng tôi hiện đang viết một ứng dụng trực tuyến sử dụng Node.js ở phía máy chủ với trình nghe WebSocket. Chúng tôi có hai phần khác nhau: một trang phục vụ các trang và sử dụng node.js và express + ejs, một ứng dụng khác hoàn toàn khác chỉ bao gồm thư viện socket.io cho websockets. Vì vậy, ở đây chúng tôi đi đến vấn đề này của khả năng mở rộng của một phần websockets.Cân bằng tải dựa trên cookie cho WebSockets?
Một giải pháp mà chúng tôi tìm thấy là sử dụng redis và chia sẻ thông tin ổ cắm giữa các máy chủ, nhưng do kiến trúc, nó sẽ yêu cầu chia sẻ nhiều thông tin khác.
Sau phần giới thiệu này, câu hỏi của tôi là - liệu có thể sử dụng cân bằng tải dựa trên cookie cho websockets không? Vì vậy, cho phép nói rằng mọi kết nối từ người dùng với máy chủ cookie = server1 sẽ luôn được chuyển tiếp đến máy chủ1 và mọi kết nối với máy chủ cookie = server2 sẽ được gửi đến máy chủ2 và kết nối không có cookie đó sẽ được chuyển sang máy chủ bận rộn nhất.
CẬP NHẬT: Là một 'câu trả lời' cho biết - có, tôi biết điều này tồn tại. Chỉ cần không nhớ rằng tên là phiên dính. Nhưng câu hỏi là - điều đó có hiệu quả với websockets không? Có bất kỳ biến chứng nào có thể xảy ra không?
Đây là một câu hỏi mà tôi rất quan tâm, chỉ có tôi không thấy vấn đề với các kết nối đến cân bằng tải từ trình duyệt (nó sẽ chỉ nhấn một trong các máy chủ và gắn bó với nó), tôi quan tâm nhiều hơn đến cách bạn thực sự đẩy đến các máy chủ đó từ chương trình phụ trợ của mình. Giống như, tôi có máy chủ phụ trợ thực hiện công việc thực tế và sau đó nó sẽ đẩy thông điệp đến máy chủ websockets thông qua một ổ cắm - làm thế nào để tôi biết cái nào cần đẩy tới nếu tôi có một cụm? Ý tưởng hiện tại của tôi là chỉ giữ danh sách tất cả các kết nối mở ở đâu đó trong db trung tâm, không chắc đó có phải là cách tốt nhất để đi hay không. – KOHb
@KOHb Tôi không có bất kỳ phụ trợ bổ sung nào sau các máy chủ socket. Vì vậy, nó đơn giản hơn nhiều trong trường hợp của tôi. Nhưng từ những gì bạn nói tôi sẽ thử máy chủ Redis cho mục đích này. – AlexKey