Dua pelayan aplikasi dalam dua wilayah, satu klien yang menulis melalui VPN, dan satu soalan yang tiada siapa tulis: komponen mana yang memutuskan bahawa penulisan itu berlaku? Penghalaan membawa permintaan kepada satu proses. Sempadan transaksi memutuskan bila perubahan menjadi kekal dan kelihatan. Itu ialah kerja berbeza yang dilakukan oleh sistem berbeza, dan jurang antaranya ialah tempat kebanyakan pepijat penulisan berbilang wilayah tinggal.

Mula dengan peraturan perniagaan, bukan peta

Mulakan dengan ayat tentang peraturan perniagaan dan bukan tentang geografi: pembacaan dan penulisan mana yang mesti berjaya bersama, dan perubahan serentak mana yang mesti mustahil semasa ia berlaku. Bagi tempahan inventori itu bermakna pemeriksaan stok dan tempahan sama ada kedua-duanya berkuat kuasa atau tiada satu pun, dan tiada pesanan kedua boleh menggunakan unit yang sama di antaranya.

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

Baris tengah itulah yang dilangkau oleh pasukan. Keatoman tanpa pengasingan yang mencukupi membolehkan dua transaksi masing-masing commit dengan betul dan masih menghasilkan keadaan yang perniagaan anggap mustahil, dan tiada jumlah logik cubaan semula yang membaikinya selepas itu.

Satu sempadan berwibawa mengalahkan dua pelayan serantau

Pelayan aplikasi serantau boleh kekal di tempatnya, asalkan mereka menyerahkan operasi kepada perkhidmatan yang melaksanakannya dalam satu sempadan transaksi yang disokong. Lapisan aplikasi menjadi penghala niat; lapisan data memiliki kebenaran.

Kekalkan sempadan itu pendek dan dekat dengan data yang disentuhnya. Transaksi yang dibiarkan terbuka semasa manusia menjawab gesaan, atau semasa panggilan melintasi dua wilayah, menghabiskan masanya memegang kunci dan meningkatkan peluang sesuatu yang lain tamat masa di belakangnya. Kegagalan itu kelihatan seperti masalah pangkalan data dan sebenarnya masalah reka bentuk yang memakai pakaian sedemikian. Memindahkan keputusan ke lapisan data biasanya menghapuskannya sepenuhnya.

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;

Baca lakaran itu sebagai sempadan, bukan sebagai cadangan prestasi. Intinya ialah pemeriksaan dan sisipan berkongsi satu commit, jadi pesanan serentak sama ada melihat stok digunakan atau tidak melihatnya sama sekali.

Apa yang diberikan dan tidak diberikan oleh pangkalan data bereplikasi

Pangkalan data bereplikasi boleh menyediakan sempadan yang lebih luas apabila model transaksinya sendiri menyokongnya. Spanner mendokumenkan transaksi baca-tulis atomik dalam satu pangkalan data merentas jadual, dengan pengasingan dan tingkah laku cubaan semula yang ditetapkan. Itu ialah jaminan yang anda baca, uji dan bergantung padanya secara sengaja.

Ia juga jaminan yang datang daripada produk, bukan daripada laluan. VPN antara wilayah mengubah cara paket bergerak dan cara kegagalan menampilkan diri. Ia tidak melanjutkan sempadan transaksi walau satu baris, betapa sihatnya terowong itu kelihatan. Mengelirukan kedua-duanya menghasilkan seni bina di mana setiap komponen lulus pemeriksaan sendiri dan data masih tidak selaras.

Dua pangkalan data tidak menjadi satu sistem

Dua pangkalan data yang diurus secara bebas tidak memperoleh pengurus transaksi bersama kerana klien boleh mencapai kedua-duanya. Jika perniagaan benar-benar memerlukan komitmen atomik merentas pasangan itu, mekanisme penyelarasan, peserta dan proses pemulihan semuanya mesti dipilih dan disahkan, bukan diandaikan.

Fikirkan detik apabila peserta atau pautan hilang selepas kerja disediakan. Commit teragih yang disokong boleh meninggalkan keadaan ragu yang memerlukan prosedur pemulihan dan keputusan manusia, dan ia datang tanpa janji bahawa setiap wilayah kekal boleh ditulis melalui setiap pembahagian.

Jika penyelarasan tak segerak pula boleh diterima, nyatakan dengan jelas dan tuliskan keadaan perniagaan perantaraan serta peraturan perdamaian. Rantaian langkah yang di-commit secara setempat dengan pampasan ialah reka bentuk yang sah; ia cuma bukan satu transaksi atomik dengan nama lain.

Reka cubaan semula sebelum gangguan pertama

Klien boleh kehilangan respons selepas operasi di-commit, jadi pemanggil tidak boleh menganggap tamat masa sebagai kegagalan. Kekalkan identiti permintaan yang tahan lama dan gunakan hasil perkhidmatan atau mekanisme idempotensi sebelum mencuba semula mutasi, jika tidak cubaan semula menjadi penulisan kedua.

Panggilan balik transaksi automatik juga boleh berjalan lebih daripada sekali selepas pembatalan yang boleh dicuba semula, yang menjadikannya tempat buruk untuk kesan luaran yang tidak boleh diterbalikkan. Jauhkan itu di luar panggilan balik melainkan aliran kerja menetapkan protokol selamat yang jelas untuknya. Kehati-hatian yang sama terpakai kepada apa sahaja yang menelan kos atau menghantar mesej. Caj berganda ialah perbualan yang jauh lebih sukar daripada baris log berganda.

Penerimaan harus memainkan semula empat senario: dua klien berlumba untuk baris yang sama, pembatalan yang perkhidmatan kata boleh dicuba semula, commit yang jawapannya tidak pernah tiba, dan kehilangan wilayah atau pautan antaranya. Catat hasil perniagaan yang di-commit dan keadaan yang belum selesai di sebelah reka bentuk penghalaan, supaya tiada siapa tersalah anggap rangkaian sebagai komponen yang memberikan jaminan.

Artikel berkaitan