Du aplikaj serviloj en du regionoj, unu kliento skribanta tra VPN, kaj demando, kiun neniu skribis: kiu komponanto decidas, ke la skribo okazis? Enkursigo portas la peton al proceso. Transakcia limo decidas, kiam la ŝanĝo fariĝas daŭra kaj videbla. Tiuj estas malsamaj taskoj plenumataj de malsamaj sistemoj, kaj la breĉo inter ili estas tie, kie loĝas la plej multaj eraroj de skriboj trans regionoj.

Komencu per la komerca regulo, ne per la mapo

Komencu per frazo pri la komerca regulo anstataŭ pri geografio: kiuj legadoj kaj skriboj devas sukcesi kune, kaj kiuj samtempaj ŝanĝoj devas esti neeblaj dum tio okazas. Por stoka rezervo tio signifas, ke la stoka kontrolo kaj la rezervo aŭ ambaŭ efikas aŭ neniu el ili, kaj neniu dua mendo rajtas konsumi la saman unuon intere.

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

Ĝuste tiun mezan vicon teamoj preterlasas. Atomeco sen sufiĉa izoleco permesas al du transakcioj ambaŭ ĝuste fiksi kaj tamen produkti staton, kiun la komerco konsideras neebla, kaj neniu kvanto de reklopoda logiko riparas tion poste.

Unu aŭtoritata limo superas du regionajn servilojn

Regionaj aplikaj serviloj povas resti tie, kie ili estas, kondiĉe ke ili sendas la operacion al servo, kiu plenumas ĝin ene de unu subtenata transakcia limo. La aplika tavolo fariĝas enkursigilo de intenco; la datumtavolo posedas la veron.

Tenu tiun limon mallonga kaj proksima al la datumoj, kiujn ĝi tuŝas. Transakcio tenata malfermita dum homo respondas al invito, aŭ dum voko transiras du regionojn, pasigas sian tempon tenante ŝlosilojn kaj pliigante la ŝancon, ke io alia elĉerpiĝos malantaŭ ĝi. Tiu malsukceso aspektas kiel datumbaza problemo kaj estas efektive projektproblemo portanta tian kostumon. Movi la decidon al la datumtavolo kutime forigas ĝin tute.

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;

Legu tiun skizon kiel limon, ne kiel agadrekomendon. La punkto estas, ke la kontrolo kaj la enmeto dividas unu fikson, do samtempa mendo aŭ vidas la stokon konsumita aŭ tute ne vidas ĝin.

Kion replikita datumbazo donas kaj kion ne

Replikita datumbazo povas provizi pli larĝan limon, kiam ĝia propra transakcia modelo subtenas tion. Spanner dokumentas atomajn legajn-skribajn transakciojn ene de unu datumbazo trans tabeloj, kun difinita izoleco kaj reklopoda konduto. Tio estas garantio, kiun vi legas, testas kaj konscie fidas.

Ĝi ankaŭ estas garantio, kiu venas de la produkto, ne de la itinero. VPN inter regionoj ŝanĝas kiel paketoj vojaĝas kaj kiel misfunkcioj prezentiĝas. Ĝi ne etendas transakcian limon eĉ je unu vico, kiom ajn sana la tunelo aspektas. Konfuzi la du kreas arkitekturojn, kie ĉiu komponanto trapasas sian propran kontrolon kaj la datumoj tamen malkonsentas.

Du datumbazoj ne fariĝas unu sistemo

Du sendepende administrataj datumbazoj ne akiras komunan transakcian administrilon ĉar klientoj povas atingi ambaŭ. Se la komerco vere bezonas atoman engaĝiĝon trans la paro, la kunordiga mekanismo, la partoprenantoj kaj la reakira procezo ĉiuj devas esti elektitaj kaj kvalifikitaj anstataŭ supozitaj.

Pensu pri la momento, kiam partoprenanto aŭ ligo malaperas post kiam laboro estis preparita. Subtenata distribuita fikso povas postlasi necertan staton, kiu bezonas reakiradan proceduron kaj homan decidon, kaj ĝi venas sen promeso, ke ĉiu regiono restos skribebla tra ĉiu disiĝo.

Se anstataŭe asinkrona kunordigado estas akceptebla, diru tion eksplicite kaj skribu la mezajn komercajn statojn plus la akordigajn regulojn. Ĉeno de loke fiksitaj paŝoj kun kompenso estas legitima desegno; ĝi simple ne estas unu atoma transakcio sub alia nomo.

Desegnu la reklopodon antaŭ la unua paneo

Kliento povas perdi la respondon post kiam la operacio fiksiĝis, do la alvokanto ne povas trakti tempolimon kiel malsukceson. Konservu daŭran petan identecon kaj uzu la rezulton de la servo aŭ idempotencan mekanismon antaŭ ol reklopodi ŝanĝon, alie la reklopodo fariĝas dua skribo.

Aŭtomataj transakciaj retroalvokoj ankaŭ povas plenumiĝi pli ol unufoje post reklopodebla ĉesigo, kio igas ilin malbona hejmo por nerevokeblaj eksteraj efikoj. Tenu tiujn ekster la retroalvoko, krom se la laborfluo difinas por ili eksplicitan sekuran protokolon. La sama singardemo validas por ĉio, kio kostas monon aŭ sendas mesaĝon. Duobla ŝarĝo estas multe pli malfacila konversacio ol duobla protokola linio.

Akcepto devus reludi kvar scenarojn: du klientoj konkurantaj por la sama vico, ĉesigo, kiun la servo diras rekloopebla, fikso, kies respondo neniam alvenas, kaj la perdo de regiono aŭ de la ligo inter ili. Registru la fiksitan komercan rezulton kaj la nesolvitajn statojn apud la enkursiga desegno, por ke neniu konfuzu la reton kun la komponanto, kiu provizas la garantion.

Rilataj artikoloj