GCE에서 Cloud NAT를 통한 SocketTimeoutException

2143 단어 CloudNATjava8gce

이 기사 개요



하기 기사에서 구축한 어플리케이션의 운용중에 발생한 장해와 그 대응에 대해 기술합니다.
htps : // 이 m / 이세이_0403 / ms / 아 69f42c85fb81에 1에 fc62

구성



외부 API 연결 시 IP 제한이 걸려 CloudNAT에서 출구 IP를 고정하면서 외부 API에 연결합니다.
외부 API는 초당 요청 수에 제한이 있습니다.


장애 내용


  • 응용 프로그램이 요청을 던지는 행에서 연결 시간 초과가 발생하고 외부 API에 도착하지 않았습니다
  • Stackdriver Logging에서 Cloud NAT 로그를 살펴보면 애플리케이션 측에서 실패한 요청에 연결될 것 같은 Cloud NAT 로그 정보
    allocation_status가 "dropped"입니다.

  • (어쩌면 1주일 전까지 아무 일도 없이 놀고 있었는데 어째서 갑자기 움직이지 않게 된거야😡)

    시도한 것



    1. 응용 프로그램에서 사용하는 OkHttp의 시간 초과 시간을 길게합니다.



    ※아래 기사 참조
    htps : // 이 m/이세이_0403/있어 ms/716fc73아 fb86142d4933

    1. 결과



    Cloud NAT의 allocation_status가 "dropped"가 되는 문제는 해소.
    하지만 외부 API에 대한 요청 수가 너무 많아서 화가납니다 😅

    2. 요청을 던지기 전에 sleep 해보십시오.


    // もろもろ省略
    import java.util.concurrent.TimeUnit;
    TimeUnit.MILLISECONDS.sleep(200);
    

    2. 결과



    요청 제한 이하로 했으므로 무사히 해소.

    계속 (2019/08/22)



    40요청 정도 심판했는데, 갑자기 2분 이상 기다리는 이벤트가 발생해 다시 Timeout이 발생했습니다.
    자동으로 스케일링하는 것이었습니다만, GCE상의 애플리케이션(이번은 배치 처리)을 Cloud NAT를 경유시키면 극단적으로 긴 대기가 갑자기 발생해 잘 움직이지 않는 것이 있는 것 같습니다.
    GCE에 고정 IP를 할당하고 Cloud NAT를 거치지 않기로 결정했습니다.
    결과 Cloud NAT를 경유시켰을 때와 비교가 되지 않는 레벨에서 폭속으로 움직였습니다.

    좋은 웹페이지 즐겨찾기