Hacker News

შემთხვევითი I/O-ის რეალური ღირებულება

კომენტარები

1 min read Via vondra.me

Mewayz Team

Editorial Team

Hacker News

თქვენი ბიზნესის პროგრამული უზრუნველყოფა უფრო ნელია ვიდრე უნდა იყოს — და შემთხვევითი I/O არის უხილავი დამნაშავე

ყოველ ჯერზე, როცა კლიენტი უჩივის ნელი დაფაზე, ყოველ ჯერზე, როცა თქვენი გუნდი დამატებით სამ წამს ელოდება ანგარიშის ჩატვირთვას, და ყოველ ჯერზე, როცა თქვენი გადახდის გვერდი მოუთმენლობის გამო კარგავს მყიდველს — დიდი შანსია, რომ შემთხვევითი I/O ჩუმად დახარჯავს თქვენს შემოსავალს. ეს არ არის მონაცემთა ბაზის ინჟინრებისთვის დაცული საინფორმაციო სიტყვა. ეს არის გაზომვადი, ძვირადღირებული შეფერხება, რომელიც იმალება თითქმის ყველა ბიზნეს აპლიკაციის შიგნით, CRM მოძიებიდან ინვოისის გამომუშავებამდე. მისი რეალური ღირებულების გაგება არ არის მხოლოდ ტექნიკური სავარჯიშო - ეს არის ფინანსური. კომპანიები, რომლებიც მას უგულებელყოფენ, იხდიან ფასს ღრუბლოვანი გადასახადების, დაკარგული მომხმარებლებისა და გუნდების მოლოდინში, რომლებიც მყისიერად უნდა იტვირთებოდეს.

რას ნიშნავს რეალურად შემთხვევითი I/O (და რატომ არის ძვირი)

ძირითადად, I/O — შეყვანა/გამომავალი — არის მონაცემთა შენახვისა და წაკითხვის და ჩაწერის პროცესი. როდესაც თქვენი აპლიკაცია იღებს ჩანაწერებს მონაცემთა ბაზიდან, ატვირთავს ფაილებს დისკიდან ან წერს ტრანზაქციის ჟურნალებს, ის ასრულებს I/O ოპერაციებს. ეს ოპერაციები მოდის ორ გემოვნებაში: თანმიმდევრული და შემთხვევითი. თანმიმდევრული I/O კითხულობს ან წერს მონაცემებს მიმდებარე ბლოკებში, როგორიცაა წიგნის კითხვა თავიდან ბოლომდე. შემთხვევითი I/O ხტება არაპროგნოზირებად, მაგალითად, გვერდი 47-ზე, შემდეგ გვერდზე 3, შემდეგ გვერდზე 812-ზე.

შესრულების უფსკრული ამ ორ შაბლონს შორის შემაძრწუნებელია. ტრადიციულ მყარ დისკზე, თანმიმდევრულმა წაკითხვამ შეიძლება მიაღწიოს გამტარუნარიანობას 150-200 მბ/წმ-ს, ხოლო შემთხვევითი წაკითხვის სიჩქარე ხშირად 0,5-1,5 მბ/წმ-ზეა — განსხვავება 100x ან მეტი. თანამედროვე NVMe SSD-ებზეც კი, რომლებიც მკვეთრად აუმჯობესებენ შემთხვევითი I/O შესრულებას, უფსკრული მაინც მერყეობს 5x-დან 20x-მდე სამუშაო დატვირთვის მიხედვით. როდესაც თქვენი ბიზნეს აპლიკაცია აგზავნის ათასობით მცირე, მიმოფანტული წაკითხვის მოთხოვნას წამში - მომხმარებლის სახელის აქ მოყვანა, ინვოისის ხაზის ერთეული იქ, ნებართვის შემოწმება სადმე სხვაგან - ყოველი ჰოპი შემოაქვს შეყოვნებას, რომელიც იზომება მიკროწამებში, რაც აერთიანებს მომხმარებლის რეალური მოლოდინის დროის წამებში.

