2012-10-22 39 views
9

Tôi đang viết máy chủ trò chuyện cho Acani và tôi có một số câu hỏi về Scaling node.jswebsockets with load balancer scalability.Làm thế nào để quy mô Node.js WebSocket Redis Server?

  1. Node.js có nghĩa là gì? Điều đó có nghĩa là sẽ có n các phiên bản độc lập của ứng dụng máy chủ của tôi đang chạy, mỗi phiên bản trên một máy chủ riêng biệt?

  2. Để cho phép một khách hàng phát tin nhắn cho tất cả những người khác, tôi lưu trữ một bộ tất cả các webSocketConnections mở trên máy chủ. Nhưng, nếu tôi có n các phiên bản độc lập của ứng dụng máy chủ đang chạy, mỗi phiên bản trên một máy chủ riêng biệt, thì tôi sẽ có n các bộ khác nhau của webSocketConnections?

  3. Nếu câu trả lời cho 1 & 2 được khẳng định, thì làm thế nào để lưu trữ một tập hợp phổ quát của webSocketConnections (trên tất cả các máy chủ)? Một cách tôi nghĩ rằng tôi có thể làm điều này là sử dụng Redis Pub/Sub và chỉ cần đăng ký webSocketConnection một kênh trên Redis.

  4. Nhưng, sau đó, máy chủ Redis đơn lẻ sẽ trở thành nút cổ chai? Làm thế nào sau đó tôi sẽ quy mô Redis? Nó có nghĩa là gì để mở rộng Redis? Điều đó có nghĩa là tôi có m phiên bản Redis độc lập đang chạy trên các máy chủ khác nhau không? Điều đó thậm chí có thể?

  5. Tôi đã nghe Redis không mở rộng quy mô. Tại sao ai đó lại nói vậy. Điều đó nghĩa là gì? Nếu đó là sự thật, có giải pháp nào tốt hơn cho pub/sub và/hoặc lưu trữ danh sách tất cả các tin nhắn được phát không?

Lưu ý: Nếu câu trả lời của bạn là Acani sẽ không bao giờ phải mở rộng quy mô, ngay cả khi mỗi người trong số tất cả bảy tỷ người (và phát triển) trên Trái đất đã phát sóng một thông điệp mỗi giây để mọi người khác trên trái đất, sau đó xin vui lòng đưa ra một lời giải thích hợp lệ.

+0

là gì acani? – udidu

+0

Ứng dụng tôi đang xây dựng – ma11hew28

Trả lời

6

Vâng, vài câu trả lời cho câu hỏi của bạn:

  1. Để cân bằng tải Node.js, nó có nghĩa là chính xác những gì bạn nghĩ về những gì nó là, ngoại trừ việc bạn không thực sự cần máy chủ riêng biệt, bạn có thể chạy nhiều hơn sau đó một quá trình của máy chủ nút của bạn trên cùng một máy.

  2. Mỗi máy chủ/quy trình máy chủ nút của bạn sẽ có kết nối riêng, cửa hàng mặc định cho ổ cắm web (ví dụ Socket.IO) là MemoryStore, có nghĩa là tất cả các kết nối sẽ được lưu trữ trên bộ nhớ máy. cần thiết để làm việc với RedisStore để làm việc với redis như một cửa hàng kết nối.

  3. Redis PUB/SUB là một cách tốt để đạt được nhiệm vụ này

  4. Bạn có quyền về những gì bạn nói ở đây, redis không quy mô tại thời điểm này và chạy rất nhiều các quy trình/kết nối kết nối với redis có thể làm cho redis trở thành nút cổ chai.

  5. Redis không mở rộng, điều đó là đúng, nhưng theo bản trình bày này bạn có thể thấy rằng phát triển cụm là ưu tiên hàng đầu tại redis và redis có cụm, nó vẫn chưa ổn định: (lấy từ http://redis.io/download)

đâu Redis Cụm?

Phát triển Redis hiện tập trung vào Redis 2.6 sẽ mang lại cho bạn hỗ trợ cho kịch bản Lua và nhiều cải tiến khác. Đây là ưu tiên hiện tại của chúng tôi, tuy nhiên nhánh không ổn định đã chứa hầu hết các phần cơ bản của Redis Cluster. Sau khi phát hành phiên bản 2.6, chúng tôi sẽ tập trung năng lượng của mình vào việc chuyển đổi Alpha hiện tại của Redis Cluster trong một sản phẩm beta mà người dùng có thể bắt đầu kiểm tra nghiêm túc. Thật khó để đưa ra dự đoán vì chúng tôi sẽ phát hành Redis Cluster ổn định chỉ khi chúng tôi cảm thấy đá vững chắc và hữu ích cho khách hàng, nhưng chúng tôi hy vọng sẽ có phiên bản beta hợp lý cho mùa hè 2012 và phát hành bản phát hành ổn định đầu tiên trước cuối 2012.

Xem trình bày ở đây: http://redis.io/presentation/Redis_Cluster.pdf

1

2) Sử dụng Redis có thể không hoạt động để lưu trữ các kết nối: Redis có thể lưu trữ dữ liệu ở định dạng chuỗi, và nếu đối tượng connecion có tham chiếu vòng tròn (tức , Engine.IO), bạn sẽ không thể nối tiếp chúng

3) Tạo ứng dụng khách Redis mới cho từng clie nt có thể không phải là một phương pháp tốt để tránh bẫy rằng nếu bạn có thể

Xem xét sử dụng thư viện nút ZMQ để có các quy trình giao tiếp với nhau thông qua giao thức TCP (hoặc IPC nếu chúng được nhóm như trong master-công nhân)