Edge computing med Cloudflare Workers og Deno · Lektion

Forklaring af Durable Objects

Forstå Durable Objects til stateful serverløse applikationer, der bevarer en konsistent tilstand globalt.

Lektion 2 af 411 trin

Forklaring af Durable Objects er en gratis Edge computing med Cloudflare Workers og Deno-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Edge computing med Cloudflare Workers og Deno, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Edge computing med Cloudflare Workers og Deno-kurset indeholder 4 lektioner i alt.

Tilstandsproblemet ved kanten

Serverløse funktioner som Cloudflare Workers er typisk tilstandsløse. Det betyder, at hver forespørgsel behandles uafhængigt uden at huske tidligere interaktioner.

Det er godt for skalerbarhed og omkostningseffektivitet, men hvad nu hvis du har brug for at bevare et bestemt stykke information på tværs af flere forespørgsler eller brugere globalt? Tænk på et live-chatrum, en spillobby eller en delt tæller.

Introduktion til Durable Objects

Cloudflare Durable Objects løser denne grundlæggende udfordring. De er en effektiv byggesten til at udvikle tilstandsfulde serverløse applikationer direkte ved kanten.

  • De leverer et enkelt objekt med én instans og global konsistens.
  • Hver instans af et Durable Object har et unikt ID og sit eget private lager.
  • De fungerer som små, vedvarende servere, der lever ved kanten.

Unikke ID'er og global konsistens

Det centrale koncept bag Durable Objects er deres unikke identitet. Når du opretter eller henter et Durable Object ved hjælp af et bestemt ID, sikrer Cloudflare, at der kun findes og kører én instans af dette objekt globalt.

Uanset hvor en forespørgsel kommer fra (f.eks. Tokyo, New York eller London), bliver den sendt til den samme, konsistente instans, hvis den er rettet mod det samme Durable Object-ID. Det eliminerer behovet for kompleks distribueret synkronisering.

Et Durable Objects anatomi

Et Durable Object defineres som en standard-JavaScript-klasse. Den skal have:

  • En constructor(state, env)-metode, hvor state giver adgang til lageret, og env indeholder miljøvariabler.
  • En async fetch(request)-metode, der behandler indgående HTTP-forespørgsler på samme måde som en almindelig Worker.

Det er i praksis en selvstændig, tilstandsfuld mini-Worker.

Vedvarende lager med state.storage

Hver instans af et Durable Object har sit eget private, vedvarende nøgleværdilager, som er tilgængeligt via this.state.storage. Det gør det muligt for objektet at bevare data på tværs af kald og endda genstarter.

  • await this.state.storage.put('key', value): Gemmer data.
  • await this.state.storage.get('key'): Henter data.
  • await this.state.storage.delete('key'): Fjerner data.

Værdier kan være alle JSON-serialiserbare typer, hvilket gør løsningen alsidig til forskellige databehov.

Kode: Tæller-Worker og DO

Dette eksempel viser en Cloudflare Worker, der interagerer med et enkelt Counter-Durable Object. DO'et vedligeholder en tæller, der bevares på tværs af forespørgsler og er globalt konsistent.

For at køre dette skal du definere bindingen til Durable Object'et Counter i din wrangler.toml-fil.

export class Counter {
  constructor(state, env) {
    this.state = state;
    this.env = env;
  }

  async fetch(request) {
    let url = new URL(request.url);
    // Retrieve current count from storage, default to 0
    let currentCount = (await this.state.storage.get("value")) || 0;

    if (url.pathname === "/increment") {
      currentCount++;
      await this.state.storage.put("value", currentCount);
      return new Response(`Count: ${currentCount}`);
    } else if (url.pathname === "/decrement") {
      currentCount--;
      await this.state.storage.put("value", currentCount);
      return new Response(`Count: ${currentCount}`);
    } else if (url.pathname === "/get") {
      return new Response(`Count: ${currentCount}`);
    }

    return new Response("Not found", { status: 404 });
  }
}

