INTEGRITY Dokumentace

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:

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

Úložiště ve stejném místě jako výpočet

Jednovláknová souběžnost

Elastické horizontální škálování napříč globální sítí Cloudflare

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.

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í.

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

  1. Ú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. ↩