Serverlet
Automaticky škálované kontejnery v izolovaných microVM.
Úvod
Serverlet je výpočetní jednotka Futrou — to, co skutečně provozuje vaši aplikaci. Je to spravovaný, automaticky škálovaný kontejner s bezserverovým zážitkem: dáte mu image kontejneru a zvolíte, kolik dostane CPU a RAM, a o zbytek — spuštění, udržení v chodu i škálování podle zátěže — se stará Futrou. Každý serverlet běží v izolovaném microVM, takže nikdy nesdílí jádro s jiným workloadem.
Serverlet má v průběhu své existence nula, jednu nebo víc běžících instancí — dokáže se při nečinnosti stáhnout na nulu a při zátěži zase naskočit na víc instancí, aniž byste sami spravovali stroje pod tím.
Pokud jste už používali nějakou kontejnerovou platformu, serverlet je nejblíž spravované kontejnerové službě: nespravujete VM ani holý server, ale ani nepíšete Kubernetes manifesty. Přinesete image, Futrou ho spustí.
Vytvoření serverletu
Při vytvoření serverletu zadáváte název, image, architekturu a plán. Škálování a všechno ostatní si můžete doladit i později.
- Region — kde serverlet běží, nebo Auto, aby ho zvolilo Futrou.
- Název Serverletu — používá se v administraci i ve vygenerované interní doméně.
- Architektura —
AMD64neboARM64, podle vašeho image. - Image — libovolný Docker image, výchozí je
futrou/serverlet:latest. - Min / Max instancí — rozsah pro autoscaling; nastavením obou na stejnou hodnotu získáte pevný počet instancí.
- Plán Serverletu — úroveň CPU a RAM. Viz Plány.
Image
Každý serverlet běží na Docker image — buď vlastním, publikovaném v libovolném registru, nebo na základním image Futrou, který si rozšíříte. Není tu žádný buildpack krok ani nahrávání zdrojového kódu: pokud to běží jako kontejner, běží to jako serverlet. Image může mít až 3 GiB — viz Limity pro tento a další limity platformy.
Plány
Každý serverlet běží na plánu — pevné úrovni CPU a RAM. Větší plány stojí víc za minutu, ale zvládnou víc zátěže na instanci.
- CPU — garantovaný výpočetní výkon serverletu, vyjádřený ve vCPU. Hodnota
0.5znamená garantovaných 50 % výpočetního času jednoho vCPU. Je to garance, ne strop — pokud má stroj pod tím volnou kapacitu, serverlet může dočasně čerpat i víc. - RAM — maximální paměť dostupná serverletu, rezervovaná a garantovaná jen pro něj.
- Volba plánu — menší plány se hodí pro statické weby, lehká API a úlohy na pozadí. Větší plány se hodí pro aplikace s reálným provozem nebo paměťově náročné workloady jako cache či databáze. Pokud si nejste jistí, začněte s menším plánem — kdykoliv ho můžete změnit, a v kombinaci s autoscalingem přidávat instance podle zátěže místo dimenzování jedné instance na špičku. Aktuální názvy plánů, přesné hodnoty CPU/RAM a ceny najdete ve výběru plánu při vytváření nebo úpravě serverletu v administraci — cena se zobrazuje za minutu i jako odhad měsíčních nákladů, ještě než ji potvrdíte.
- Účtování — serverlety se účtují po minutách běhu, sazbou zvoleného plánu, ze zůstatku kreditu vašeho workspacu. Zastavený serverlet se neúčtuje. Pokud serverlet běží ve více instancích, účtuje se každá instance zvlášť.
ENV
Konfigurace se předává přes proměnné prostředí, nastavené buď přímo na serverletu, nebo sdílené napříč celým projektem. Proměnné na úrovni projektu platí pro každý serverlet v projektu; proměnné na úrovni serverletu je přebijí, pokud definují stejný klíč. Proměnnou lze označit jako tajnou, čímž se její hodnota v administraci skryje.
Futrou navíc automaticky vkládá pár proměnných, aby vaše aplikace poznala, kde běží: FUTROU_WORKSPACE, FUTROU_PROJECT a FUTROU_SERVERLET.
Připojení storage
Serverlet může připojit jednu nebo víc storage, každou jako blokové zařízení na cestu, kterou zvolíte uvnitř kontejneru. Danou storage lze na serverletu připojit vždy jen na jednu cestu — storage odkázaná dvakrát se dvěma různými cíli není podporovaná konfigurace, protože připojení je jedna dvojice {storage: cesta}. Stejnou storage lze nezávisle připojit i do jiných serverletů nebo instancí; viz Storage → Připojení do serverletů.
Po připojení jde o skutečný lokální souborový systém, takže vaše aplikace v něm může vytvářet a následovat symlinky jako v jakémkoliv jiném adresáři — na rozdíl od S3-kompatibilního API a Storage API storage, které symlink nikdy nenásledují.
Logy
Na stránce serverletu v administraci můžete streamovat a prohledávat logy napříč všemi instancemi v reálném čase. Co se přesně zaznamenává, popisují Logy.
Metriky
Stránka serverletu dále zobrazuje metriky CPU, RAM a sítě v reálném čase a konzoli v prohlížeči pro shell uvnitř běžící instance — bez SSH klienta nebo nastavování klíčů.
Region
Serverlety běží v konkrétním regionu, nebo ho můžete nechat na Auto a nechat výběr na Futrou. Proxy a DNS zóny stejného projektu se obvykle umísťují do stejného regionu, aby cesta mezi nimi byla co nejkratší.
Akce
Serverlet lze spravovat ze své stránky v administraci, buď jako celek, nebo po jednotlivých instancích:
- Spustit — naběhne znovu na stejném image a nastavení jako předtím.
- Zastavit — konfigurace se zachová a nic se nesmaže; v zastaveném stavu se nic neúčtuje.
- Restartovat — zastavení následované spuštěním. Pokud se vaše aplikace nevypíná čistě, restart může přerušit rozpracované požadavky — kde je to možné, raději nasaďte novou verzi přes změnu image nebo konfigurace, než abyste změny natahovali restartem.
Škálování
Serverlet může běžet ve víc než jedné instanci najednou. Škálování se nastavuje čtyřmi hodnotami: Min instancí, Max instancí a prahy škálování pro CPU/RAM (v procentech, výchozí 75 %). Jakmile průměrné využití napříč běžícími instancemi překročí práh, Futrou přidá instanci, až po nastavené maximum; jakmile využití klesne, jednu odebere, až po minimum.
Nastavením Min a Max na stejné číslo autoscaling vypnete a počet instancí zůstane pevný.
Škálování na nulu
Nastavením Min instancí na 0 umožníte serverletu při nečinnosti stáhnout se úplně dolů — žádná běžící instance, nic se neúčtuje. Když na proxy dorazí požadavek pro serverlet bez běžící instance, Futrou ji spustí a požadavek zatím podrží. Pokud instance naběhne do 20 sekund, první požadavek se na ni přepošle a volající dostane normální odpověď, jen o něco pomaleji. Pokud instance včas nenaběhne, proxy vrátí 504 Gateway Timeout — klient (nebo vaše vlastní retry logika) musí požadavek poslat znovu, což už instanci typicky zastihne spuštěnou.
Škálování na nulu se proto hodí pro služby s nízkým provozem nebo interní služby, kde je občasný pomalejší první požadavek přijatelný, a nehodí se pro cokoliv, co si nemůže dovolit prodlevu studeného startu po nečinnosti.
Rolling update
Změna image, plánu nebo proměnných prostředí serverletu spustí rolling update — staré a nové instance běží chvíli vedle sebe a provoz se plynule přesouvá bez výpadku. Nové instance se spouští po dávkách (čtvrtina vašeho max počtu instancí najednou, minimálně jedna), staré se odebírají od nejstarší, jak je nahrazují nové. Stará instance přestane přijímat nové požadavky, jakmile je na řadě k nahrazení, ale dostane krátkou ochrannou dobu na dokončení už rozpracovaných požadavků, než se zastaví.
Změna čistě směrovacích nastavení — portů, volumes, nebo samotného rozsahu min/max instancí — rolling update nespouští, protože pro ni instance nemají na co nabíhat; taková změna se projeví okamžitě.
Synchronizace konfigurace
Většina změn — image, plán, počet instancí, proměnné prostředí — se projeví automaticky. Pokud se někdy serverlet zdá být neseřízený s uloženou konfigurací, ruční akce synchronizace ji znovu použije.
Zpřístupnění na internetu
Nově vytvořený serverlet není sám o sobě dostupný z internetu — potřebuje před sebou proxy. Futrou ji při vytvoření serverletu vytvoří automaticky a zpřístupní ho na vygenerované adrese *.futrou.cloud. Kdykoliv můžete přidat vlastní doménu, upravit směrování, nebo vytvořit další proxy; podrobnosti viz Proxy.
Naposledy upraveno