export default {
  async fetch(request, env) {
    // Get a unique Durable Object ID based on a name
    // 'COUNTER' is the binding name configured in wrangler.toml
    let id = env.COUNTER.idFromName("global-counter");
    // Get a 'stub' (a proxy) to interact with the Durable Object
    let stub = env.COUNTER.get(id);

    // Forward the incoming request to the Durable Object's fetch method
    return stub.fetch(request);
  }
};

Sådan fungerer tællerkoden

1. Klassen Counter definerer Durable Object'ets adfærd, håndterer ruterne /increment, /decrement og /get og gemmer dets value.

2. Hoved-Workerens fetch-handler:

  • Den bruger env.COUNTER.idFromName("global-counter") til at hente et deterministisk ID til vores tæller.
  • env.COUNTER.get(id) returnerer en stub, som er en netværksproxy til Durable Object'et.
  • stub.fetch(request) videresender den oprindelige forespørgsel til Durable Object-instansen, så den kan behandle forespørgslen og opdatere sin tilstand.

Global konsistens i praksis

Forestil dig, at brugere fra forskellige steder (f.eks. Europa, Asien og Amerika) alle interagerer med endepunktet /increment i din Worker. Fordi de alle er rettet mod ID'et "global-counter", garanterer Cloudflare, at de alle interagerer med præcis den samme instans af Durable Object'et Counter.

Det sikrer, at tællingen altid er konsistent, uanset hvor brugeren befinder sig, og forenkler kompleks distribueret tilstandshåndtering, som ellers ville være meget udfordrende.

Almindelige anvendelser af DO'er

Durable Objects er ideelle i scenarier, der kræver stærk konsistens og delt, muterbar tilstand ved kanten:

  • Samarbejde i realtid: Delte whiteboards og redigering af dokumenter.
  • Spil: Spillobbyer, spillerstatus og matchmaking.
  • Livechat: Chatrum og beskedkøer til kommunikation i realtid.
  • Tilstandsfulde API'er: Håndtering af brugersessioner, indkøbskurve eller unikke ressourcelåse.

De bringer traditionelle tilstandsfulde mønstre til den serverløse edge og gør komplekse applikationer enklere at bygge.

Hurtigt tjek: Durable Objects

Hvilken af følgende beskriver bedst den primære fordel ved Cloudflare Durable Objects?

Opsummering: Durable Objects forklaret

I denne lektion udforskede vi Cloudflare Durable Objects, et effektivt værktøj til tilstandsfulde serverløse applikationer.

  • De leverer globalt konsistent tilstand i én instans ved kanten.
  • Hvert DO har et unikt ID og privat, varig lagring (state.storage).
  • Workers interagerer med DO'er ved at hente stubs og videresende forespørgsler.
  • De er ideelle til applikationer i realtid, samarbejdsapplikationer og tilstandsfulde applikationer, der kræver stærk konsistens.

Durable Objects bygger bro mellem stateless serverløse tjenester og traditionelle tilstandsfulde tjenester og forenkler komplekse distribuerede systemer.

Gratis at komme i gang

Lær Edge computing med Cloudflare Workers og Deno med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
47

Ofte stillede spørgsmål

Er lektionen “Forklaring af Durable Objects” gratis?

Ja — hele teksten til “Forklaring af Durable Objects” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Edge computing med Cloudflare Workers og Deno-kurset, skal du opgradere til CoddyKit PRO. Edge computing med Cloudflare Workers og Deno-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Forklaring af Durable Objects”?

Forstå Durable Objects til stateful serverløse applikationer, der bevarer en konsistent tilstand globalt. Du øver dig i Edge computing med Cloudflare Workers og Deno med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Edge computing med Cloudflare Workers og Deno?

Der kræves ingen tidligere erfaring. Edge computing med Cloudflare Workers og Deno på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Forklaring af Durable Objects”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Edge computing med Cloudflare Workers og Deno-lektion?

Ja. Alle Edge computing med Cloudflare Workers og Deno-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Cloudflare KV-lager
  2. Forklaring af Durable Objects
  3. Integration af Deno med edge-lagring
  4. Forespørgsler med D1 SQL på edge
← Tilbage til Edge computing med Cloudflare Workers og Deno