JavaScript Academy · Oppitunti

Uudelleenyritys- ja backoff-mallit

Yritä epäonnistunutta asynkronista työtä muutaman kerran viiveillä; lisää eksponentiaalinen backoff ja pieni jitter; lopeta selkeän enimmäismäärän jälkeen

Oppitunti 3/38 vaihetta

Uudelleenyritys- ja backoff-mallit on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu JavaScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.

Miksi yrittää uudelleen?

Tavoite: Lisätkää pieniä, hallittuja uudelleenyrityksiä.

  • Yksinkertainen uudelleenyrityslooppi
  • Eksponentiaalinen backoff
  • Pieni jitter
  • Selkeä yritysten enimmäismäärä
Uudelleenyritys- ja backoff-mallit — kuvitus 1

Viiveen apufunktio

Tarvitsette pienen viive-apufunktion, joka keskeyttää suorituksen yritysten välillä.

// delay: resolve after ms
function delay(ms) {
  return new Promise(function (resolve) {
    setTimeout(function () { resolve(); }, ms);
  });
}

async function demoDelay() {
  console.log("wait...");
  await delay(5);
  console.log("done");
}

demoDelay();
Uudelleenyritys- ja backoff-mallit — kuvitus 2

Simuloitu epävakaa työ

Tämän simuloidun tehtävän avulla voitte harjoitella uudelleenyrityksiä ilman todellisia verkkokutsuja.

// Unstable task: fails first N times, then succeeds
function makeUnstable(failCount, value) {
  let left = failCount;
  return async function run() {
    if (left > 0) {
      left = left - 1;
      throw new Error("temporary");
    }
    return value;
  };
}

const sometimes = makeUnstable(2, "OK");
sometimes().catch(function (e) { console.log("first:", e.message); });
Uudelleenyritys- ja backoff-mallit — kuvitus 3

Kiinteä uudelleenyrityslooppi

Kiinteä aikaväli: odottakaa yritysten välillä aina yhtä kauan ja lopettakaa enimmäisyritysmäärän jälkeen.

// Retry a few times with a fixed wait
async function retryFixed(fn, tries, waitMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        await delay(waitMs);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const result = await retryFixed(job, 3, 5);
  console.log("fixed result:", result);
})();
Uudelleenyritys- ja backoff-mallit — kuvitus 4

Eksponentiaalinen backoff

Backoff: kasvattakaa odotusaikaa jokaisella yrityksellä ja lisätkää pieni jitter piikkien välttämiseksi.

// Exponential backoff with a tiny jitter
function jitter(ms) {
  const wiggle = Math.floor(Math.random() * 3); // 0..2
  return ms + wiggle;
}

async function retryBackoff(fn, tries, baseMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        const wait = jitter(baseMs * Math.pow(2, i - 1));
        await delay(wait);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const value = await retryBackoff(job, 4, 3);
  console.log("backoff result:", value);
})();
Uudelleenyritys- ja backoff-mallit — kuvitus 5

Uudelleenyritysten vinkit

Vinkit:

  • Yrittäkää uudelleen vain tilapäisten virheiden yhteydessä, kuten aikakatkaisujen ja nopeusrajoitusten tapauksessa.
  • Älkää yrittäkö uudelleen virheellisten syötteiden vuoksi.
  • Pitäkää yritysten määrä pienenä (3–5) ja kirjatkaa epäonnistumiset lyhyesti.
Uudelleenyritys- ja backoff-mallit — kuvitus 6

Uudelleenyrityksen ja backoffin koe

Pikatarkistus: Backoffin perusteet.

Uudelleenyritys- ja backoff-mallit — kuvitus 7

Kertaus

Kertaus: Rakensitte kiinteän uudelleenyritysloopin, lisäsitte pienen jitterin sisältävän eksponentiaalisen backoffin ja määrititte yritysten enimmäismäärän, jotta sovellukset pysyvät responsiivisina.

Uudelleenyritys- ja backoff-mallit — kuvitus 8
Aloita maksutta

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
59
Oppitunnit
200

Usein kysytyt kysymykset

Onko oppitunti ”Uudelleenyritys- ja backoff-mallit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Uudelleenyritys- ja backoff-mallit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Uudelleenyritys- ja backoff-mallit”?

Yritä epäonnistunutta asynkronista työtä muutaman kerran viiveillä; lisää eksponentiaalinen backoff ja pieni jitter; lopeta selkeän enimmäismäärän jälkeen Harjoittelet JavaScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni JavaScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin JavaScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.

Kuinka kauan ”Uudelleenyritys- ja backoff-mallit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä JavaScript Academy-oppitunnilla?

Kyllä. Jokainen JavaScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Asynkronisten funktioiden kirjoittaminen; try/catch; rinnakkainen ja peräkkäinen suoritus
  2. Aikakatkaisut ja keskeyttäminen AbortControllerilla
  3. Uudelleenyritys- ja backoff-mallit
← Takaisin: JavaScript Academy