თანამედროვე განაწილებული სისტემები ყველაფერზეა გაცვლითი. შესრულება, საიმედოობა, მასშტაბურობა და თანმიმდევრულობა არ არის უფასოდ - თქვენ ყოველთვის იხდით ფასს სადმე. სწორედ აქ მოდის CAP თეორემა: ეს არის საწყისი წერტილი განაწილებულ დიზაინში გარდაუვალი კომპრომისების გასაგებად.
რატომ არის CAP თეორემა ჭეშმარიტი? რას ხსნის ის რეალურად? და, რაც მთავარია, საკმარისია? ამ პოსტში ჩვენ შევისწავლით CAP თეორემას, მის შეზღუდვებს, კრიტიკას, რომელიც მას შეექმნა და როგორ უბიძგებს ახალი იდეები, როგორიცაა PACELC, საუბარი წინ. მოდი ჩავყვინთოთ.
CAP თეორემის პირველი ვერსია დაიწყო როგორც დებატები ACID და BASE შორის. მაგრამ დროთა განმავლობაში, ის განვითარდა, მიიღო ოფიციალური მტკიცებულება და დაამთავრა CAP თეორემა, როგორც დღეს ვიცით.
CAP თეორემა ამბობს, რომ განაწილებულ სისტემას შეუძლია ერთდროულად დააკმაყოფილოს სამი თვისებიდან მაქსიმუმ ორი :
ეს შეზღუდვა აიძულებს ინჟინერებს გააკეთონ მკაცრი გარიგებები სისტემის მიზნებიდან და მათი განაწილებული გარემოს რეალობიდან გამომდინარე.
თანმიმდევრულობა CAP-ში არ არის იგივე რაც თანმიმდევრულობა ACID ტრანზაქციებში . CAP თეორემაში ეს ეხება წრფივობას ან ძლიერ თანმიმდევრულობას . ეს ნიშნავს, რომ განაწილებულ სისტემაში ყველა კვანძი ყოველთვის უნდა წარმოადგენდეს მონაცემთა ერთიან, განახლებულ ხედს , მიუხედავად იმისა, თუ რომელი კვანძი ამუშავებს მოთხოვნას. ეს ნიშნავს, რომ წაკითხვის ყოველი ოპერაცია ასახავს უახლეს ჩაწერას, არ აქვს მნიშვნელობა რომელ კვანძს მიმართავთ.
💡 ACID-ში თანმიმდევრულობა, მეორე მხრივ, ფოკუსირებულია იმაზე, რომ ტრანზაქცია მონაცემთა ბაზას ერთი მოქმედი მდგომარეობიდან მეორე მოქმედ მდგომარეობაში გადაიყვანს, მონაცემთა ბაზის სქემით განსაზღვრული წესების დაცვით. ეს უფრო ეხება მთლიანობის შეზღუდვების აღსრულებას (როგორიცაა უცხოური გასაღებები, უნიკალური შეზღუდვები და ა.
CAP-ში ხელმისაწვდომობა ნიშნავს, რომ ყველა კვანძმა უნდა უპასუხოს მის მიერ მიღებულ ყველა მოთხოვნას, მიუხედავად ქსელის დანაყოფებისა . სხვა სიტყვებით რომ ვთქვათ, თუ ჯანსაღი კვანძი მიიღებს მოთხოვნას, მან უნდა დაამუშავოს და უპასუხოს მას. თუმცა, CAP არ იძლევა გარანტიას, რომ პასუხი ყოველთვის იქნება "სწორი" ან განახლებული - ის უბრალოდ უზრუნველყოფს, რომ კვანძი ჩუმად არ ჩავარდეს (მაგალითად, AP სისტემის კვანძებში შეიძლება უპასუხონ შემორჩენილი მონაცემებით დანაყოფის დროს ხელმისაწვდომობის უზრუნველსაყოფად. ).
💡 ერიკ ბრუერმა (CAP-ის თავდაპირველი ავტორი) თავდაპირველად აღწერა ეს თვისება ცოტა უფრო მოქნილად, როგორც: "თითქმის ყველა შეკითხვას უნდა ჰქონდეს პასუხი". თუმცა, CAP-ის ოფიციალურ მტკიცებულებაში, ხელმისაწვდომობა გამკაცრდა და მოითხოვდა "ყველა შეკითხვას მიეღო პასუხი, სანამ კვანძი, რომელიც მას ამუშავებს ჯანმრთელია".
თუმცა, პრაქტიკაში ხელმისაწვდომობა არ არის აბსოლუტური გარანტია – ეს ხშირად დამოკიდებულია სისტემის სპეციფიკურ შეზღუდვებზე, მაგალითად, რამდენ ხანს მზად ხართ დაელოდოთ პასუხს. რეალურ სამყაროში არსებული სისტემებისთვის, რეაგირების დრო (ან ვადები) გადამწყვეტ როლს თამაშობს თქვენი SLA (სერვისის დონის შეთანხმების) ჩამოყალიბებაში, მიუხედავად იმისა, რომ თავად CAP პირდაპირ არ ითვალისწინებს შეყოვნებას. მეტი ამის შესახებ ამ ბლოგ პოსტში .
დანაყოფის ტოლერანტობა დაკავშირებულია ქსელის გაუმართაობასთან. თუ კვანძებს არ შეუძლიათ კომუნიკაცია ქსელის გაყოფის (დანაყოფის) გამო, სისტემა მაინც უნდა აკმაყოფილებდეს მის თანმიმდევრულობას ან ხელმისაწვდომობის გარანტიებს, მისი დიზაინის არჩევანიდან გამომდინარე. დანაყოფი ხდება მაშინ, როდესაც კვანძებს არ შეუძლიათ კომუნიკაცია ჩამოგდებული პაკეტების, დროის ამოწურვის ან ქსელის გაყოფის გამო.
განაწილებული სისტემები არ ცხოვრობენ ზღაპრულ სამყაროში სრულყოფილი ქსელებით. პაკეტები იშლება, ხდება ვადები და ლატენტური მწვერვალები გარდაუვალია. ამის გამო, დანაყოფების ტოლერანტობა არ არის შეთანხმებული ნებისმიერ განაწილებულ სისტემაში - დანაყოფები ადრე თუ გვიან მოხდება, ასე რომ თქვენ არ შეგიძლიათ "აირჩიოთ" მისი იგნორირება, რაც არ უნდა მაცდური ჟღერდეს.
CAP-ში, დანაყოფის ტოლერანტობა არ ნიშნავს, რომ სისტემა აგრძელებს მუშაობას ისე, თითქოს არაფერი მომხდარა. ეს ნიშნავს, რომ სისტემამ უნდა გადაწყვიტოს, მიენიჭოს პრიორიტეტი ხელმისაწვდომობას (AP) თუ თანმიმდევრულობას (CP) დანაყოფის დროს. თუ თქვენ უგულებელყოფთ დანაყოფის ტოლერანტობას, თქვენ არსებითად აშენებთ არაგანაწილებულ მონოლითურ სისტემას.
CAP-ის გასაგებად უმარტივესი გზაა ქსელის დანაყოფის განხილვა - სიტუაცია, როდესაც განაწილებული სისტემის ორი ნაწილი ვერ აკავშირებს ერთმანეთს. ასეთ სცენარში სისტემა სამ შესაძლო შედეგს აწყდება:
ამრიგად, დანაყოფის დროს სისტემას შეუძლია დააკმაყოფილოს სამი თვისებიდან მხოლოდ ორი (C, A, ან P) . მას შემდეგ, რაც დანაყოფი მოგვარდება (ანუ კვანძები კვლავ ურთიერთქმედებენ), სისტემას შეუძლია დაიბრუნოს სამივე თვისება, მაგრამ თავად დანაყოფის დროს ცვლა გარდაუვალია.
ასინქრონული სისტემების თეორემის შედეგია ის, რომ შესაძლებელია თანმიმდევრულობის, ხელმისაწვდომობისა და დანაყოფის ტოლერანტობის მხოლოდ სამი კომბინაცია:
ამ ტიპის სისტემები პასუხობენ შეკითხვებს, მაგრამ დაბრუნებული მონაცემები შეიძლება ყოველთვის არ იყოს განახლებული, მონაცემთა უფრო ნელი განახლებით, მაგრამ "ყოველთვის" ხელმისაწვდომი. ასეთი სისტემის მაგალითებია DNS, DynamoDB და Cassandra.
ამ ტიპის სისტემები ყოველთვის აბრუნებენ განახლებულ მონაცემებს, მაგრამ სისტემის ზოგიერთი, ან თუნდაც ყველა კვანძი შეიძლება არ რეაგირებდეს დაყოფის შემთხვევაში. ის იძლევა ატომურ განახლებებს, მაგრამ შეიძლება გამოიწვიოს დროის ამოწურვა. NoSQL მონაცემთა ბაზები, როგორიცაა Google BigTable, MongoDB, HBase და Redis, ყველა ამ ტიპის სისტემაა.
ამ ტიპის სისტემები ყოველთვის აბრუნებენ განახლებულ მონაცემებს, როდესაც არ არის დანაყოფები. ბოლო შეზღუდვის გამო, ჩვეულებრივ, ასეთი სისტემები გამოიყენება მხოლოდ ერთ მანქანაში. მაგალითებია კლასიკური რელაციური მონაცემთა ბაზები.
სინამდვილეში, ჩვენ ვირჩევთ CP და AP-ს შორის, რადგან CA ძირითადად არის მონოლითი დანაყოფების გარეშე. ფართომასშტაბიანი სისტემებისთვის დიზაინერებს არ შეუძლიათ უარი თქვან P-ზე და ამიტომ აქვთ რთული არჩევანი C-სა და A-ს შორის.
CA-ში კვანძის უკმარისობა ნიშნავს სერვისის სრულ მიუწვდომლობას. მაგრამ ეს არ გამორთავს მასშტაბურობას, რადგან ჩვენ შეგვიძლია დამოუკიდებელი მონოლითების კლონირება და მათზე დატვირთვის გადანაწილება
CAP თეორემა იყო ფუნდამენტური კონცეფცია განაწილებულ სისტემებში, მაგრამ ეს არ არის მისი შეზღუდვების გარეშე. კომპრომისების იდეის წარმოდგენის მთელი სიცხადის მიუხედავად, CAP თეორემა ხშირად აკრიტიკებდა რთული რეალობის გადაჭარბებულ გამარტივებას, რამაც გამოიწვია გაუგებრობა და არასწორი გამოყენება.
ერთ-ერთი ყველაზე გავრცელებული კრიტიკა არის ის, რომ CAP თეორემის ურთიერთშეთანხმება - არჩევანი თანმიმდევრულობასა (C) და ხელმისაწვდომობას (A) შორის - გამოიყენება მხოლოდ მაშინ, როდესაც რეალურად ხდება ქსელის დანაყოფი (P) . ნორმალურ ფუნქციონირებაში, როდესაც ქსელი სტაბილურია და დანაყოფები არ არსებობს, თანმიმდევრულობასა და ხელმისაწვდომობას შორის არ არის თანდაყოლილი ურთიერთშეთანხმება.
გარდა ამისა, ეს კომპრომისები არ არის უნივერსალური მთელ სისტემაში. იმავე განაწილებულ სისტემაში:
ეს ნიუანსი ხშირად იკარგება CAP-ის მაღალი დონის დისკუსიებში, რაც იწვევს სისტემების ზედმეტად გამარტივებულ კლასიფიკაციას, როგორც "CP" ან "AP" მთელს დაფაზე.
კიდევ ერთი მნიშვნელოვანი კრიტიკა არის ის, რომ CAP თეორემა არ ითვალისწინებს ლატენტურობას , მიუხედავად იმისა, რომ შეყოვნება და დაყოფა პრაქტიკაში ღრმად არის დაკავშირებული. მაგალითად:
რეალურ სამყაროში განაწილებულ სისტემებში, როდესაც ხდება დანაყოფი ან მაღალი შეყოვნება, სისტემამ უნდა მიიღოს გადაწყვეტილება დროის ამოწურვის პერიოდში : ხელმისაწვდომობის პრიორიტეტად მინიჭება შესაძლოა შემორჩენილი შედეგის დაბრუნებით, ან პრიორიტეტი მიანიჭოს თანმიმდევრულობას უფრო დიდხანს ლოდინის გზით (და პოტენციურად ვერ პასუხობს). CAP-ის ორობითი ხედვა არ ასახავს ამ გადაწყვეტილებების სირთულეს.
CAP თეორემა წარმოგიდგენთ თანმიმდევრულობას, ხელმისაწვდომობას და დანაყოფის ტოლერანტობას, როგორც ბინარულ თვისებებს - ან გაქვთ ისინი, ან არა. მაგრამ პრაქტიკაში სამივე თვისება არსებობს სპექტრზე :
თვისებების ეს უწყვეტი ბუნება CAP-ს ზედმეტად მარტივს ხდის თანამედროვე განაწილებული სისტემების სირთულის მოდელირებისთვის.
მიუხედავად იმისა, რომ CAP-მა მოახდინა რევოლუცია ჩვენს გაგებაში განაწილებულ სისტემებში ვაჭრობის შესახებ, ეს არ არის საბოლოო სიტყვა ამ თემაზე. დანიელ ჯ. აბადის მიერ აღწერილი PACELC თეორემა განიხილება განაწილებული სისტემების დიზაინის ალტერნატიულ მიდგომად. ის დაფუძნებულია CAP მოდელზე, მაგრამ გარდა თანმიმდევრულობის, ხელმისაწვდომობისა და დანაყოფის ტოლერანტობის გარდა, იგი ასევე მოიცავს ლატენტურობას და ლოგიკურ გამორიცხვას ამ ცნებების კომბინაციებს შორის.
PACELC წარმოგიდგენთ მუშაობის ორ განსხვავებულ რეჟიმს განაწილებული სისტემებისთვის:
მიუხედავად იმისა, რომ დანაყოფები გარდაუვალია განაწილებულ სისტემებში, ისინი იშვიათია იმ გამოწვევებთან შედარებით, რომლებიც წარმოიქმნება ნორმალური მუშაობის დროს. თანამედროვე განაწილებულ სისტემებში შეყოვნება ხშირად უფრო დიდი დაბრკოლებაა, ვიდრე ქსელის დანაყოფები, განსაკუთრებით გლობალური მასშტაბის აპლიკაციებისთვის. ეს არის ის, სადაც PACELC ყურადღებას ამახვილებს - იმ კომბინაციების განხილვით, რომლებიც ხდება მაშინ, როდესაც სისტემა მუშაობს დანაყოფების გარეშე. CAP-ისგან განსხვავებით, რომელიც ფოკუსირებულია მხოლოდ ქცევაზე წარუმატებლობის სცენარების დროს, PACELC ხაზს უსვამს გადაწყვეტილებებს, რომლებიც არქიტექტორებმა უნდა მიიღონ ყოველდღე, რათა დააბალანსონ ლატენტურობა (L) და თანმიმდევრულობა (C) :
ტიხრების მიღმა საუბრის გაფართოებით, რათა მოიცავდეს ნორმალურ მუშაობას, PACELC უზრუნველყოფს, რომ განაწილებული სისტემების ყოველდღიური მუშაობა განიხილება იმ მნიშვნელობით, რაც მას იმსახურებს.
CAP თეორემის ფორმულირება მნიშვნელოვანი მოვლენა იყო საზოგადოებაში და განაწილებული სისტემების დიზაინზე მისი გავლენის კვლევებმა აჩვენა, რომ განაწილებული სისტემების დიზაინერებმა სისტემა არ უნდა შემოიფარგლონ ორი თვისებით - ისინი უნდა ცდილობდნენ მაქსიმალურად გაზარდონ თითოეულში საჭირო გარანტიები. კონკრეტული შემთხვევა. ამ მიზნით, მიზანშეწონილია სისტემის დაყოფა სეგმენტებად, რომელთაგან თითოეულს აქვს საკუთარი მოთხოვნები და სისტემის დაპროექტება თითოეული სეგმენტის მოთხოვნების საფუძველზე.
CAP თეორემა ათწლეულების განმავლობაში იყო განაწილებული სისტემების აზროვნების ქვაკუთხედი. მან მოგვცა საფუძველი, რომ ვიმსჯელოთ თანმიმდევრულობის, ხელმისაწვდომობისა და დაყოფის ტოლერანტობის თანდაყოლილი ურთიერთდამოკიდებულების შესახებ. მაგრამ მრავალი თვალსაზრისით, ეს არის რეალობის გამარტივება, ორობითი არჩევანის დაშვება და კრიტიკული ფაქტორების იგნორირება, როგორიცაა ლატენტურობა.
PACELC ეფუძნება CAP-ს და აღიარებს, რომ:
ორივე CAP და PACELC არის ღირებული ინსტრუმენტები, მაგრამ არც ერთი არ არის ნაბიჯ-ნაბიჯ რეცეპტი სამშენებლო სისტემებისთვის. ამის ნაცვლად, ისინი აწვდიან გონებრივ მოდელებს ურთიერთგაგების შესაფასებლად და განაწილებული არქიტექტურის საზღვრების გასაგებად.
გმადლობთ, რომ კითხულობთ!
გაინტერესებთ რაიმე ან გაქვთ აზრები გასაზიარებლად? დატოვეთ თქვენი კომენტარი ქვემოთ! შეამოწმეთ ჩემი ბლოგი ან გამომყევით LinkedIn-ის , Substack-ის ან Telegram-ის მეშვეობით.