주어진 주제에 일치하는 구독 수가 많으면 처리량에 영향을 줄 수 있습니다.
예를 들어, 1 연결을 사용 중이며 foo
에 게시하고 있다고 가정합니다. foo
에는 100 개의 구독 정보가 있습니다. 서버가 메시지를 받으면 일치하는 모든 구독에 메시지를 배달합니다. 이 경우 구독이 동일한 연결에 속하는지 여부에 관계없이 TCP가이 메시지를 100 번 보내야 함을 의미합니다.
가입자에게 보내기를 수행하는 동안 서버는이 연결에 의해 게시 된 다른 메시지를 읽지 않습니다.
서버 추가로 수평 확장 클러스터의 구독로드도 배포하는 경우 도움이됩니다. 위의 예에서 한 소비자가 50 명, 다른 소비자가 50 명인 경우 게시 된 메시지를받는 서버는 이제 50 + 1 회 (현지 가입자의 경우 50 명, 경로의 경우 1 명)에만 메시지를 보내야합니다. 그러면 다른 서버는 로컬 가입자에게 50 개의 메시지를 보냅니다.
그러나 서버를 추가하는 것만으로 단일 구독이 있거나 일치하지 않는 구독이있는 경우 단일 연결 처리량이 향상되지 않습니다.
게시자 처리량을 향상시키는 또 다른 방법은 더 많은 연결을 사용하는 것입니다. 서버는 연결 당 go 루틴을 사용하므로 (소켓에서 데이터를 읽은 다음 가입으로 전송) 일부 작업을 병렬 처리 할 수 있습니다.
컴퓨터에서 얻을 수있는 상한값을 얻기 위해 repo에 포함 된 일부 벤치 마크를 실행할 수 있습니다. 예를 들어, 서버 벤치 테스트는 대개 NATS 클라이언트 대신 소켓에 직접 데이터를 씁니다.
go test -v -run=xxx -bench=. ./test
당신이 메시지를 보내는 방법으로 볼 수 있는지 확인하고이 구독 '콜백 처리하는 방법이 클라이언트 구현에 의해 부과 된 제한없이 서버 성능을 측정하는 것입니다. 실적을 향상시키기 위해 할 수있는 모든 일이 큰 가치가있을 것입니다.
희망이 도움이됩니다.