← Cloudflare for Platforms / cloudflare-for-platforms / workers-for-platforms
Jak funguje Workers for Platforms
Architektura
Pokud znáte Workers, Workers for Platforms zavádí čtyři klíčové součásti: dispatch namespaces, dynamic dispatch Workers, user Workers a volitelně outbound Workers.
Dispatch namespace
Dispatch namespace je kontejner, který obsahuje všechny Workery vašich zákazníků. Vaše platforma vezme kód, který zákazníci napíší, a poté odešle požadavek API, který tento kód nasadí jako uživatelský Worker do namespace: například staging nebo production. Ve srovnání s Workers, to poskytuje:
- Neomezený počet Workerů - Na Workers ve jmenném prostoru se nevztahují žádné limity skriptů na účet
- Izolace ve výchozím nastavení - Každý uživatelský Worker ve jmenném prostoru běží v nedůvěryhodný režim : uživatelské Workery si nikdy nesdílejí cache ani při běhu ve stejné zóně Cloudflare a nemají přístup k
request.cfobjekt - Dynamické vyvolávání - Váš dynamický dispatch Worker může volat libovolný Worker ve jmenném prostoru pomocí
env.DISPATCHER.get("worker-name")
Dynamický dispatch Worker
Dynamic dispatch Worker je vstupní bod pro všechny požadavky směřující na vaši platformu. Váš dynamic dispatch Worker:
- Směruje požadavky - Určuje, který zákaznický Worker má zpracovat každý požadavek na základě hostname, cesty, hlaviček nebo jiných kritérií
- Spouští platformní logiku - Provádí autentizaci, omezování rychlosti nebo ověřování požadavků před spuštěním kódu zákazníka
- Nastavuje limity pro jednotlivé zákazníky - Vynucuje vlastní limity na dobu využití CPU a dílčí požadavky podle typu plánu
- Sanitizuje odpovědi - Upravuje nebo filtruje odpovědi od zákaznických Workers
Dynamic dispatch Worker používá vazba dispatch namespace k vyvolání uživatelských Workerů:
export default {
async fetch(request, env) {
// Determine which customer Worker to call
const customerName = new URL(request.url).hostname.split(".")[0];
// Get and invoke the customer's Worker
const userWorker = env.DISPATCHER.get(customerName);
return userWorker.fetch(request);
},
};User Workers
User Workers obsahují kód napsaný vašimi zákazníky. Zákazník odešle svůj kód vaší platformě a vy poté odešlete požadavek API, který jeho jménem nasadí uživatelský Worker. User Workers se nasazují do dispatch namespace a volá je váš dynamic dispatch Worker. Uživatelským Workerům můžete poskytnout vazby pro přístup ke KV, D1, R2 a dalším prostředkům Cloudflare.
Outbound Worker (volitelné)
odchozí Worker zachytává fetch() požadavky odeslané uživatelskými Workery. Použijte ho k:
- Řiďte odchozí provoz - Blokujte nebo povolte externí volání API z kódu zákazníka
- Protokolování požadavků - Sledujte, jaké externí služby zákazníci volají
- Úprava požadavků - Přidejte autentizační hlavičky nebo transformujte požadavky, než opustí vaši platformu
Životní cyklus požadavku
- Požadavek dorazí na váš dynamic dispatch Worker (například
customer-a.example.com/api) - Váš dynamický dispatch Worker určuje, který uživatelský Worker má požadavek zpracovat
- Dynamic dispatch Worker volá
env.DISPATCHER.get("customer-a")k získání uživatelského Workeru - Uživatelský Worker se spustí. Pokud provede externí
fetch()volání a je nakonfigurovaný outbound Worker, tyto požadavky nejprve projdou přes outbound Worker. - Uživatelský Worker vrátí odpověď
- Váš dynamický dispatch Worker může volitelně upravit odpověď před jejím vrácením
Workers for Platforms oproti Service bindings
Jak Workers for Platforms, tak Service bindings umožňují komunikaci mezi Workery. Service bindings použijte, pokud přesně víte, které Workery spolu potřebují komunikovat. Workers for Platforms použijte v případě, že user Workery nahrávají dynamicky vaši zákazníci.
Obojí můžete používat současně: váš dynamický dispatch Worker může pomocí Service bindings volat interní služby a zároveň předávat požadavky uživatelským Workerům v namespace.