복붙노트

[SPRING] Google App Engine 애플리케이션 인스턴스 재활용 및 응답 시간

SPRING

Google App Engine 애플리케이션 인스턴스 재활용 및 응답 시간

GAE for Java 그룹에이 글을 올렸지 만 여기서 좀 더 빨리 답변을 드리겠습니다 :)

내 애플리케이션에 대해 장기간 성능 테스트를하기로 결정했습니다. 나는 5 ~ 30 분마다 앱을 치는 작은 클라이언트를 만들었고 3-5 번 실행했습니다. 그런 클라이언트와 스레드의.

나는 응답 시간에 큰 차이를 발견하고 문제를 조사하십시오. 나는 매우 빠른 이유를 발견했다. 다음 주제에서 설명한 것과 동일한 문제가 발생합니다.

전송 된 첫 번째 바이트에 대한 서버 연결 간의 고르지 않은 응답 시간

응용 프로그램 인스턴스가 너무 적극적으로 재활용 된 것 같습니다.

귀하의 요청을 처리하기 위해 너무 오래 기다린 후에 요청이 중단되었습니다. ' 응용 프로그램 유휴 상태 후

Springframework를 사용하고 있습니다. 앱을 시작하려면 18-20 초 정도 걸립니다. 예를 들어 응답 시간이 1 초 ( 응용 프로그램을 실행하는 요청 - 매우 드물다.) 생성됩니다.

이것에 대한 해결책이 있습니까? 나는 가장 기본적인 서블릿 수행을 중요하게 생각했다. 작업 (API 호출 제공)을 그대로두고 UI를 그대로 두십시오. 그렇다면 Springframework의 모든 이점을 잃어 버릴 것입니다.

이것에 대한 해결책이 있습니까?

내가 쳤던 App Engine의 수많은 제약을 해킹 (해킹) 한 후 내 앱을 개발하는 동안 내가 밖으로 나가게 할 것이라고 생각하는 앱이다. App Engine의 ... 간단히 말해서 항상 그렇듯이 내 응용 문제를 해결하는 것보다 GAE 문제로 승리 ...

어떤 도움?

문안 인사 콘라드

해결법

  1. ==============================

    1.나는 그들의 앱의 인스턴스가 항상 실행되도록하기 위해 계속 실행중인 것을 가지고있는 사람들을 알고있다. 내 말은, 클라이언트가 X 초마다 요청을 보내 앱이 재활용되지 않도록하십시오.

    나는 그들의 앱의 인스턴스가 항상 실행되도록하기 위해 계속 실행중인 것을 가지고있는 사람들을 알고있다. 내 말은, 클라이언트가 X 초마다 요청을 보내 앱이 재활용되지 않도록하십시오.

    구현이 빠른 것이지만 플랫폼의 정신에 어긋나는 것 같습니다. 번호를 만들어 가치가 있는지 확인하십시오.

    또 다른 옵션은 응용 프로그램을 리팩터링하여 현재보다 느린 로딩을 사용하는 것입니다. 그리 오래 걸리지 않습니다.

    나는 당신이이 2 개를 제외하고 다른 어떤 선택권이 있는지 모른다.

  2. ==============================

    2.새로운 사전 처리 컴파일 기능을 사용하십시오.

    새로운 사전 처리 컴파일 기능을 사용하십시오.

    <!-- appengine-web.xml -->
    
    <precompilation-enabled>true</precompilation-enabled>
    
  3. ==============================

    3.DispatcherServlet을 memcache로 serialize 한 다음 coldstart에 memcache에서 deserialize 할 수 있다면 좋습니다. 그렇다면 Spring의 인스턴스화는 정말 짧을 것입니다.

    DispatcherServlet을 memcache로 serialize 한 다음 coldstart에 memcache에서 deserialize 할 수 있다면 좋습니다. 그렇다면 Spring의 인스턴스화는 정말 짧을 것입니다.

    DispatcherServlet은 이미 Serializable로 표시되어 있으므로 DispatcherServlet에 포함 된 WebApplicationContext 객체를 직렬화하는 방법을 찾아야합니다.

  4. ==============================

    4.사람들이 AE 땅에 살고 빠르고 지저분한 생존자를 원한다면, 이것은 매력 (창문)처럼 작동합니다 :

    사람들이 AE 땅에 살고 빠르고 지저분한 생존자를 원한다면, 이것은 매력 (창문)처럼 작동합니다 :

    http://www.coretechnologies.com/products/http-ping/

  5. ==============================

    5.SDK 1.4.0에는 다음과 같은 새로운 기능이 있습니다.

    SDK 1.4.0에는 다음과 같은 새로운 기능이 있습니다.

  6. ==============================

    6.이것은 AppEngine 응용 프로그램의 까다로운 문제입니다. 순수 주의자는 응용 프로그램을 시작하고 거기에서 거꾸로 작업하는 데 너무 오래 걸리는 이유를 살펴 보도록 안내합니다. 귀하의 경우, 대답은 분명합니다 : 당신은 봄을 사용하고 많은 클래스 파일을로드하고 많은 객체를 인스턴스화해야합니다.

    이것은 AppEngine 응용 프로그램의 까다로운 문제입니다. 순수 주의자는 응용 프로그램을 시작하고 거기에서 거꾸로 작업하는 데 너무 오래 걸리는 이유를 살펴 보도록 안내합니다. 귀하의 경우, 대답은 분명합니다 : 당신은 봄을 사용하고 많은 클래스 파일을로드하고 많은 객체를 인스턴스화해야합니다.

    실용적인 답은, Spring없이 살 수 있다면, 앱 인스턴스가 따뜻하게 유지되는지 확인하는 것입니다. 외부 소스에서 AppEngine이 언로드하지 못하도록 자주 ping하거나 AppEngine cron 작업을 사용하여 앱을 메모리에 보관할 수 있습니다.

    나는 구글이 두 번째 옵션을 무시한다는 것을 확신한다. 그것은 AE의 근본적인 아이디어의 상당 부분을 다루지 만, 그럼에도 불구하고 AE 개발자들이 고려해야 할 문제이다.

    관련 토론이 있습니다.

  7. from https://stackoverflow.com/questions/2051036/google-app-engine-application-instance-recycling-and-response-times by cc-by-sa and MIT license