ფიზიკა არ შეცვლილა ათწლეულების განმავლობაში: საცავში მიმოფანტულ მონაცემებზე წვდომა ფუნდამენტურად უფრო ნელია, ვიდრე მისი წესრიგის გადაცემა. რაც შეიცვალა არის მასშტაბი, რომლითაც თანამედროვე აპლიკაციები წარმოქმნიან შემთხვევით I/O-ს, რაც შეუძლებელს ხდის მისი ღირებულების იგნორირებას.

დამალული გადასახადი ყველა ბიზნეს ოპერაციაზე

დაფიქრდით, რა მოხდება, როდესაც ერთი მომხმარებელი ხსნის CRM საინფორმაციო დაფას. აპლიკაცია ითხოვს მომხმარებელთა ცხრილს, უერთდება მას ბოლოდროინდელი აქტივობების ჟურნალებს, ამოიღებს დაკავშირებულ გარიგების მნიშვნელობებს, ამოწმებს მომხმარებლის ნებართვებს, იტვირთავს შეტყობინებების რაოდენობას და იღებს ეკრანის პრეფერენციებს. თითოეული ეს მოთხოვნა შეიძლება შეეხოს დისკის სხვადასხვა ადგილას შენახულ სხვადასხვა ცხრილებს. საინფორმაციო დაფა, რომელიც აჩვენებს კლიენტის 50 ჩანაწერს, შეიძლება წარმოქმნას 300-დან 500-მდე შემთხვევითი I/O ოპერაცია ქუდის ქვეშ. გაამრავლეთ ეს 200 ერთდროულად მომხმარებელზე პიკის სამუშაო საათებში და თქვენი მონაცემთა ბაზის სერვერი ამუშავებს 100000-ზე მეტ შემთხვევით წაკითხვას წამში.

ეს არ არის ჰიპოთეტური. Percona-ს მიერ 2024 წელს ჩატარებულმა კვლევამ აჩვენა, რომ ცუდად ოპტიმიზებული მონაცემთა ბაზის დატვირთვა ხარჯავს მათი შესრულების მთლიანი დროის 68%-მდე ელოდება I/O ოპერაციებს, შემთხვევითი წვდომის შაბლონები არის მთავარი დამნაშავე. SaaS კომპანიისთვის, რომელიც ემსახურება ათასობით ბიზნესს, ეს პირდაპირ ითარგმნება უფრო მაღალ ინფრასტრუქტურულ ხარჯებში. ღრუბლოვანი პროვაიდერები იხდიან IOPS-ით (I/O ოპერაციები წამში) და შემთხვევითი I/O-მძიმე დატვირთვა შეუძლია ყოველთვიური მეხსიერების გადასახადებს ასიდან ათეულ ათასობით დოლარამდე გადაიტანოს - არა მონაცემთა მოცულობის, არამედ წვდომის შაბლონების გამო.

ღირებულება ვრცელდება ინფრასტრუქტურის მიღმა. Akamai-ის კვლევის მიხედვით, ყოველ 100 მილიწამში დამატებითი გვერდის ჩატვირთვის დრო ამცირებს კონვერტაციის სიჩქარეს დაახლოებით 7%-ით. როდესაც შემთხვევითი I/O ამატებს სრულ წამს თქვენი ინვოისის გენერირებას ან ანგარიშის ჩატვირთვას, თქვენ არ იწერთ მხოლოდ გამოთვლას, არამედ წვავთ შემოსავალს.

სადაც ბიზნეს აპლიკაციები ამცირებენ ეფექტურობას

