Dva aplikacijska strežnika v dveh regijah, en odjemalec, ki piše prek VPN, in vprašanje, ki ga nihče ni zapisal: katera komponenta odloči, da se je pisanje zgodilo? Usmerjanje pripelje zahtevo do procesa. Meja transakcije odloči, kdaj sprememba postane trajna in vidna. To so različna opravila, ki jih izvajajo različni sistemi, in vrzel med njimi je kraj, kjer živi večina napak pri pisanju v več regijah.

Začnite s poslovnim pravilom, ne z zemljevidom

Začnite s stavkom o poslovnem pravilu in ne o geografiji: katera branja in pisanja morajo uspeti skupaj in katere hkratne spremembe morajo biti med tem nemogoče. Pri rezervaciji zalog to pomeni, da preverjanje zalog in rezervacija bodisi oba začneta veljati bodisi noben, in nobeno drugo naročilo ne sme vmes porabiti iste enote.

RequirementWhat satisfies itWhat does not
All-or-nothing applicationA transaction inside one owning systemA VPN path between regions
No double spendIsolation strong enough to exclude the conflictAtomicity alone
Survive a region lossReplication the database itself documentsTwo independent databases behind one client

Prav tisto srednjo vrstico ekipe preskočijo. Atomarnost brez zadostne izolacije dvema transakcijama omogoči, da se vsaka pravilno potrdi in vseeno ustvarita stanje, ki se poslu zdi nemogoče, in nobena količina logike ponovnega poskusa tega pozneje ne popravi.

Ena avtoritativna meja premaga dva regionalna strežnika

Regionalni aplikacijski strežniki lahko ostanejo tam, kjer so, če operacijo predajo storitvi, ki jo izvede znotraj ene podprte meje transakcije. Aplikacijski sloj postane usmerjevalnik namere; podatkovni sloj ima resnico.

To mejo naj bo kratka in blizu podatkom, ki se jih dotika. Transakcija, ki ostane odprta, medtem ko človek odgovarja na poziv ali medtem ko klic prečka dve regiji, porabi svoj čas za držanje ključavnic in povečuje možnost, da bo nekaj drugega za njo poteklo. Ta napaka je videti kot težava podatkovne baze in je v resnici načrtovalska težava, oblečena v tako preobleko. Premik odločitve v podatkovni sloj jo običajno povsem odpravi.

BEGIN;
UPDATE inventory SET reserved = reserved + 1
 WHERE sku = 'A-100' AND available >= 1;
INSERT INTO reservation (sku, order_id) VALUES ('A-100', 'ord-9f');
COMMIT;

To skico berite kot mejo, ne kot priporočilo za zmogljivost. Bistvo je, da si preverjanje in vstavljanje delita eno potrditev, zato sočasno naročilo bodisi vidi zalogo porabljeno bodisi je sploh ne vidi.

Kaj replikirana podatkovna baza daje in česa ne

Replikirana podatkovna baza lahko zagotovi širšo mejo, ko to podpira njen lastni model transakcij. Spanner dokumentira atomske transakcije branja in pisanja znotraj ene podatkovne baze po tabelah, z določeno izolacijo in vedenjem ponovnega poskusa. To je jamstvo, ki ga berete, preizkušate in na katerega se namerno zanašate.

To je tudi jamstvo, ki prihaja od izdelka, ne od poti. VPN med regijami spremeni, kako potujejo paketi in kako se kažejo odpovedi. Ne razširi meje transakcije niti za eno vrstico, ne glede na to, kako zdravi se zdi tunel. Zamenjava obeh ustvari arhitekture, kjer vsaka komponenta opravi svoje preverjanje in podatki se še vedno ne ujemajo.

Dve podatkovni bazi ne postaneta en sistem

Dve neodvisno upravljani podatkovni bazi ne pridobita skupnega upravitelja transakcij zato, ker lahko odjemalci dosežejo obe. Če posel resnično potrebuje atomsko zavezo čez ta par, je treba mehanizem usklajevanja, udeležence in postopek obnovitve izbrati in kvalificirati, ne pa predpostaviti.

Pomislite na trenutek, ko udeleženec ali povezava izgine po tem, ko je bilo delo pripravljeno. Podprta porazdeljena potrditev lahko pusti negotovo stanje, ki potrebuje postopek obnovitve in človeško odločitev, in ne prinaša obljube, da bo vsaka regija ostala zapisljiva skozi vsako razdelitev.

Če je namesto tega sprejemljivo asinhrono usklajevanje, povejte to izrecno in zapišite vmesna poslovna stanja ter pravila usklajevanja. Veriga lokalno potrjenih korakov s kompenzacijo je legitimna zasnova; preprosto ni ena atomska transakcija pod drugim imenom.

Oblikujte ponovni poskus pred prvo prekinitvijo

Odjemalec lahko izgubi odgovor po tem, ko je bila operacija potrjena, zato klicatelj ne more časovne omejitve obravnavati kot napako. Ohranite trajno identiteto zahteve in pred ponovnim poskusom spremembe uporabite izid storitve ali mehanizem idempotentnosti, sicer ponovni poskus postane drugo pisanje.

Samodejni povratni klici transakcij se lahko izvedejo tudi več kot enkrat po ponovljivi prekinitvi, kar jih naredi za slab dom za nepovratne zunanje učinke. Te imejte zunaj povratnega klica, razen če delovni tok zanje določa izrecen varen protokol. Enaka previdnost velja za vse, kar stane denar ali pošlje sporočilo. Dvojna obremenitev je veliko težji pogovor kot dvojna vrstica dnevnika.

Sprejem bi moral odigrati štiri scenarije: dva odjemalca, ki se potegujeta za isto vrstico, prekinitev, za katero storitev pravi, da jo je mogoče ponoviti, potrditev, katere odgovor nikoli ne prispe, in izgubo regije ali povezave med njima. Zapišite potrjeni poslovni izid in nerazrešena stanja ob zasnovi usmerjanja, da nihče ne zamenja omrežja s komponento, ki daje jamstvo.

Sorodni članki