Pagsusulat sa maraming rehiyon: saan ba talaga napupunta ang commit?
Dinadala ng pagruruta ang isang kahilingan sa isang rehiyon; tanging hangganan ng transaksyon ang nagpapaging atomiko sa pagsulat. Pangalanan ang invariant, piliin ang may-ari, at pagkatapos ay idisenyo ang muling pagsubok sa paligid nito.
Dalawang server ng aplikasyon sa dalawang rehiyon, isang kliyenteng nagsusulat sa pamamagitan ng VPN, at isang tanong na walang nakasulat: aling bahagi ang nagpapasya na nangyari ang pagsulat? Dinadala ng pagruruta ang kahilingan sa isang proseso. Ang hangganan ng transaksyon ang nagpapasya kung kailan nagiging matibay at nakikita ang pagbabago. Magkaibang gawain ang mga ito na ginagawa ng magkaibang sistema, at ang puwang sa pagitan nila ang tahanan ng karamihan ng mga bug sa pagsulat sa maraming rehiyon.
Magsimula sa patakaran ng negosyo, hindi sa mapa
Magsimula sa isang pangungusap tungkol sa patakaran ng negosyo at hindi sa heograpiya: aling mga pagbasa at pagsulat ang dapat magtagumpay nang sabay, at aling mga kasabay na pagbabago ang dapat imposible habang nangyayari ito. Para sa isang reserbasyon ng imbentaryo, ibig sabihin nito na ang pagsusuri ng stock at ang reserbasyon ay parehong magkakabisa o wala, at walang pangalawang order ang maaaring gumamit ng parehong yunit sa pagitan.
| 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 |
Iyan ang gitnang hilera na nilalaktawan ng mga team. Ang atomisidad na walang sapat na paghihiwalay ay nagpapahintulot sa dalawang transaksyon na bawat isa ay mag-commit nang tama at gayunman ay makabuo ng estadong itinuturing na imposible ng negosyo, at walang dami ng lohika ng muling pagsubok ang makakapag-ayos nito pagkatapos.
Isang makapangyarihang hangganan ang nananaig sa dalawang rehiyonal na server
Ang mga rehiyonal na server ng aplikasyon ay maaaring manatili kung nasaan sila, hangga't isinusumite nila ang operasyon sa isang serbisyong nagsasagawa nito sa loob ng isang sinusuportahang hangganan ng transaksyon. Ang antas ng aplikasyon ay nagiging router ng intensyon; ang antas ng datos ang may-ari ng katotohanan.
Panatilihing maikli ang hangganang iyon at malapit sa datos na hinahawakan nito. Ang transaksyong pinananatiling bukas habang may tao na sumasagot sa isang prompt, o habang may tawag na tumatawid sa dalawang rehiyon, ay ginugugol ang oras nito sa paghawak ng mga lock at pagpapataas ng tsansang may ibang mag-timeout sa likuran nito. Ang kabiguang iyon ay mukhang problema sa database at sa katunayan ay problema sa disenyo na nakabihis nang ganoon. Ang paglipat ng desisyon sa antas ng datos ay karaniwang nag-aalis nito nang buo.
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;
Basahin ang sketch na iyon bilang hangganan, hindi bilang rekomendasyon sa performance. Ang punto ay ang pagsusuri at ang pagpasok ay nagbabahagi ng isang commit, kaya ang kasabay na order ay nakikita ang stock na nagamit o hindi ito nakikita.
Ano ang ibinibigay at hindi ibinibigay ng replicated na database
Makapagbibigay ang replicated na database ng mas malawak na hangganan kapag sinusuportahan ito ng sarili nitong modelo ng transaksyon. Dinodokumento ng Spanner ang atomikong transaksyon ng pagbasa at pagsulat sa loob ng isang database sa mga talahanayan, na may tinukoy na paghihiwalay at pag-uugali ng muling pagsubok. Iyon ay garantiya na binabasa, sinusubok at sinasadyang pinagkakatiwalaan mo.
Ito rin ay garantiya na nagmumula sa produkto, hindi sa ruta. Ang VPN sa pagitan ng mga rehiyon ay nagbabago kung paano naglalakbay ang mga packet at kung paano lumilitaw ang mga kabiguan. Hindi nito pinapahaba ang hangganan ng transaksyon kahit isang hilera, gaano man kalusog ang hitsura ng tunel. Ang paghahalo ng dalawa ay gumagawa ng mga arkitekturang pumasa ang bawat bahagi sa sarili nitong pagsusuri at hindi pa rin tugma ang datos.
Dalawang database ay hindi nagiging isang sistema
Ang dalawang database na pinamamahalaang magkahiwalay ay hindi nakakakuha ng shared transaction manager dahil lang naaabot ng mga kliyente ang dalawa. Kung tunay na kailangan ng negosyo ang atomikong commitment sa buong pares, ang mekanismo ng koordinasyon, ang mga kalahok at ang proseso ng pag-recover ay dapat piliin at bigyan ng kwalipikasyon sa halip na ipalagay.
Isipin ang sandaling mawala ang isang kalahok o link pagkatapos maihanda ang trabaho. Ang sinusuportahang distributed commit ay maaaring mag-iwan ng hindi malinaw na estado na nangangailangan ng pamamaraan ng pag-recover at desisyon ng tao, at hindi ito dumarating na may pangakong mananatiling maisusulat ang bawat rehiyon sa bawat paghahati.
Kung sa halip ay katanggap-tanggap ang asynchronous na koordinasyon, sabihin ito nang malinaw at itala ang mga intermediate na estado ng negosyo kasama ang mga tuntunin ng pagkakasundo. Ang isang kadena ng lokal na na-commit na mga hakbang na may kompensasyon ay lehitimong disenyo; hindi lamang ito isang atomikong transaksyon na may ibang pangalan.
Idisenyo ang muling pagsubok bago ang unang outage
Maaaring mawala ng kliyente ang tugon pagkatapos ma-commit ang operasyon, kaya hindi maituturing ng tumatawag ang timeout bilang kabiguan. Panatilihin ang matibay na pagkakakilanlan ng kahilingan at gamitin ang resulta ng serbisyo o mekanismo ng idempotency bago muling subukan ang isang mutasyon, kung hindi ay nagiging pangalawang pagsulat ang muling pagsubok.
Ang mga automatic na transaction callback ay maaari ring tumakbo nang higit sa isang beses pagkatapos ng muling masusubok na aborsyon, na nagpapaging masamang tahanan sila para sa hindi maibabalik na panlabas na epekto. Ilagay ang mga iyon sa labas ng callback maliban kung tinutukoy ng workflow ang malinaw na ligtas na protocol para sa kanila. Ganoon din ang pag-iingat para sa anumang bagay na gumagastos ng pera o nagpapadala ng mensahe. Ang doble na singil ay mas mahirap na usapan kaysa doble na log line.
Dapat i-replay ng acceptance ang apat na senaryo: dalawang kliyenteng nag-uunahan sa parehong hilera, isang aborsyong sinasabing muling masusubok ng serbisyo, isang commit na hindi kailanman dumarating ang sagot, at ang pagkawala ng isang rehiyon o ng link sa pagitan nila. Itala ang na-commit na resulta ng negosyo at ang mga hindi pa nalutas na estado sa tabi ng disenyo ng pagruruta, upang walang magkamali na ituring ang network bilang bahaging nagbibigay ng garantiya.