ყველა ფუნქცია არ არის შექმნილი თანაბარი, როდესაც საქმე ეხება I/O შაბლონებს. ზოგიერთი ყველაზე გავრცელებული ბიზნეს ოპერაციები ასევე არის ყველაზე უარესი დამნაშავეები შემთხვევითი წვდომისთვის:

  • ძიება და გაფილტვრა: მრავალ ველში (სახელი, თარიღი, სტატუსი, ტეგები) მოთხოვნა აიძულებს მონაცემთა ბაზას დაასკანიროს საცავში მიმოფანტული ინდექსები, წარმოქმნის მძიმე შემთხვევით წაკითხვას
  • საინფორმაციო დაფის აგრეგაციები: შემოსავლების შეჯამება, აქტიური მომხმარებლების დათვლა ან ვადაგადაცილებული ინვოისების გამოთვლა მოითხოვს ათასობით მწკრივის შეხებას, რომლებიც განაწილებულია მონაცემთა სხვადასხვა გვერდებზე
  • ნებართვების შემოწმება: როლებზე დაფუძნებული წვდომის კონტროლი მრავალ დამქირავებელ პლატფორმებზე ხშირად მოითხოვს მრავალჯერად ძიებას თითო მოთხოვნაზე — მომხმარებელი → როლი → ნებართვები → რესურსი — თითოეული ხვდება სხვადასხვა ცხრილებს
  • ანგარიშების გენერირება: ყოველთვიური სახელფასო ანგარიშები, ფლოტის ტექნიკური შეჯამებები ან HR ანალიტიკა ერთდროულად აგროვებს მონაცემებს ათობით ცხრილიდან
  • რეალურ დროში შეტყობინებები: მოდულებში ახალი შეტყობინებების, ამოცანების განახლებების და სისტემის გაფრთხილებების შემოწმება ქმნის მცირე, შემთხვევითი მოთხოვნების მუდმივ ნაკადს

ნიმუში ნათელია: რაც უფრო მეტ მოდულს და მახასიათებელს გვთავაზობს პლატფორმა, მით მეტი I/O ბილიკი მრავლდება. მარტივი ბმული ბიო ინსტრუმენტმა შეიძლება შექმნას 10 მოთხოვნა გვერდის დატვირთვაზე. სრული ბიზნეს ოპერაციული სისტემა CRM, ინვოისის, HR, სახელფასო, დაჯავშნისა და ანალიტიკის მოდულებით - ისეთს, რასაც Mewayz აწვდის თავის 207 მოდულს - თეორიულად შეიძლება ასობით მოდულის შექმნა. განსხვავება პლატფორმას შორის, რომელიც მყისიერად გრძნობს თავს და პლატფორმას, რომელიც თავს დუნეს გრძნობს, ხშირად დამოკიდებულია იმაზე, თუ რამდენად ჭკვიანურად იმართება ეს I/O შაბლონები კულისებში.

რატომ არ მუშაობს ტექნიკის გადაყრა პრობლემაზე

აპლიკაციების შენელების ინსტინქტი არის განახლება. უფრო დიდი სერვერები, უფრო სწრაფი SSD, მეტი ოპერატიული მეხსიერება. და მიუხედავად იმისა, რომ ტექნიკის გაუმჯობესება ხელს უწყობს, ისინი მიჰყვებიან შემცირებული შემოსავლის მრუდს, რაც CFO-ებს დისკომფორტს უქმნის. თქვენი მონაცემთა ბაზის სერვერის ოპერატიული მეხსიერების გაორმაგებამ 64 გბ-დან 128 გბ-მდე შეიძლება გააუმჯობესოს ქეშის დარტყმის სიხშირე 92%-დან 96%-მდე - მნიშვნელოვანი მოგება, მაგრამ ქეშის გამოტოვების დარჩენილი 4% მაინც მოხვდება მეხსიერებაში შემთხვევითი I/O-ით. AWS-ზე თქვენი IOPS გამოყოფის გასამმაგება 3000-დან 10000-მდე ღირს დაახლოებით 450$ მეტი თვეში, მაგრამ შეიძლება მხოლოდ p99 რეაგირების დრო გააუმჯობესოს 30%-ით.

