Edge computing med Cloudflare Workers og Deno · leksjon

Forklaring av Durable Objects

Forstå Durable Objects for tilstandfulle serverløse applikasjoner som opprettholder en konsistent tilstand globalt.

Leksjon 2 av 411 trinn

Forklaring av Durable Objects er en gratis leksjon i Edge computing med Cloudflare Workers og Deno på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Edge computing med Cloudflare Workers og Deno, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Edge computing med Cloudflare Workers og Deno inneholder totalt 4 leksjoner.

Tilstandsproblemet på kanten

Serverløse funksjoner, som Cloudflare Workers, er vanligvis tilstandsløse. Det betyr at hver forespørsel behandles uavhengig, uten at tidligere interaksjoner huskes.

Dette er bra for skalerbarhet og kostnadseffektivitet, men hva om du må opprettholde en konsistent informasjonsdel på tvers av flere forespørsler eller brukere globalt? Tenk på et chatterom i sanntid, en spillobby eller en delt teller.

Introduksjon til Durable Objects

Cloudflare Durable Objects løser denne grunnleggende utfordringen. De er en kraftig byggestein for å lage tilstandsfulle serverløse applikasjoner direkte på kanten.

  • De tilbyr ett enkelt, globalt konsistent objekt.
  • Hver Durable Object-instans har en unik ID og sitt eget private lager.
  • De fungerer som små, persistente servere som kjører på kanten.

Unike ID-er og global konsistens

Kjerneideen bak Durable Objects er deres unike identitet. Når du oppretter eller henter et Durable Object ved hjelp av en bestemt ID, sørger Cloudflare for at det globalt bare finnes og kjører én instans av dette objektet.

Uansett hvor en forespørsel kommer fra (for eksempel Tokyo, New York eller London), blir den sendt til den samme enkeltstående, konsistente instansen hvis den gjelder samme Durable Object-ID. Dette eliminerer behovet for kompleks distribuert synkronisering.

Anatomien til et Durable Object

Et Durable Object defineres som en standard JavaScript-klasse. Den må ha:

  • En constructor(state, env)-metode, der state gir tilgang til objektets lager, og env inneholder miljøvariabler.
  • En async fetch(request)-metode, som behandler innkommende HTTP-forespørsler, på samme måte som en vanlig Worker.

Det er i hovedsak en selvstendig, tilstandsfull mini-Worker.

Persistent lagring med state.storage

Hver Durable Object-instans har sitt eget private, persistente nøkkel-verdi-lager, som er tilgjengelig via this.state.storage. Dette gjør at objektet kan bevare data mellom kjøringer og til og med etter omstarter.

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

Verdier kan være alle typer som kan serialiseres som JSON, noe som gjør løsningen fleksibel for ulike databehov.

Kode: teller-Worker og DO

Dette eksempelet viser en Cloudflare Worker som samhandler med et enkelt Counter-Durable Object. DO-et vedlikeholder en teller som bevares mellom forespørsler og er globalt konsistent.

For å kjøre dette må du definere bindingen til Counter-Durable Object i filen wrangler.toml.

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);
  }
};

Slik fungerer tellerkoden

1. Klassen Counter definerer Durable Object-objektets virkemåte, håndterer rutene /increment, /decrement og /get, og lagrer value.

2. Hoved-Workerens fetch-behandler:

  • Den bruker env.COUNTER.idFromName("global-counter") for å hente en deterministisk ID for telleren vår.
  • env.COUNTER.get(id) returnerer en stub, som er en nettverksproxy til Durable Object-objektet.
  • stub.fetch(request) videresender den opprinnelige forespørselen til Durable Object-forekomsten, slik at den kan behandle forespørselen og oppdatere tilstanden sin.

Global konsistens i praksis

Se for deg at brukere fra ulike steder (for eksempel Europa, Asia og Amerika) alle samhandler med /increment-endepunktet til Workeren din. Siden de alle bruker ID-en "global-counter", garanterer Cloudflare at de samhandler med nøyaktig den samme forekomsten av Durable Object-objektet Counter.

Dette sikrer at tellingen alltid er konsistent, uavhengig av hvor brukeren befinner seg, og forenkler kompleks distribuert tilstandsadministrasjon som ellers ville vært svært utfordrende.

Vanlige bruksområder for DO-er

Durable Objects egner seg svært godt i situasjoner som krever sterk konsistens og delt, foranderlig tilstand ved kanten:

  • Samarbeid i sanntid: Delte whiteboardtavler og redigering av dokumenter.
  • Spill: Spill-lobbyer, spillerstatus og matchmaking.
  • Direktechat: Chatterom og meldingskøer for kommunikasjon i sanntid.
  • Tilstandsfulle API-er: Administrasjon av brukerøkter, handlekurver eller unike ressurslåser.

De bringer tradisjonelle tilstandsfulle mønstre til den serverløse kanten, slik at komplekse applikasjoner blir enklere å utvikle.

Kort kontroll: Durable Objects

Hvilket av alternativene nedenfor beskriver best den viktigste fordelen med Cloudflare Durable Objects?

Oppsummering: Durable Objects forklart

I denne leksjonen utforsket vi Cloudflare Durable Objects, et kraftig verktøy for tilstandsfulle serverløse applikasjoner.

  • De tilbyr globalt konsistent tilstand i én enkelt forekomst ved kanten.
  • Hvert DO har en unik ID og privat, varig lagring (state.storage).
  • Workers samhandler med DO-er ved å hente stubber og videresende forespørsler.
  • De egner seg svært godt for sanntids-, samarbeids- og tilstandsfulle applikasjoner som krever sterk konsistens.

Durable Objects bygger bro mellom serverløse systemer uten tilstand og tradisjonelle tilstandsfulle tjenester, og forenkler komplekse distribuerte systemer.

Gratis å komme i gang

Lær deg Edge computing med Cloudflare Workers og Deno med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
47

Ofte stilte spørsmål

Er leksjonen «Forklaring av Durable Objects» gratis?

Ja – hele teksten i «Forklaring av Durable Objects» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Edge computing med Cloudflare Workers og Deno-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Edge computing med Cloudflare Workers og Deno inneholder totalt 4 leksjoner.

Hva lærer jeg i «Forklaring av Durable Objects»?

Forstå Durable Objects for tilstandfulle serverløse applikasjoner som opprettholder en konsistent tilstand globalt. Du øver på Edge computing med Cloudflare Workers og Deno med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Edge computing med Cloudflare Workers og Deno?

Ingen tidligere erfaring er nødvendig. Edge computing med Cloudflare Workers og Deno på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Forklaring av Durable Objects»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

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

Ja. Alle Edge computing med Cloudflare Workers og Deno-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Cloudflare KV-lager
  2. Forklaring av Durable Objects
  3. Integrering av Deno med edge-lagring
  4. Spørringer med D1 SQL på edge
← Tilbake til Edge computing med Cloudflare Workers og Deno