მრავალრეგიონული ჩაწერები: სად ფიქსირდება ცვლილება სინამდვილეში?
მარშრუტიზაცია მოთხოვნას რეგიონამდე მიიყვანს; მხოლოდ ტრანზაქციის საზღვარი ხდის ჩაწერას ატომურად. დაასახელეთ ინვარიანტი, აირჩიეთ მფლობელი და შემდეგ ხელახალი ცდა მის გარშემო დააპროექტეთ.
ორ რეგიონში ორი აპლიკაციის სერვერი, 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 რეგიონებს შორის ცვლის, როგორ მოგზაურობენ პაკეტები და როგორ ვლინდება ჩავარდნები. ის ტრანზაქციის საზღვარს არც ერთი სტრიქონით არ ზრდის, რაც არ უნდა ჯანსაღად გამოიყურებოდეს გვირაბი. ორივეს არევა ქმნის არქიტექტურებს, სადაც ყველა კომპონენტი თავის შემოწმებას გადის და მონაცემები მაინც არ თანხმდება.
ორი მონაცემთა ბაზა ერთ სისტემად არ იქცევა
დამოუკიდებლად მართული ორი მონაცემთა ბაზა არ იძენს საერთო ტრანზაქციის მენეჯერს იმის გამო, რომ კლიენტებს ორივეზე წვდომა აქვთ. თუ ბიზნესს ნამდვილად სჭირდება ატომური ვალდებულება ამ წყვილზე, კოორდინაციის მექანიზმი, მონაწილეები და აღდგენის პროცესი ყველა უნდა შეირჩეს და დაკვალიფიცირდეს და არა ვარაუდით იქნას მიღებული.
დაფიქრდით იმ მომენტზე, როცა სამუშაოს მომზადების შემდეგ მონაწილე ან კავშირი ქრება. მხარდაჭერილ განაწილებულ დაფიქსირებას შეუძლია დატოვოს გაურკვეველი მდგომარეობა, რომელსაც აღდგენის პროცედურა და ადამიანური გადაწყვეტილება სჭირდება, და ის არ მოდის იმ დაპირებით, რომ ყველა რეგიონი ყველა გაყოფის დროს ჩასაწერად ხელმისაწვდომი დარჩება.
თუ სამაგიეროდ მისაღებია ასინქრონული კოორდინაცია, ცხადად თქვით ეს და ჩამოწერეთ შუალედური ბიზნეს მდგომარეობები და შერიგების წესები. ლოკალურად დაფიქსირებული ნაბიჯების ჯაჭვი კომპენსაციით ლეგიტიმური დიზაინია; ის უბრალოდ არ არის ერთი ატომური ტრანზაქცია სხვა სახელით.
დააპროექტეთ ხელახალი ცდა პირველ გათიშვამდე
კლიენტმა შეიძლება დაკარგოს პასუხი მას შემდეგ, რაც ოპერაცია დაფიქსირდა, ამიტომ გამომძახებელს არ შეუძლია დროის ამოწურვა ჩავარდნად მიიჩნიოს. შეინარჩუნეთ მდგრადი მოთხოვნის იდენტობა და ცვლილების ხელახლა ცდამდე გამოიყენეთ სერვისის შედეგი ან იდემპოტენტურობის მექანიზმი, თორემ ხელახალი ცდა მეორე ჩაწერად იქცევა.
ავტომატური ტრანზაქციის უკუგამოძახებები ასევე შეიძლება ერთზე მეტჯერ შესრულდეს ხელახლა ცდადი შეწყვეტის შემდეგ, რაც მათ ცუდ სახლად აქცევს შეუქცევადი გარეგანი ეფექტებისთვის. შეინახეთ ისინი უკუგამოძახების გარეთ, თუ სამუშაო ნაკადი მათთვის ცხად უსაფრთხო პროტოკოლს არ განსაზღვრავს. იგივე სიფრთხილე ეხება ყველაფერს, რაც ფული ღირს ან შეტყობინებას აგზავნის. ორმაგი დარიცხვა გაცილებით რთული საუბარია, ვიდრე ორმაგი ჟურნალის სტრიქონი.
მიღებამ ოთხი სცენარი უნდა გაითამაშოს: ორი კლიენტი ერთი სტრიქონისთვის იბრძვის, შეწყვეტა, რომელსაც სერვისი ხელახლა ცდადად აცხადებს, დაფიქსირება, რომლის პასუხი არასოდეს მოდის, და რეგიონის ან მათ შორის კავშირის დაკარგვა. ჩაწერეთ დაფიქსირებული ბიზნეს შედეგი და გადაუწყვეტელი მდგომარეობები მარშრუტიზაციის დიზაინის გვერდით, რათა არავინ აურიოს ქსელი გარანტიის მიმცემ კომპონენტში.