서버 (다른 곳에서 실행되는 명령)를 기다리기 위해 열린 (선호하는 HTTP) 연결을 유지해야하는 수백만의 클라이언트로 구성된 분산 시스템을 구축 중입니다. . 메시지/명령로드는 매우 높지 않을 것입니다. 즉, 1 메시지/초/1000 클라이언트 즉, 100 만 건당 1 백만 건의 클라이언트를 의미합니다. => 기본적으로 동시 연결에 관한 것입니다.수백만 개의 동시 연결을위한 서버 푸시
요구 사항도 간단합니다. 편도 메시징 (서버 -> 클라이언트), "채널"당 하나의 클라이언트.
저는 기술면에서 꽤 열려 있습니다 (xmpp/websockets/comet/...). Google App Engine을 서버로 사용하고 있지만 불행히도 (채널 할당량이 너무 적어 Java 클라이언트가 없음) "채널"이 작동하지 않습니다. XMPP는 옵션 이었지만 비용이 많이 듭니다. 지금까지 URL 가져 오기 & pubnub를 사용했지만 연결 (큰 시간)을 청구하기 시작했습니다.
그래서 :
는 는-
는
사람은 저렴한 방법으로 저를 위해 그렇게 할 수 밖에 서비스를 알고 있나요? 대부분의 경우 연결을 제한하거나 과도하게 청구 한 것으로 나타났습니다.
이러한 서버를 직접 구현 한 경험이 있습니까? 나는 실제로 그것을 이미 완료했으며 꽤 잘 작동한다 (Tomcat & NIO 기반). 그러나 아직 실제로는 대형 부하 테스트 환경을 설정하는 데 시간이 없었습니다. (부분적으로 이것은 대체 솔루션이기 때문에 부분적으로는 선호합니다. 전투 강화 된 메시지 서버). GB 당 몇 명의 사용자를 대상으로 한 경험이 있습니까? 하드 한도가 있습니까?
내 아키텍처에서는 msg 서버를 조각 낼 수도 있지만 msg 처리 CPU 오버 헤드가 적기 때문에 동시 연결을 최대화하고 싶습니다.
이 하나는 받아 들일 수있는 더 강하다. UDP와 같은 비 연결형 프로토콜을 고려 했습니까? 자신 만의 ack 프로토콜을 작성해야하지만 연결을 유지할 필요가 없으므로 연결 오버 헤드가 발생하지 않아도됩니다. 매우 높은 처리량의 분산 서버를 작성했지만 고객은 직면하지 않았습니다. – Gray
참고로, 나는 netty를 사용하여 구현했습니다 (아래 답변 참조). – Daniel
쿨 다니엘. 나는 그것을 조사해야 할 것이다. 나는 Netty에 관해 좋은 말을 들었지만 결코 사용하지 않았다. – Gray