2014-01-06 7 views
2

저는 Java에서 푸시 서버를 구축 중이며 Redis PubSub를 사용하여 클라이언트에 보낼 메시지를 대기열에 넣을 계획입니다.Jedis 많은 구독자

지금 구현하면 장치 당 redis 가입자가 있습니다. 따라서 장치가 온라인 상태가되면 장치의 재발송 대기열에 등록됩니다.

더 나은 방법이 있습니까? 수천 명의 구독자가 있습니다.

답변

2

기기 당 가입자가 제대로 작동해야합니다. 스케일링 질문은 대부분 당신이 각 구독자에게 정확히 무엇을 게시하고 있는지 그리고 메시지가 실제로 사는지를 중심으로 이루어집니다. 고 가용성을 보장하기 위해 Redis Sentinel이 관리 할 수있는 지점에서 여러 개의 redis 인스턴스를 실행해야 할 수도 있습니다. Redis Sentinel은 마스터가 사용할 수 없게 된 경우 마스터가 될 슬레이브 redis 인스턴스 중 하나를 승격시키는 작업을 처리 한 다음 원래 마스터가 돌아 왔을 때 마스터로 다시 승격시킵니다.

메시지가 각 구독자에게 고유 한 경우 각 구독자에게 메시지를 보내는 것이 좋은 방법 인 것 같습니다. redis의 pub/sub는 내구성을 제공하지 않으므로 구독자가 연결을 끊거나 충돌하거나 돌아 오는 경우 마지막으로 구독 한 이후로 보낸 모든 메시지를 사용할 수 없습니다. 내구성이 필요한 경우 메시지는 각 구독자에 대한 LIST로 이동해야하며 채널에 게시되는 내용은 새 메시지를 사용할 수 있음을 클라이언트에 알리는 알림이어야합니다. 그러면 가입자는 LIST가 비워 질 때까지 여가 시간에 LIST에서 모든 메시지를 팝업 할 수 있습니다. 이 프로세스는 채널에서 알림을 수신 할 때마다 반복됩니다.

클라이언트 전체 또는 다수에게 단일 메시지가 브로드 캐스트되는 경우 메시지 자체를 redis 키 또는 목록에 저장하고 영향을받은 각 클라이언트의 채널에 새 메시지가 게시되어야한다고 생각해야합니다 사용할 수 있으며 어디에서 (어떤 키) 읽을 수 있습니다. 어떤 가입자가 어떤 메시지를 읽었는지 추적하고 모든 사람이 읽은 오래된 메시지를 삭제하는 데 사용할 수있는 많은 전략이 있습니다.