Cloud Function for Firebase가 느립니까?

Firebase에서 고객으로부터 Function을 동시 호출하면 응답에 많은 시간이 걸릴 수 있습니다.특히 펀션 함수가 기본값일 경우 몇 시간 동안 호출을 비워 두면 보통 바로 응답하는 함수도 4초 이상 걸린다.나는 그런 것들을 개선하는 몇 가지 방법을 시험해 보았기 때문에 총괄해 보겠다

준비하다


참조냉각 부팅 감소 핫 스페어 인스턴스 지정
exports.getAutocompleteResponse = functions
    .runWith({
      // Keep 5 instances warm for this latency-critical function
      minInstances: 5,
    })
    .https.onCall((data, context) => {
      // Autocomplete a user's search term
    });
이렇게 해서 hotstandby가 됐다는 보도가 있었지만, 확인 방법이 없어 실제로 hotstandby가 됐는지 알 수 없었다.별 효과가 없다.

가까운 지역을 이용하다


default는 us-central 1(미국 중부)이기 때문에 아시아-northeast1(도쿄)로 지정됩니다.
exports.JpFunc = functions
  .region("asia-northeast1")
  .https.onCall(async (data, context) => {
    // Some func
    });
RTT 효과

메모리 지정


default는 256MB이기 때문에 증가합니다.증가하면 가동을 포함한 속도가 개선된다.
exports.JpFunc = functions
  .runWith({
    memory: "1GB" as "1GB",
  })
  .https.onCall(async (data, context) => {
    // Some func
    });
극적인 효과가 있다.단순한 함수라면 그것만으로도 대책으로 충분하다.
4s->200ms 이하.느린 함수라도 1s 정도밖에 안 돼요.

그럼에도 불구하고 처음으로 발생한 늦은 문제


상술한 조치를 취하더라도 특정한 동기 함수 중에는 1s 정도의 함수가 있다.처리 내용을 고려하더라도 100ms 이하에서 처리할 수 있으며, 연속 호출하면 2차 이후 100ms 이하에서 회답할 수 있다.
시간이 걸리는 함수의 특징을 조사한 결과 Firestore를 사용하는 함수와 Authentication을 사용하는 함수, 즉 Firebase를 사용하는 다른 서비스의 공통점을 발견했다.
조사에 따르면 이쪽수표에는 gRPC의 초기화에 시간이 많이 걸린다는 정보가 있다.
초기화에 시간이 걸리기 때문에 실례가 시작되면Firebase가 초기화 상태에 있고 바로 답장하는 이유도 이해할 수 있다.
개선 방법으로 삼다
  • Function 내에서Firebase의 기타 서비스를 최대한 사용하지 않음
  • 동기 함수 처리 대신 비동기 함수 사용
  • Trigger
  • 활용
  • Function에서 응답을 되돌려주지만 처리는 계속 비동기적
  • 정기적으로 Function을 호출하여 Hot standby 상태를 유지한다
  • Firestore는 다른 라이브러리로 처리
  • 상기 표 안에 gRPC를 사용하지 않는 Firestore의 라이브러리
  • 를 소개했다
  • @bountyrush/firestore
  • 1s 내외이므로 UI 측면의 지연 허용
  • 잠깐만요.
    특히 사용자 정의 인증을 사용할 때는 어떻게든 펀션 측에서 Authentication을 사용해야 하는데, 아직 대안이 없기 때문에 UI로 1s가량의 지연을 감춰야 한다.

    총결산


    총결산하다
  • Function의 동기화 함수에 다음 설정을 추가
  • exports.getAutocompleteResponse = functions
      .region("asia-northeast1")
      .runWith({
        // Keep 5 instances warm for this latency-critical function
        minInstances: 5,
        memory: "1GB" as "1GB",
      })
      .https.onCall((data, context) => {
        // Autocomplete a user's search term
      });
    
  • Function 내에서Firestore,Authentication을 사용하는 경우 초기화하는 데 시간이 걸립니다.
  • 네.또 다른 좋은 개선 방안이 있다면 댓글로 알려주세요.

    좋은 웹페이지 즐겨찾기