Көп аймақты жазу: өзгеріс шын мәнінде қайда бекітіледі?
Маршруттау сұранысты аймаққа жеткізеді; жазуды атомды ететін тек транзакция шекарасы. Инвариантты атаңыз, иесін таңдаңыз, содан кейін қайталауды соның айналасында жобалаңыз.
Екі аймақта екі қолданба сервері, VPN арқылы жазатын бір клиент және ешкім жазбаған сұрақ: жазу орындалды деп қай компонент шешеді? Маршруттау сұранысты процеске жеткізеді. Транзакция шекарасы өзгерістің қашан тұрақты және көрінетін болатынын шешеді. Бұл әртүрлі жүйелер орындайтын әртүрлі жұмыстар, және олардың арасындағы алшақтық — көп аймақты жазу қателерінің көбі тұратын жер.
Картадан емес, бизнес ережеден бастаңыз
География туралы емес, бизнес ереже туралы сөйлеммен бастаңыз: қандай оқулар мен жазулар бірге сәтті болуы керек және қандай бір мезгілдегі өзгерістер сол кезде мүмкін болмауы керек. Қорды брондау үшін бұл қорды тексеру мен брондау не екеуі де күшіне енеді, не ешқайсысы, және екінші тапсырыс сол аралықта сол бірлікті жұмсай алмайды дегенді білдіреді.
| Requirement | What satisfies it | What does not |
|---|---|---|
| All-or-nothing application | A transaction inside one owning system | A VPN path between regions |
| No double spend | Isolation strong enough to exclude the conflict | Atomicity alone |
| Survive a region loss | Replication the database itself documents | Two independent databases behind one client |
Дәл сол ортаңғы жолды командалар өткізіп жібереді. Жеткілікті оқшаулаусыз атомдылық екі транзакцияға жеке-жеке дұрыс бекітуге мүмкіндік береді және бәрібір бизнес мүмкін емес деп санайтын күйге әкеледі, ал кейін қандай да бір қайталау логикасы оны түзетпейді.
Бір беделді шекара екі аймақтық серверден басым
Аймақтық қолданба серверлері өз орнында қала алады, егер операцияны бір қолдау көрсетілген транзакция шекарасының ішінде орындайтын қызметке тапсырса. Қолданба қабаты ниеттің маршрутизаторына айналады; деректер қабаты шындықты иеленеді.
Бұл шекараны қысқа және ол тиетін деректерге жақын ұстаңыз. Адам сұраққа жауап беріп жатқанда немесе шақыру екі аймақтан өтіп жатқанда ашық ұсталған транзакция уақытын құлыптарды ұстауға жұмсайды және оның артында бірдеңе мерзімінен асып кету ықтималдығын арттырады. Бұл сәтсіздік дерекқор мәселесіне ұқсайды және шын мәнінде сондай киім киген жобалау мәселесі. Шешімді деректер қабатына көшіру әдетте оны толығымен жояды.
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;
Бұл эскизді шекара ретінде оқыңыз, өнімділік ұсынысы ретінде емес. Мәселе мынада: тексеру мен кірістіру бір бекітуді бөліседі, сондықтан бір мезгілдегі тапсырыс қорды жұмсалған деп көреді немесе мүлде көрмейді.
Репликаланған дерекқор не береді және не бермейді
Репликаланған дерекқор өзінің транзакция моделі қолдаса, кеңірек шекара бере алады. Spanner кестелер бойынша бір дерекқордың ішіндегі атомды оқу-жазу транзакцияларын анықталған оқшаулау және қайталау тәртібімен құжаттайды. Бұл сіз оқитын, сынайтын және әдейі сүйенетін кепілдік.
Бұл сонымен қатар өнімнен келетін кепілдік, маршруттан емес. Аймақтар арасындағы VPN пакеттердің қалай жүретінін және ақаулардың қалай көрінетінін өзгертеді. Туннель қаншалықты сау көрінсе де, ол транзакция шекарасын бір жолға да кеңейтпейді. Екеуін шатастыру әр компонент өз тексеруінен өтетін, ал деректер әлі де сәйкес келмейтін архитектураларды тудырады.
Екі дерекқор бір жүйеге айналмайды
Дербес басқарылатын екі дерекқор клиенттер екеуіне де жете алатындықтан ортақ транзакция менеджерін ала қоймайды. Егер бизнеске шын мәнінде осы жұп бойынша атомды міндеттеме қажет болса, үйлестіру механизмі, қатысушылар және қалпына келтіру процесі болжам жасалмай, таңдалып, біліктілігі расталуы керек.
Жұмыс дайындалғаннан кейін қатысушы немесе байланыс жоғалған сәтті ойлаңыз. Қолдау көрсетілген үлестірілген бекіту қалпына келтіру рәсімі мен адам шешімін қажет ететін күмәнді күй қалдыруы мүмкін, және ол әр бөліну кезінде әр аймақтың жазуға қабілетті болып қалатынына уәде бермейді.
Егер оның орнына асинхронды үйлестіру қолайлы болса, мұны анық айтыңыз және аралық бизнес күйлері мен келісім ережелерін жазыңыз. Өтемақымен жергілікті бекітілген қадамдар тізбегі заңды жобалау; ол жай ғана басқа атаумен бір атомды транзакция емес.
Қайталауды алғашқы іркілістен бұрын жобалаңыз
Клиент операция бекітілгеннен кейін жауапты жоғалтуы мүмкін, сондықтан шақырушы тайм-аутты сәтсіздік деп санай алмайды. Тұрақты сұраныс сәйкестігін сақтаңыз және өзгерісті қайталамас бұрын қызмет нәтижесін немесе идемпотенттік механизмін қолданыңыз, әйтпесе қайталау екінші жазуға айналады.
Автоматты транзакция кері шақырулары қайталауға болатын тоқтатудан кейін бірнеше рет орындалуы мүмкін, бұл оларды қайтарылмайтын сыртқы әсерлер үшін нашар үй етеді. Оларды кері шақырудан тыс ұстаңыз, егер жұмыс ағыны олар үшін анық қауіпсіз хаттаманы анықтамаса. Дәл осындай сақтық ақша жұмсайтын немесе хабарлама жіберетін кез келген нәрсеге қатысты. Қосарланған төлем қосарланған журнал жолынан әлдеқайда қиын әңгіме.
Қабылдау төрт сценарийді қайта ойнатуы керек: бір жол үшін жарысатын екі клиент, қызмет қайталауға болады деген тоқтату, жауабы ешқашан келмейтін бекіту және аймақтың немесе олардың арасындағы байланыстың жоғалуы. Бекітілген бизнес нәтижені және шешілмеген күйлерді маршруттау жобасының жанына жазыңыз, сонда ешкім желіні кепілдік беретін компонентпен шатастырмайды.