← Sandbox SDK / sandbox / 1-0-preview
Životní cyklus sandboxu
Vaše aplikace adresuje sandbox pomocí ID sandboxu. Linuxové prostředí, které spouští příkazy a uchovává lokální soubory, je kontejner. ID může existovat déle než kterýkoli jednotlivý container.
Tento rozdíl je důležitý pro procesy, terminály, soubory a obnovu po zastavení kvůli nečinnosti nebo po nahrazení.
ID sandboxu a kontejner
Většina aplikací používá jeden sandbox na uživatele nebo úlohu:
const sandbox = getSandbox(env.Sandbox, "user-123");const sandbox = getSandbox(env.Sandbox, "user-123");| Význam | |
|---|---|
| ID sandboxu | Řetězec, který předáte do getSandbox (například "user-123"). Pro pozdější přístup ke stejnému sandboxu použijte stejné ID. |
| Durable Object | Koordinátor stojící za tímto ID. Stejné ID se vždy mapuje na stejnou identitu Durable Object. |
| Kontejner | Aktuální Containers instance, která pro sandbox spouští úlohy Linuxu. |
| Proces nebo terminál | Program nebo interaktivní PTY uvnitř aktuální kontejner. |
| Místní soubory | Soubory na disku daného kontejneru (například v adresáři /workspace). |
Stejné ID sandboxu neznamená stejný kontejner. Poté, co se kontejner zastaví nebo je nahrazen, může další práce pro dané ID běžet v novém kontejneru.
Když se kontejner spustí
getSandbox() se vrátí okamžitě. Sama o sobě kontejner nespustí.
Kontejner se spustí, jakmile ho nějaká operace potřebuje, například exec(), createTerminal(), nebo zápis souboru. První spuštění po nasazení nebo po nečinnosti může trvat déle než volání za tepla. Pokud kontejner ještě není připraven, SDK může vyvolat ContainerUnavailableError. Tato chyba znamená, že operace uvnitř containeru nezačala. Viz Chyby a zotavení.
Dokud kontejner běží
Dokud je pro dané sandbox ID spuštěný kontejner:
- Procesy a terminály běží dál, dokud neskončí nebo je nezastavíte.
- Místní soubory zůstávají v daném kontejneru k dispozici.
- Pozdější požadavky Workeru mohou volat
getProcessnebogetTerminala pokračovat, pokud to kontejner ještě má daný prostředek.
Podrobnosti procesu: Jak dlouho proces žije. Terminály: Terminály.
Když se kontejner zastaví nebo je nahrazen
Kontejner není trvalý. Cloudflare jej může zastavit po době nečinnosti. Zastavit se může také po chybách, nebo když jej platforma nahradí během běžného provozu (například po některých nasazeních).
Když se to stane:
- Vaše aplikace stále používá stejné ID sandboxu.
- Procesy a terminály ze starého kontejneru zanikly, včetně jejich ID a bufferů živých logů.
- Místní soubory ze starého kontejneru jsou pryč, pokud je vaše aplikace neobnovila (například pomocí záloha nebo připojený bucket).
- Další skutečná práce může spustit nový kontejner pro stejné sandbox ID.
- Handles z předchozího kontejneru selhávají do uzavřeného stavu.
getProcessagetTerminalvrátitnullkdyž daný prostředek není v aktuálním kontejneru. Tato vyhledávání nespouštějí kontejner jen kvůli zodpovězení dotazu.
Chcete-li v práci pokračovat později, uložte si úloha (co spustit, cwd, env, a libovolný checkpoint aplikace), nejen ID procesu nebo terminálu.
Zastavení při nečinnosti, nahrazení a zničení
| Událost | Co zůstává | Co bylo odstraněno |
|---|---|---|
| Zastavení při nečinnosti | ID sandboxu a identita Durable Object | Procesy, terminály a lokální soubory ze zastaveného kontejneru |
| Nahradit (selhání, nasazení nebo jiná náhrada) | ID sandboxu a identita Durable Object | Stejné jako zastavení při nečinnosti u předchozího kontejneru |
destroy() |
Řetězec ID sandboxu lze později znovu použít | Předchozí práci pro danou generaci považujte za dokončenou |
Po zastavení kvůli nečinnosti nebo výměně může další skutečná práce spustit nový kontejner pro stejné sandbox ID. Staré handly procesů a terminálů jsou neplatné. Postupy obnovy: Chyby a zotavení.
keepAlive a sleepAfter mění chování při nečinnosti. Nedrží jednu instanci kontejneru navždy v běhu. Podrobnosti o stabilním API životního cyklu a Možnosti sandboxu (ignoruje možnosti transport a default-session na @next).
Stav, který přežije kontejner
Pouze to, co vaše aplikace uchovává (nebo obnovuje), přežije nový kontejner:
| Potřeba | Co musí existovat mimo kontejner |
|---|---|
| Najděte sandbox znovu | ID sandboxu |
| Pokračování v práci při pozdějším požadavku | ID prostředku zatímco aktuální kontejner ho stále má, plus dostatek kontextu úlohy pro nové spuštění, pokud ho nemá |
| Přetrvání po zastavení nebo nahrazení | úloha: příkaz nebo nastavení terminálu, cwd, env, checkpoint |
| Zachovejte soubory po vytvoření nového kontejneru | Metadata zálohy, konfigurace připojení nebo jiné trvalé úložiště |