← Cloudflare Durable Objects / durable-objects / concepts
Co jsou Durable Objects?
Durable Object je zvláštní druh Cloudflare Worker která jedinečným způsobem spojuje výpočetní výkon s úložištěm. Podobně jako Worker se i Durable Object automaticky umístí geograficky blízko místu prvního požadavku, při potřebě se rychle spustí a v nečinnosti se vypne. Po celém světě jich můžete mít miliony. Na rozdíl od běžných Workers ale:
- Každý Durable Object má globálně jedinečný název, díky které můžete odesílat požadavky na konkrétní objekt odkudkoli na světě. Durable Object tak lze použít ke koordinaci mezi více klienty, kteří potřebují spolupracovat.
- Každý Durable Object má některé trvalé úložiště připojené. Protože toto úložiště existuje společně s objektem, je silně konzistentní, a přitom rychle dostupné.
Durable Objects proto umožňují stavové bezserverové aplikace.
Hlavní přednosti Durable Objects
Durable Objects mají vlastnosti, díky kterým se skvěle hodí pro distribuované stavové škálovatelné aplikace.
Serverless výpočet bez správy infrastruktury
- Durable Objects jsou postavené na Workers runtime, takže podporují přesně stejný kód (JavaScript a WASM) a mají podobné limity paměti a CPU.
- Každý Durable Object je vytvořen implicitně při prvním přístupu. Uživatelské aplikace se nemusí starat o jejich životní cyklus, vytváření ani rušení. Durable Objects migrují mezi funkčními servery, takže se aplikace nikdy nemusí starat o jejich správu.
- Každý Durable Object zůstává aktivní po celou dobu zpracovávání požadavků a po nečinnosti zůstává aktivní ještě několik sekund, než přejde do hibernace, což aplikacím umožňuje využít cachování v paměti při zpracování mnoha po sobě jdoucích požadavků a zvyšuje jejich výkon.
Úložiště ve stejném místě jako výpočet
- Každý Durable Object má vlastní trvalé, transakční a silně konzistentní úložiště (až 10 GB1), které přetrvává napříč požadavky a je přístupné pouze v rámci daného objektu.
Jednovláknová souběžnost
- Každý Instance Durable Object má identifikátor, ať už náhodně vygenerované, nebo vytvořené uživatelem, které vám umožňuje globálně určit, který Durable Object má danou akci nebo požadavek zpracovat.
- Durable Objects jsou jednovláknové a kooperativně multitaskingové, podobně jako kód běžící ve webovém prohlížeči. Podrobnosti o tom, jak je zajištěna bezpečnost a správnost, najdete v blogovém příspěvku "Durable Objects: Easy, Fast, Correct, Choose three" ↗.
Elastické horizontální škálování napříč globální sítí Cloudflare
- Durable Objects lze rozmístit po celém světě a můžete volitelně ovlivnit, kde má být každá instance umístěna. Durable Objects zatím nejsou dostupné ve všech datacentrech Cloudflare; přehled dostupnosti viz where.durableobjects.live ↗ projekt pro živé polohy.
- Každý typ Durable Object (nebo "Namespace binding" v terminologii Cloudflare) odpovídá třídě JavaScriptu, která implementuje samotnou logiku. Počet Durable Objects, které lze vytvořit pro jeden jmenný prostor, není nijak pevně omezen.
- Durable Objects se elasticky škálují, jakmile vaše aplikace vytváří miliony objektů. Aplikace nemusí spravovat infrastrukturu ani dopředu plánovat kapacitu.
Funkce Durable Objects
Stav v paměti
Každý Durable Object má vlastní stav v paměti. Aplikace mohou tento stav v paměti využít k optimalizaci svého výkonu tím, že si důležité informace uchovávají přímo v paměti, a vůbec tak nemusí přistupovat k trvalému úložišti.
Stav v paměti se hodí například pro dávkování a agregaci informací před jejich uložením, pro okamžité odmítání či zpracování příchozích požadavků splňujících určitá kritéria a pro řadu dalších případů.
Stav v paměti se resetuje ve chvíli, kdy Durable Object po určité době nečinnosti přejde do hibernace. Všechna data, která budete potřebovat i při dalším požadavku na Durable Object, je proto třeba uložit do trvalého úložiště.
Storage API
Durable Object Storage API umožňuje Durable Objects přistupovat k rychlému, transakčnímu a silně konzistentnímu úložišti. Připojené úložiště Durable Object je soukromé pro jeho jedinečnou instanci a jiné objekty k němu nemají přístup.
Storage API existuje ve dvou variantách: klíč-hodnota (KV) API a SQL API.
Při použití nový úložný backend SQLite v Durable Objects, máte přístup k oběma API. Pokud ale používáte předchozí úložiště, máte přístup pouze ke key-value API.
Alarms API
Durable Objects poskytují Alarms API která umožňuje naplánovat probuzení Durable Object v budoucím okamžiku. Hodí se to, když chcete provádět určitou práci pravidelně nebo v konkrétní čas, aniž byste museli sami spravovat infrastrukturu, jako jsou plánovače úloh.
Alarms můžete kombinovat se stavem uloženým v paměti a s durable storage API a vytvářet tak dávkové a agregační aplikace, jako jsou fronty, workflow nebo pokročilé datové pipeline.
WebSockets
WebSockets jsou dlouhotrvající TCP připojení, která umožňují obousměrnou komunikaci mezi klientem a serverem v reálném čase. Protože jsou relace WebSocketu dlouhotrvající, aplikace pro přijímání klientského i serverového připojení běžně používají Durable Objects.
Durable Objects fungují jako jediný koordinační bod mezi Cloudflare Workers, takže jedna instance Durable Object může spolu s WebSockets koordinovat více klientů, například účastníky chatovací místnosti nebo hráče ve víceuživatelské hře.
Durable Objects podporují Standardní WebSocket API, stejně jako WebSockets Hibernation API která rozšiřuje standardní webové WebSocket API a snižuje náklady tím, že během období nečinnosti neúčtuje poplatky.
RPC
Durable Objects podporují Workers Vzdálené volání procedur (RPC) která umožňuje aplikacím používat nativní metody a objekty JavaScriptu ke komunikaci mezi Workers a Durable Objects.
Komunikace přes RPC usnadňuje vývoj aplikací, zjednodušuje uvažování o jejich chování a zvyšuje efektivitu.
Programovací model aktorů
Na Durable Objects lze nahlížet i jiným způsobem, a to optikou Programovací model aktorů ↗. Existuje několik oblíbených příkladů modelu aktorů podporovaného na úrovni programovacího jazyka prostřednictvím runtime prostředí nebo knihovních frameworků, například Erlang ↗, Elixir ↗, Akka ↗, nebo Microsoft Orleans for .NET ↗.
Model Actor řeší řadu problémů distribuovaných systémů tím, že komunikaci mezi aktéry abstrahuje pomocí volání RPC (případně posílání zpráv), která lze implementovat nad libovolným přenosovým protokolem. Zároveň se tím vyhnete většině úskalí souběžnosti, k nimž dochází při práci se sdílenou pamětí, například souběhu (race conditions), kdy více procesů nebo vláken přistupuje ke stejným datům v paměti.
Instanci Durable Object lze chápat jako instanci Actor: přijímá zprávy (příchozí HTTP/RPC požadavky), provádí určitou logiku ve vlastním jednovláknovém kontextu s využitím připojeného trvalého úložiště nebo stavu v paměti a nakonec odesílá zprávy do vnějšího světa (odchozí HTTP/RPC požadavky nebo odpovědi), a to i jiné instanci Durable Object.
Každý Durable Object má určité možnosti, pokud jde o kolik práce zvládne, což by mělo ovlivnit v rámci aplikace architekturu, která plně využije možnosti platformy.
Durable Objects jsou nativně integrované do infrastruktury Cloudflare, takže díky nim získáte špičkovou serverless platformu pro vytváření distribuovaných stavových aplikací využívajících celou síť Cloudflare.
Durable Objects v Cloudflare
Durable Objects využívá řada produktů Cloudflare. V některých našich technických blogových příspěvcích najdete příklady reálného nasazení a scénáře použití, kdy Durable Objects usnadňují a zjednodušují vývoj aplikací.
Tyto články na blogu mohou být také inspirací, jak navrhnout škálovatelné aplikace pomocí Durable Objects a jak je integrovat se zbytkem Cloudflare Developer Platform.
- Durable Objects nejsou jen trvalé, jsou i rychlé: 10x zrychlení pro Cloudflare Queues ↗
- Pohled do zákulisí Stream Live, streamovací služby Cloudflare pro živé vysílání ↗
- DO it again: how we used Durable Objects to add WebSockets support and authentication to AI Gateway ↗
- Workers Builds: integrované CI/CD postavené na platformě Workers ↗
- Vytvářejte odolné aplikace na Cloudflare Workers: Workflows napíšete vy, o zbytek se postaráme my ↗
- Budování D1: globální databáze ↗
- Miliardy a miliardy (logů): škálování AI Gateway s Cloudflare Developer Platform ↗
- Indexování milionů HTTP požadavků pomocí Durable Objects ↗
Následující příspěvky na blogu vám pomohou pochopit některé technické aspekty implementace Durable Objects a způsob jejich fungování.
- Durable Objects: jednoduché, rychlé, spolehlivé. Vyberte si všechny tři ↗
- Úložiště SQLite s nulovou latencí v každém Durable Object ↗
- Workers Durable Objects Beta: A New Approach to Stateful Serverless ↗
Začínáme
Začněte ihned podle průvodce "Get started" pro vytvoření své první aplikace pomocí Durable Objects.
Poznámky pod čarou
-
Úložiště na jeden Durable Object se SQLite momentálně činí 1 GB. Pro obecnou dostupnost bude tento limit navýšen na 10 GB. ↩