Jak działa wywołanie
Przegląd jednego połączenia w celu wyjaśnienia limitów, kodów błędów i obserwowanego czasu.
1. Ścieżka połączenia
Brama i usługa funkcji komunikują się za pośrednictwem magistrali komunikatów. Wiadomość na tej magistrali ma limit rozmiaru i dlatego żądanie lub odpowiedź powyżej około 256 KiB nie przechodzi: zobacz limity.
2. Wewnątrz środowiska wykonawczego
- Jeden pracownik na połączenie. Środowisko wykonawcze brzegowe uruchamia nowy izolowany proces roboczy V8 dla każdego wywołania, z zachowaniem limitu pamięci i limitu czasu funkcji. Nic w pamięci nie przetrwa od jednego wywołania do następnego: nie przechowuj stanu w zmiennej. Skorzystaj z bazy danych lub magazynu.
- Kod jest buforowany przez kilka sekund. Środowisko wykonawcze przechowuje kod i ograniczenia funkcji przez 5 sekund i usuwa je po wdrożeniu. Zmienne są odczytywane przy każdym wywołaniu.
- Twoje żądanie zostało przebudowane. Środowisko wykonawcze tworzy opisane przez Ciebie żądanie (
method,path,headers,body) i przekazuje je do procedury obsługiDeno.serve. Funkcja zachowuje się zatem jak każdy serwer HTTP. - Środowisko wykonawcze wymusza przekroczenie limitu czasu. Po upływie
timeout_secsproces roboczy zostaje anulowany; osoba dzwoniąca widzi błąd po mniej więcej tym opóźnieniu. - WASM funkcje działają wewnątrz samej usługi, z ograniczeniami dotyczącymi pamięci, czasu i instrukcji. Funkcja WASM może raportować wiersze dziennika, które pojawiają się w polu
logsodpowiedzi; funkcja Deno nie może.
3. Koperta i tryb surowy
Usługa ma dwa sposoby zwrócenia odpowiedzi funkcji, wybranej przez nagłówek żądania X-Aurabase-Invoke-Mode.
| Koperta (domyślna) | Surowe (raw) | |
|---|---|---|
| Stan HTTP | Zawsze 200 | Własny status funkcji |
| Ciało | { data: { status, headers, body, logs, duration_ms }, meta } | Bajty funkcji |
| Treść | Tekst JSON lub UTF-8 | Wszystko, łącznie z binarnym |
| Używany przez | responseType: 'json', Studio | 'text', 'blob', 'arrayBuffer', bezpośredni HTTP |
Koperta istnieje w taki sposób, że jedna odpowiedź JSON może zawierać status, nagłówki i czas trwania połączenia. Jego ograniczeniem jest to, że bajty nie mogą być przesyłane w formacie JSON: dlatego odpowiedź binarna wymaga trybu surowego. Zestaw SDK wybiera tryb spośród responseType.
W trybie surowym usługa dodaje x-aurabase-invoke-origin: function do odpowiedzi Twojej funkcji. Błąd pochodzący z bramy lub środowiska wykonawczego go nie przenosi. W ten sposób SDK oddziela FunctionsHttpError (odpowiedź na Twoją funkcję) od FunctionsRelayError (platforma uległa awarii).
4. Czas, pomiary i awarie
Trzy limity czasu są zagnieżdżone, tak że żaden nie kończy się przed tym, który się w nim znajduje:
Usługa czeka na czas wykonania dla timeout_secs plus margines. Ponieważ środowisko wykonawcze anuluje proces roboczy w timeout_secs, zwykle w tym momencie pojawia się błąd funkcji, a 504 TIMEOUT jest wyświetlany tylko wtedy, gdy samo środowisko wykonawcze przestaje odpowiadać. 504 oznacza zatem, że funkcja została uruchomiona i mogła mieć skutki: nie powtarzaj na ślepo nieidempotentnego wywołania.
Pomiar i kwota:
- Przed połączeniem usługa rezerwuje jedno wywołanie z limitu planu. Jeśli limit zostanie wyczerpany, wywołanie zatrzymuje się w tym miejscu za pomocą
403. - Po połączeniu rejestruje wywołanie i czas jego trwania w milisekundach.
- Jeśli połączenie nie powiedzie się, zanim Twoja funkcja odbierze, rezerwacja zostanie zwolniona i nic nie będzie liczone.
5. Co następuje dla Twojego kodu
- Niech każde połączenie będzie krótkie i bezstanowe. W przypadku długiej pracy umieść w kolejce zadanie.
- Staraj się, aby prośby i odpowiedzi były małe; umieść pliki w magazynie i przekaż referencje.
- Spraw, aby funkcje były idempotentne: ponowna próba zadania, ponowna próba klienta po błędzie sieci lub zduplikowane dostarczenie cron mogą spowodować dwukrotne uruchomienie kodu.
- Autoryzuj nagłówki tożsamości platformy, ponieważ są to jedyne wartości, których osoba wywołująca nie może sfałszować. Zobacz bezpieczeństwo.
- Zmierz własne opóźnienie: każde połączenie płaci za uruchomienie procesu roboczego. Minimalna funkcja zgłosiła
duration_ms: 74na stosie lokalnym.