호출 작동 방식
한 번의 호출을 통해 관찰한 한계, 오류 코드 및 타이밍을 설명합니다.
1. 통화 경로
게이트웨이와 서비스 기능은 메시지 버스를 통해 통신합니다. 해당 버스의 메시지에는 크기 제한이 있으므로 약 256KiB를 초과하는 요청 또는 응답은 통과되지 않습니다. 제한을 참조하세요.
2. 런타임 내부
- 호출당 작업자 한 명. 에지 런타임은 함수의 메모리 제한 및 시간 초과를 사용하여 각 호출에 대해 격리된 새로운 V8 작업자를 시작합니다. 한 번의 호출에서 다음 호출까지 메모리에는 아무것도 남지 않습니다. 상태를 변수에 유지하지 마십시오. 데이터베이스나 저장소를 사용하세요.
- 코드는 몇 초 동안 캐시됩니다. 런타임은 코드와 함수의 제한을 5초 동안 유지했다가 배포 시 삭제합니다. 호출할 때마다 변수를 읽습니다.
- 귀하의 요청이 다시 작성되었습니다. 런타임은 설명된 요청(
method,path,headers,body)을 생성하고 이를Deno.serve핸들러에 전달합니다. 따라서 함수는 HTTP 서버처럼 동작합니다. - 런타임이 시간 초과를 적용합니다.
timeout_secs이 경과되면 작업자가 취소됩니다. 발신자는 해당 지연 후에 오류를 보게 됩니다. - WASM 함수는 메모리, 시간 및 지침에 제한이 있는 서비스 자체 내에서 실행됩니다. WASM 함수는 응답의
logs필드에 나타나는 로그 줄을 보고할 수 있습니다. Deno 함수는 그럴 수 없습니다.
3. 봉투 및 원시 모드
서비스에는 X-Aurabase-Invoke-Mode 요청 헤더에서 선택한 함수의 응답을 반환하는 두 가지 방법이 있습니다.
| 봉투(기본값) | 원시(raw) | |
|---|---|---|
| HTTP 상태 | 항상 200 | 함수 자체의 상태 |
| 본체 | { data: { status, headers, body, logs, duration_ms }, meta } | 함수의 바이트 |
| 내용 | JSON 또는 UTF-8 텍스트 | 바이너리를 포함한 모든 것 |
| 사용처 | responseType: 'json', 스튜디오 | 'text', 'blob', 'arrayBuffer', 직접 HTTP |
봉투는 하나의 JSON 응답이 호출의 상태, 헤더 및 기간을 전달할 수 있도록 존재합니다. 한계는 바이트가 JSON으로 이동할 수 없다는 것입니다. 이것이 바이너리 응답에 원시 모드가 필요한 이유입니다. SDK는 responseType에서 모드를 선택합니다.
원시 모드에서 서비스는 함수의 답변에 x-aurabase-invoke-origin: function을 추가합니다. 게이트웨이 또는 런타임에서 발생하는 오류는 이를 전달하지 않습니다. 이는 SDK가 FunctionsHttpError(함수 응답)을 FunctionsRelayError(플랫폼 실패)에서 분리하는 방법입니다.
4. 시간, 측정 및 오류
3개의 시간 초과가 중첩되어 그 안에 있는 시간 초과 전에 끝나지 않습니다.
서비스는 timeout_secs에 대한 런타임과 여백을 기다립니다. 런타임은 timeout_secs에서 작업자를 취소하므로 일반적으로 그 순간 함수에서 오류가 표시되고 런타임 자체가 응답을 중지하는 경우에만 504 TIMEOUT이 표시됩니다. 따라서 504는 함수가 시작되었고 영향을 미쳤을 수 있음을 의미합니다. 멱등성이 아닌 호출을 맹목적으로 반복하지 마십시오.
측정 및 할당량:
- 호출 전에 서비스는 계획 할당량에서 하나의 호출을 예약합니다. 할당량이 소진되면 여기서
403호출이 중지됩니다. - 호출 후에는 호출과 지속 시간을 밀리초 단위로 기록합니다.
- 함수가 응답하기 전에 호출이 실패하면 예약이 해제되고 아무것도 계산되지 않습니다.
5. 코드에 따라야 할 사항
- 각 호출을 짧고 상태 비저장으로 유지하세요. 장기 작업의 경우 작업을 대기열에 추가합니다.
- 요청과 응답을 작게 유지하십시오. 파일을 Storage에 넣고 참조를 전달합니다.
- 기능을 멱등성으로 만듭니다. 재시도된 작업, 네트워크 오류 후 클라이언트 재시도 또는 중복된 크론 전달로 인해 코드가 두 번 실행될 수 있습니다.
- 호출자가 위조할 수 없는 유일한 값이기 때문에 플랫폼의 ID 헤더에 대해 권한을 부여합니다. 보안을 참조하세요.
- 자체 대기 시간을 측정하세요. 각 호출은 작업자 시작에 대한 비용을 지불합니다. 로컬 스택에서 최소 함수가
duration_ms: 74을(를) 보고했습니다.