2012-09-21 2 views
4

현재 대형 RPC 서비스가 하나있는 GWT 앱을 사용하고 있습니다. 그것에는 100 가지가 넘는 방법이 있으며, 모두 다른 일을합니다. 여러 RPC 서비스로 분할하면 어떤 종류의 성능상의 이점/장애가 생깁니 까? 각자 새로운 서블릿을 만들어야한다고 생각합니다.GWT RPC - 응용 프로그램 별 다중 RPC 서비스

내 주요 질문은 다음과 같습니다. GWT는 실행중인 클라이언트마다 새로운 RPC 서블릿을 생성합니까? RPC 서비스가 두 개있는 경우 GWT는 하나의 응용 프로그램에 대해 두 개의 서블릿을 가지고 있습니까? 두 개의 RPC 서비스로 인해 성능 문제가 발생할 수 있습니다. 현재 (하나의 Tomcat 인스턴스에서 동시 사용자가 10-15 명)

답변

7

여러 RPC 서비스로 분할하면 어떤 성능상의 이점이 있습니까?

나는이 점에서 아무 것도 바꿀 수 없다고 생각한다.

저는 각각 하나당 새로운 서블릿을 만들어야한다고 생각합니다.

반드시 그렇지는 않습니다. 하나의 RemoteServiceServlet을 구현하여 여러 개의 RemoteService 인터페이스를 구현할 수 있습니다. 클라이언트가 동일한 URL을 사용하도록 모든 인터페이스에 동일한 @RemoteServiceRelativePath을 설정해야하지만 동일한 서블릿을 몇 가지 URL (여러 servlet-mapping도 동일한 servlet-name)로 매핑 할 수 있습니다.

GWT는 실행중인 클라이언트마다 새로운 RPC 서블릿을 생성합니까?

GWT는 는 톰캣에 웹 응용 프로그램을 호스팅하는 경우, 다음 톰캣 송가는 서블릿 인스턴스 (클래스 당 일반적으로 단일 인스턴스)를 생성, 새로운 RPC 서블릿을 만들지 않습니다.

+1

실제 이익이 더 읽기 쉽고 모듈 식인 코드라고 덧붙여 야합니다. 성능이 아닌 유지 보수성을위한 큰 이점 (어쨌든 성능에는 불이익을주지 않습니다). – helios

+0

감사합니다.이 질문에 대한 답변을 제공합니다. 좀 더 쉬운 코드 유지 관리를 위해이 기능 중 일부를 분리 해보겠습니다. – aglassman

+1

@helios : 나는 그것이 의도적이라고 생각했기 때문에 강조하지 않았다. 그리고 그는 충격에 대해 걱정했다. 하지만 그래, 물론 분할 분할 분할! 알다시피, [단 하나 책임 원리] (http://en.wikipedia.org/wiki/Single_responsibility_principle) 그 외 여러분. –

1

여러 RPC 인터페이스의 한 가지 단점 : 인터페이스간에 많은 공유 모델 개체가있는 경우 GWT는 각 모델 개체에 대해 FieldSerializers을 생성합니다. 이러한 모델 개체는 올바르게 공유됩니다. 그러나 각 RPC 인스턴스가 필요한 serializer 만 참조하도록하려면 서비스 프록시마다 TypeSerializer이 만들어집니다. 100 개의 모델 객체를 사용하는 10 개의 서비스의 경우 10 개의 TypeSerializer이 생성되고 각각은 100 FieldSerializer 개의 등록 (각 serializer에 3 개의 구성 요소 - serialize, instantiate, deserialize)이 있습니다.

나는이 공유 모델 객체의 무게에 따라 크기가 거의 3 배인 응용 프로그램을 보았습니다. 백개의 RPC 인터페이스와 수천 개의 가능한 모델 객체가 공유되었습니다. 모든 모델이 모든 인터페이스에서 사용되는 것은 아니지만 이러한 종류의 손상을 방지하기에 충분했습니다. 이는 각 인터페이스 쌍을 별도로 유지 관리하고 다른 인터페이스를 확장하는 하나의 거대한 쌍을 만드는 방법으로 완화되었습니다. 이렇게하면 GWT.create이 하나의 유형에서만 호출되므로 수백 대 대신 하나의 거대한 TypeSerializer이 생성됩니다.

컴파일 된 출력 크기를 주시하고 잠시 동안 SOYC (Story Of Compile) 보고서를 확인하여 모든 공간을 차지하는 부분을 확인하십시오.

+0

팁 주셔서 감사합니다. 서비스를 분할해도 출력 크기가 너무 많이 증가하지 않도록 분석을해야합니다. – aglassman