Tôi đang xây dựng một hệ thống phân tán bao gồm hàng triệu khách hàng, tất cả cần phải giữ kết nối mở (mong muốn HTTP) để chờ lệnh từ máy chủ (đang chạy ở nơi khác) . Tải tin nhắn/commmands sẽ không được rất cao, có thể một tin nhắn/giây/1000 khách hàng có nghĩa là nó sẽ là 1000 msg/sec @ 1 triệu khách hàng. => về cơ bản nó là về các kết nối đồng thời.máy chủ đẩy cho hàng triệu kết nối đồng thời
Các yêu cầu cũng đơn giản. Một cách nhắn tin (máy chủ-> khách hàng), chỉ có 1 khách hàng cho mỗi "kênh".
Tôi khá cởi mở về mặt công nghệ (xmpp/websockets/comet/...). Tôi đang sử dụng Google App Engine làm máy chủ nhưng "kênh" của họ sẽ không hoạt động đối với tôi một cách không may (hạn ngạch quá thấp và không có ứng dụng khách Java). XMPP là một lựa chọn nhưng khá đắt. Cho đến nay tôi đã sử dụng URL Fetch & pubnub, nhưng họ chỉ bắt đầu tính phí cho các kết nối (thời gian lớn).
Vì vậy:
Có ai biết của một dịch vụ trên mạng có thể làm điều đó cho tôi trong một cách hợp lý? Hầu hết tôi đã tìm thấy giới hạn hoặc phí rất nhiều cho các kết nối.
Bất kỳ trải nghiệm nào khi tự mình triển khai máy chủ như vậy? Tôi đã thực sự làm điều đó và nó hoạt động khá tốt (dựa trên Tomcat & NIO) nhưng tôi chưa có thời gian để thực sự thiết lập một môi trường kiểm tra tải lớn (một phần vì đây vẫn là một giải pháp dự phòng, tôi thích một máy chủ msg đã được khắc phục sự cố). Bất kỳ trải nghiệm nào về số lượng người dùng bạn nhận được trên mỗi GB? Bất kỳ giới hạn cứng?
Kiến trúc của tôi cũng cho phép chia nhỏ các máy chủ msg, nhưng tôi muốn tối đa hóa các kết nối đồng thời vì xử lý thông tin trên CPU ở mức tối thiểu.
Đây là một trong những điều khó khăn hơn để chấp nhận. Bạn đã xem xét một giao thức không kết nối như UDP chưa? Bạn sẽ phải viết các giao thức ack của riêng bạn nhưng sau đó bạn sẽ không phải duy trì các kết nối và bạn sẽ không phải chịu phí kết nối. Tôi đã viết một số máy chủ phân phối thông lượng rất cao nhưng không phải khách hàng phải đối mặt. – Gray
FYI, tôi đã thực hiện nó bằng cách sử dụng netty (xem câu trả lời dưới đây). – Daniel
Cool @Daniel. Tôi sẽ phải kiểm tra xem nó ra. Tôi đã nghe những điều tốt đẹp về Netty nhưng chưa bao giờ sử dụng nó. – Gray