Twa applikaasjeservers yn twa regio's, ien klant dy't skriuwt fia in VPN, en in fraach dy't nimmen opskreaun hat: hokker komponint beslút dat it skriuwen bard is? Routing bringt it fersyk nei in proses. In transaksjegrins beslút wannear't de feroaring duorsum en sichtber wurdt. Dat binne ferskillende taken útfierd troch ferskillende systemen, en de kleau dêrtusken is wêr't de measte flaters by skriuwen oer regio's wenje.

Begjin by de bedriuwsregel, net by de kaart

Begjin mei in sin oer de bedriuwsregel ynstee fan oer geografy: hokker lêzen en skriuwen moatte tegearre slagje, en hokker tagelyk feroarings moatte ûnmooglik wêze wylst se dat dogge. Foar in foarriedreservearring betsjut dat de foarriedkontrôle en de reservearring of beide yn wurking tredde of gjinien, en gjin twadde bestelling mei deselde ienheid yn it midden ferbrûke.

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

Krek dy middelste rige slaan teams oer. Atomisiteit sûnder genôch isolaasje lit twa transaksjes elk korrekt befêstigje en dochs in steat produsearje dy't it bedriuw ûnmooglik achtet, en gjin hoemannichte werhellingslogika makket dat letter wer goed.

Ien gesachhawwende grins ferrint twa regionale servers

Regionale applikaasjeservers kinne bliuwe wêr't se binne, salang't se de operaasje yntsjinje by in tsjinst dy't dy yn ien stipe transaksjegrins útfiert. De applikaasjelaach wurdt in router fan bedoeling; de datalaach besit de wierheid.

Hâld dy grins koart en ticht by de gegevens dy't er oanrekket. In transaksje dy't iepen holden wurdt wylst in minske in fraach beantwurdet, of wylst in oprop twa regio's krúst, besteget syn tiid oan it hâlden fan slûzen en fergruttet de kâns dat eat oars efter him ferfalt. Dy flater liket in databankprobleem en is eins in ûntwerpprobleem dat him sa ferklaaid hat. It beslút nei de datalaach ferpleatse ferwideret it meastentiids hielendal.

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;

Lês dy skets as in grins, net as in prestaasje-oanbefelling. It punt is dat de kontrôle en it ynfoegjen ien befêstiging diele, dus in tagelyk bestelling sjocht de foarrie ferbrûkt of sjocht it hielendal net.

Wat in replisearre databank jout en net jout

In replisearre databank kin in bredere grins leverje as syn eigen transaksjemodel dat stipet. Spanner dokumintearret atomêre lês-skriuwtransaksjes binnen ien databank oer tabellen hinne, mei definiearre isolaasje en werhellingsgedrach. Dat is in garânsje dy't jo lêze, testen en bewust op fertrouwe.

It is ek in garânsje dy't fan it produkt komt, net fan de rûte. In VPN tusken regio's feroaret hoe't pakketten reizgje en hoe't flaters har foardogge. It ferlingt in transaksjegrins net mei ien rige, hoe sûn de tunnel der ek útsjocht. It ferwikseljen fan dy twa produsearret arsjitektueren wêr't elke komponint syn eigen kontrôle slagget en de gegevens dochs net oerienkomme.

Twa databanken wurde gjin ien systeem

Twa ûnôfhinklik behearde databanken krije gjin mienskiplike transaksjebehearder om't klanten beide berikke kinne. As it bedriuw wier in atomêre fêstlizzing oer it pear nedich hat, moatte it koördinaasjemeganisme, de dielnimmers en it werstelproses allegear keazen en kwalifisearre wurde ynstee fan oannommen.

Tink oan it momint dat in dielnimmer of in keppeling ferdwynt neidat it wurk taret is. In stipe ferspraat befêstiging kin in ûnwis steat efterlitte dy't in werstelproseduere en in minsklik beslút nedich hat, en it komt sûnder de tasizzing dat elke regio troch elke partysje skriuwber bliuwt.

As asynchrone koördinaasje ynstee akseptabel is, sis dat dan eksplisyt en skriuw de tuskenlizzende bedriuwssteaten plus de fermoedingsregels op. In keatling fan lokaal befêstige stappen mei kompensaasje is in legitime ûntwerp; it is gewoan net ien atoomêre transaksje ûnder in oare namme.

Untwerp de werhelling foar de earste útfal

In klant kin it antwurd ferlieze neidat de operaasje befêstige is, dus de oanropper kin in time-out net as in flater behannelje. Bewarje in duorsume fersykgemientiteit en brûk de útkomst fan de tsjinst of in idempotinsjemeganisme foardat in mutaasje werhelle wurdt, oars wurdt de werhelling in twadde skriuwing.

Automatyske transaksje-callbacks kinne ek mear as ien kear útfiere nei in werhelbere ôfbrek, wat har in min hûs makket foar ûnomkearbere eksterne effekten. Hâld dy bûten de callback, útsein as de wurkstream in eksplisyt feilich protokol dêrfoar definiearret. Deselde soarchsumens jildt foar alles wat jild kostet of in berjocht stjoert. In dûbele ôfskriuwing is in folle dreger petear as in dûbele lochrige.

Akseptaasje soe fjouwer senario's op 'e nij spylje moatte: twa klanten dy't om deselde rige stride, in ôfbrek dat de tsjinst werhelber neamt, in befêstiging wêrfan it antwurd nea oankomt, en it ferlies fan in regio of fan 'e keppeling dêrtusken. Registrearje it befêstige bedriuwsresultaat en de ûnoploste steaten njonken it routingûntwerp, sadat nimmen it netwurk ferwikselt mei de komponint dy't de garânsje jout.

Relatearre artikelen