ნამდვილი პრობლემა არქიტექტურულია. შემთხვევითი I/O ხშირად უფრო ღრმა პრობლემების სიმპტომია: დაკარგული ან ცუდად შემუშავებული ინდექსები, N+1 მოთხოვნის შაბლონები, სადაც აპლიკაცია ახორციელებს მონაცემთა ბაზის ერთ ზარს თითო ელემენტზე, სქემების გადანაწილების ნაცვლად, ზედმეტად ნორმალიზებული სქემები, რომლებიც საჭიროებენ ცხრილის ხუთ შეერთებას ერთი ეკრანის მწკრივისთვის და წაკითხული რეპლიკების ან ქეშირების შრეების ნაკლებობა. აპარატურის განახლებები მკურნალობს სიმპტომს. არქიტექტურული ოპტიმიზაცია მკურნალობს მიზეზს.

ყველაზე ძვირი I/O ოპერაცია არის ის, რაც თავიდანვე არ უნდა არსებობდეს. სწრაფ შენახვაზე დახარჯულ ყოველ დოლარზე, შეკითხვის ოპტიმიზაციაზე დახარჯული ათი ცენტი უკეთეს შედეგს იძლევა. კომპანიები, რომლებიც იმარჯვებენ წარმადობით, არ აჭარბებენ თავიანთ კონკურენციას — ისინი აჭარბებენ თავიანთ მონაცემებზე წვდომის შაბლონებს.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

პრაქტიკული სტრატეგიები, რომლებიც რეალურად ამცირებს შემთხვევით შემოსვლას

შემთხვევითი I/O შემცირება არ საჭიროებს თქვენი განაცხადის სრულ გადაწერას. ის მოითხოვს მიზანმიმართულ, გაზომვად ცვლილებებს, თუ როგორ ხდება მონაცემების შენახვა, წვდომა და ქეშირება. აქ არის სტრატეგიები, რომლებიც ყველაზე დიდ გავლენას ახდენს:

  1. შეასრულეთ შეკითხვის აგრესიული შეკრება. ჩაანაცვლეთ N+1 მოთხოვნის შაბლონები მონდომებული ჩატვირთვით. თუ თქვენი საინფორმაციო დაფა ჩატვირთავს 50 მომხმარებელს და მათ უახლეს აქტივობას, აიღეთ აქტივობის 50-ვე ნაკრები ერთ მოთხოვნაში WHERE customer_id IN (...) და არა 50 ინდივიდუალური მოძიების გამოყენებით. მხოლოდ ამან შეიძლება შეამციროს შემთხვევითი I/O 80%-ით სიის ნახვებზე.
  2. გამოიყენეთ კომპოზიციური ინდექსები სტრატეგიულად. კომპოზიციური ინდექსი -ზე (tenant_id, status, created_at) საშუალებას აძლევს მონაცემთა ბაზას დააკმაყოფილოს საერთო გაფილტრული მოთხოვნები ცალკეულ ინდექსებში მრავალჯერადი შემთხვევითი ძიების ნაცვლად ერთი რიგითი ინდექსის სკანირებით.
  3. დანერგეთ ქეშირების შრე ინტელექტუალური გაუქმებით. ქეში ხშირად ხელმისაწვდომი, მაგრამ იშვიათად შეცვლილი მონაცემები — მომხმარებლის ნებართვები, ორგანიზაციის პარამეტრები, მოდულის კონფიგურაციები — მეხსიერებაში. Redis-ს ან Memcached-ს შეუძლია მათი გამოყენება მიკროწამებში, რაც გამორიცხავს ათასობით შემთხვევით წაკითხვას წუთში.
  4. წინასწარ გამოთვალეთ აგრეგაციები. იმის ნაცვლად, რომ გამოთვალოთ თვიური შემოსავლები ან პერსონალის რაოდენობა ყოველი დაფის დატვირთვაზე, შეასრულეთ აგრეგაციის სამუშაოები გრაფიკის მიხედვით და შეინახეთ შედეგები. შეცვალეთ მცირე რაოდენობით მონაცემთა განახლება რეალურ დროში შემთხვევითი I/O-ს მასიური შემცირებისთვის.
  5. დიდი ცხრილების დაყოფა წვდომის ნიმუშის მიხედვით. თუ მოთხოვნების 90% ეხება ბოლო 30 დღის მონაცემებს, დაყავით თქვენი ცხრილები თარიღის დიაპაზონის მიხედვით, რათა აქტიური დანაყოფი დარჩეს ცხელი ქეშში, ხოლო ისტორიული მონაცემები ცივი დარჩეს იაფი საცავში.

