2017-11-06 15 views
0

당신이 할 수있는 경우에 가능가, 더 정확하게, 가이드가ServerBootstrap과 Bootstrap 모두 동일한 Netty EventLoopGroup을 사용하는 것이 좋은 생각입니까?

다시 사용 EventLoopGroup을 언급 할 때마다 NioEventLoopGroup를 다시 사용하는 제안이 노먼 마우어에 의해 작은 Netty Best Practice Guide 있습니다!

필자는 재무 틱 데이터를 연결된 웹 소켓 클라이언트에 멀티 플렉스하는 응용 프로그램을 작성했습니다. 현재 세 개의 부트 스트랩이 있습니다. 현재 모두 별도의 NioEventLoopGroup을 사용하고 있습니다.

  • 연결된 웹 소켓을 처리하는 1x ServerBootStrap.
  • 1x ServerBootStrap에 연결된 1x 부트 스트랩.
  • 다른 틱 데이터 소스 (원격 서버) 용 2 x 부트 스트랩.

이 슬라이드를 읽으면 간단히 NioEventLoopGroup을 한 번 생성하여 나열된 모든 BootStrap에 사용할 수 있습니다.

이 문제가 좋은지 또는 제한이 있는지는 잘 모르겠습니다. 이 인용문은 "재사용 할 수 있다면 ..."이라고 말했습니다. 그러나 나는이 진술이 의미하는 한계를 모른다.

일부 숫자를 표시하려면 ServerBootStrap이 ~ 10k 연결된 웹 소켓 클라이언트를 처리해야합니다. 데이터 원본은 동일하게 유지되므로 원격 서버에 2 개의 연결 유지 연결이 유지됩니다.

의견이 있으십니까?

답변

2

일반적으로 이는 매우 양호합니다. 언제 어디서나 차단 작업을하지 않는 한. EventLoopGroup을 사용하면 일부 메모리, 어쩌면 일부 CPU를 절약 할 수 있습니다. 실제로 사용 사례에 따라 다릅니다.

그러나 귀하의 경우, 나는 2 EventLoopGroup을 선호합니다. ServerBootstrap은 1, Bootstrap은 1입니다. 고부하 (및 10k 웹 소켓이 가능한 높은로드를 좋아하는 것처럼 보임) 때문에 병목 현상을 쉽게 감지 할 수 있기 때문입니다. 적어도 부트 스트랩 연결로 인한 문제가 아닌지 확인해야합니다.

최근 CPU 사용량이 높은 원인을 찾기 위해 동일한 상황에서 정확히 EventLoopGroup 두 개를 분리해야만했습니다.

+0

당신이 understandclty를 이해한다면 서버 보스 및 작업자 그룹에 동일한 EventLoopGroup을 사용하십시오. 'EventLoopGroup serverEventLoop = new NioEventLoopGroup(); ServerBootstrap 서버 = 새 ServerBootstrap(); server.group (serverEventLoop, serverEventLoop)'및 내 틱 소스 부트 스트랩을위한 별도의 부트 스트랩 : 'EventLoopGroup tickEventLoop = new NioEventLoopGroup(); 부트 스트랩 소스 = 새 부트 스트랩(); source.group (tickEventLoop); ' – u6f6o

+0

아니요. 상사와 직원은 항상 별도의 그룹입니다. - https://github.com/blynkk/blynk-server/blob/master/server/core/src/main/java/cc/ blynk/server/transport/TransportTypeHolder.java # L24 및 사용법 - https://github.com/blynkk/blynk-server/blob/master/server/core/src/main/java/cc/blynk/server/core/ BaseServer.java # L25 –