2017-12-24 14 views
0

과 유사하지만 라우터가있는 Vertx 및 Vertx 클라이언트를 사용하여 프록시를 구현하려고합니다.VertX 프록시 성능

예외는 하나의 서버가 아닌 여러 서버에 연결된다는 것입니다.

은 내가

  1. 간단한 에코 서비스
  2. 내가 프록시에 대한 공유 HttpClient을 사용하는 경우 다시

을 울리는 전에 5 초 동안 잠들지 서비스에 연결하는 두 가지 유형의 서비스가 그리고 간단한 에코 서비스에 연결합니다. 대기 시간 문제가 없습니다. 중간 값은 1 초 미만입니다. 그러나 잠자는 서비스에 연결하면 대기 시간이 시간과 부하에 따라 높아집니다.

서비스를 직접 방문하면 예상 대기 시간이 평균 5100ms가됩니다.

요청마다 새로운 HttpClient를 생성하기 위해 변경하면 5110ms 정도의 대기 시간을 제공 할 수 있습니다. 그러나, 내가 에코 버전을 치기 위해 그것을 사용하고 대포 응용 프로그램이 나에게 EADDRINUSE 오류를 준다면 (이것은 보통 listen쪽에 있기 때문에 이상합니다)

서비스가 아닌 HTTP/2를 사용하고 있습니다. SSL에 연결되지 않았으므로 단일 연결 멀티플렉싱을 시도하지 않았습니다.

또한 프록시에 보수적 인 64MB 힙 크기를 사용하고 있습니다.

새로운 HttpClient을 만드는 것이 더 적절합니까? 그리고 어쩌면 부적절한 부하에 대해 부적절한 시스템에서 테스트했기 때문에 실패 이유가 무엇입니까?

답변

0

이 해결하기 위해 나는 응답

final HttpClientRequest clientRequest = httpClient 
     .request(contextRequest.method(), clientRequestOptions, clientResponse -> { 
      contextRequest.response().setChunked(clientResponse.getHeader(HttpHeaders.CONTENT_LENGTH) == null) 
       .setStatusCode(clientResponse.statusCode()); 
      clientResponse.headers().forEach(e -> contextRequest.response().putHeader(e.getKey(), e.getValue())); 
      clientResponse.endHandler(v -> { 
       contextRequest.response().end(); 
      }); 
      // back pressure here 
      Pump.pump(clientResponse, contextRequest.response()).start(); 
     }).exceptionHandler(context::fail) 
을 얻기 위해 시도 할 때 클라이언트에서 back-pressure pattern을 적용했다