ეს არ არის ეგზოტიკური ტექნიკა. ისინი იგივე შაბლონებია, რომლებიც საშუალებას აძლევს პლატფორმებს, რომლებიც ემსახურებიან ასიათასობით მომხმარებელს, შეინარჩუნონ რეაგირების დრო რთულ, მრავალმოდულ ინტერფეისებში. როდესაც Mewayz-მა აღადგინა თავისი არქიტექტურა V2-ისთვის - სკალირება ერთი ბმული-ში-ბიო ხელსაწყოდან 207 მოდულიან ბიზნეს ოპერაციულ სისტემაზე, რომელიც ემსახურება 138 000-ზე მეტ მომხმარებელს - I/O წვდომის შაბლონების ოპტიმიზაცია ფუნდამენტური იყო იმისთვის, რომ ეს გაფართოება სიცოცხლისუნარიანი ყოფილიყო ინფრასტრუქტურის ხარჯების პროპორციულად გამრავლების გარეშე.

შემზრდელი ეფექტი მომხმარებლის გამოცდილებასა და შეკავებაზე

შესრულება არ არის მხოლოდ საზრუნავი - ეს პროდუქტის ფუნქციაა. Google-ის კვლევამ მუდმივად აჩვენა, რომ მობილური მომხმარებლების 53% ტოვებს გვერდს, რომლის ჩატვირთვას 3 წამზე მეტი დრო სჭირდება. ბიზნეს აპლიკაციებისთვის, სადაც მომხმარებლები ურთიერთობენ დღეში ათჯერ, ტოლერანტობა კიდევ უფრო დაბალია. სახელფასო მენეჯერი, რომელიც აწარმოებს ყოველკვირეულ ანგარიშებს, HR ლიდერი განიხილავს განმცხადებლებს, ან გაყიდვების წარმომადგენელი ამოწმებს მილსადენის სტატუსს - ამ მომხმარებლებს უვითარდებათ სიჩქარის ინტუიციური გრძნობა. მათ შეიძლება არ გამოხატონ „შემთხვევითი I/O შეყოვნება ინვოისის აგრეგაციის მოთხოვნაზე ძალიან მაღალია“, მაგრამ იტყვიან „ეს პროგრამული უზრუნველყოფა ნელია“ და დაიწყებენ ალტერნატივების შეფასებას.

შეერთების ეფექტი გაზომვადია. პლატფორმა, რომელიც ატვირთავს დაფებს 800 ms-ში, ნაცვლად 2,4 წამისა, არ იგრძნობა მხოლოდ 3-ჯერ უფრო სწრაფად - ის ცვლის გამოყენების ქცევას. მომხმარებლები უფრო ხშირად ამოწმებენ მონაცემებს, იკვლევენ მეტ მოდულს და უფრო ღრმად აერთიანებენ ხელსაწყოს სამუშაო პროცესებში. უფრო მაღალი ჩართულობა განაპირობებს უფრო მაღალ შეკავებას, რაც განაპირობებს სიცოცხლის ხანგრძლივობის მაღალ ღირებულებას. ცნობილია, რომ Slack-მა თავისი ადრეული ზრდის მნიშვნელოვანი ნაწილი მიაწერა შესრულების აკვიატებულ ოპტიმიზაციას და აღიარა, რომ სიჩქარე თავისთავად კონკურენტუნარიანი იყო.

ყველა ერთში ბიზნეს პლატფორმებისთვის, ეს ეფექტი მრავლდება ყველა მოდულზე. თუ CRM სწრაფია, მაგრამ ინვოისის შედგენა ნელია, მთელი პლატფორმის აღქმა ზარალდება. შესრულების თანმიმდევრულობა ფუნქციებს შორის - დაჯავშნის მენეჯმენტიდან ფლოტის თვალყურის დევნებამდე ანალიტიკამდე - მოითხოვს ყველგან თანმიმდევრულად ოპტიმიზებულ I/O შაბლონებს და არა მხოლოდ ყველაზე თვალსაჩინო მოდულებში.

მნიშვნელოვანის გაზომვა: შემთხვევითი I/O ხილვადობა

თქვენ ვერ შეასწორებთ იმას, რასაც ვერ ხედავთ. პირველი ნაბიჯი შემთხვევითი I/O ხარჯების გადასაჭრელად არის მათი ხილვა თქვენი საინჟინრო და საოპერაციო გუნდებისთვის. დაკვირვებადობის თანამედროვე ხელსაწყოებს, როგორიცაა Datadog, New Relic, ან თუნდაც ღია წყაროს გადაწყვეტილებები, როგორიცაა Prometheus Grafana-სთან ერთად, შეუძლიათ თვალყური ადევნონ IOPS შაბლონებს, შეკითხვის შეყოვნების განაწილებას და ქეშის დარტყმის სიხშირეს რეალურ დროში. ყველაზე მნიშვნელოვანი მეტრიკაა:

  • p95 და p99 შეკითხვის შეყოვნება: საშუალო შეყოვნება მალავს ტკივილს. 95-ე და 99-ე პროცენტული აჩვენებს, თუ რას განიცდიან თქვენი ყველაზე ნელი — და ყველაზე იმედგაცრუებული — მომხმარებლები
  • IOPS დაყოფა წაკითხვისა და ჩაწერის მიხედვით, თანმიმდევრული და შემთხვევითი: ეს ცხადყოფს, არის თუ არა თქვენი დატვირთვა I/O-შეზღუდული და I/O-ის რომელი ტიპი დომინირებს
  • ქეშის დარტყმის კოეფიციენტი: 95%-ზე დაბალი კოეფიციენტი კარგად მორგებულ სისტემაზე ვარაუდობს მონაცემთა წვდომის ნიმუშებს, რომლებიც არ არის მოწოდებული მეხსიერებიდან
  • შეკითხვის რაოდენობა გვერდის ჩატვირთვაზე: თუ ერთი მომხმარებლის ქმედება იწვევს მონაცემთა ბაზის 20-30-ზე მეტ მოთხოვნას, თითქმის ნამდვილად არსებობს ოპტიმიზაციის შესაძლებლობა

ამ მონაცემებით შეიარაღებულ გუნდებს შეუძლიათ პრიორიტეტულად მიიჩნიონ ყველაზე მაღალი ზემოქმედების ოპტიმიზაცია, ვიდრე გამოცნობა. ბიზნესები, რომლებიც განიხილავენ I/O შესრულებას, როგორც პირველი კლასის მეტრიკას - მუშაობის დროის, შეცდომების სიხშირისა და მომხმარებლის კმაყოფილების პარალელურად - მუდმივად აწვდიან უფრო სწრაფ პროდუქტებს დაბალ ფასად. ბაზარზე, სადაც მომხმარებლები მოელიან, რომ ბიზნეს ინსტრუმენტები ისეთივე პასუხისმგებელი იქნება, როგორც სამომხმარებლო აპლიკაციები, ეს დისციპლინა არ არის არჩევითი. ეს არის განსხვავება პლატფორმას შორის, რომელიც მოხდენილია 138000 მომხმარებელამდე და პლატფორმას შორის, რომელიც იკლებს საკუთარი სირთულის ქვეშ.

გამარტივეთ თქვენი ბიზნესი Mewayz-ით

Mewayz აერთიანებს 207 ბიზნეს მოდულს ერთ პლატფორმაში — CRM, ინვოისის შედგენა, პროექტის მენეჯმენტი და სხვა. შეუერთდით 138000+ მომხმარებელს, რომლებმაც გაამარტივეს სამუშაო პროცესი.

დღეს უფასოა