L = λ × W
კაპაციტეტის დაგეგმვის ყველაზე სასარგებლო განტოლება
ნებისმიერი სტაბილური რიგისთვის, მისი შიდა სტრუქტურის მიუხედავად: L = λ × W, სადაც:
- L = სისტემაში საშუალო ელემენტების რაოდენობა (მიმდინარე დამუშავებაში ან რიგში)
- λ (ლამბდა) = საშუალო მოსვლის სიხშირე (ელემენტები დროის ერთეულში)
- W = საშუალო დრო, რომელსაც თითოეული ელემენტი ატარებს სისტემაში
გეომეტრიული ინტერპრეტაცია: დახაზეთ λ ერთ ღერძზე და W მეორეზე. მათი ნამრავლი L არის მართკუთხედის ფართობი, რომელსაც ისინი ქმნიან. ტევადობის დაგეგმვა (capacity planning) სწორედ ამ მართკუთხედის შიგნით ცხოვრობს.
რატომ არის მნიშვნელოვანი: სამიდან ნებისმიერი ორი რიცხვი განსაზღვრავს მესამეს. თუ გაზომავთ გამტარუნარიანობას (throughput) და ლატენციას (latency), იცით რამდენი ელემენტია სისტემაში. თუ გაზომავთ რაოდენობას და გამტარუნარიანობას, იცით ლატენცია. კანონი მტკიცეა: ის თანაბრად მოქმედებს ვებ-მოთხოვნებზე, რესტორნის მაგიდებზე, სუპერმარკეტის რიგებზე და CPU-ს პაიპლაინებზე ცვლილებების გარეშე.
სამი კონკრეტული მაგალითი:
- ვებ-სერვისი обрабатывает 200 მოთხოვნას/წამში საშუალო ლატენციით 50 მწ (0.05 წ). L = 200 × 0.05 = 10 მოთხოვნა სისტემაში.
- ყავის მაღაზია ემსახურება 60 კლიენტს/საათში, საშუალო დროით შენობაში 15 წუთი (0.25 საათი). L = 60 × 0.25 = 15 კლიენტი შიგნით.
- ბэкენდის პული обрабатывает 1500 მოთხოვნას/წამში საშუალო ლატენციით 200 მწ (0.2 წ). L = 1500 × 0.2 = 300 მოთხოვნა სისტემაში.
ზომის განსაზღვრის შედეგი: ტიერის worker-ების რაოდენობა / თრედების რაოდენობა / კავშირების რაოდენობა უნდა იყოს მინიმუმ L, რომ სისტემამ გაუმკლავდეს დატვირთვას. ნაკლები რაოდენობა იწვევს რიგის (queue) ზრდას.
რატომ იფეთქებს ლატენცია 80%-ზე მეტი გამოყენებისას
ოპერაციებში ყველაზე მნიშვნელოვანი მრუდი
დახაზეთ გამოყენება x-ღერძზე (0%-დან 100%-მდე) და საშუალო ლოდინის დრო y-ღერძზე. ამ მრუდის ფორმა ერთ-ერთი ყველაზე მნიშვნელოვანი მრუდია კაპაციტეტის დაგეგმვაში.
M/M/1 რიგის მოდელი: სისტემისთვის, სადაც მოთხოვნები პუასონურია (შემთხვევითი) და მომსახურების დრო ექსპონენციალურია (შემთხვევითი), საშუალო ლოდინის დრო:
W_q = ρ / (μ × (1 - ρ))
სადაც ρ არის გამოყენება (0-დან 1-მდე), ხოლო μ — მომსახურების სიჩქარე.
მრუდის ფორმა:
- ρ = 0.5 (50% გამოყენება) დროს ლოდინის დრო მცირეა (1 მომსახურების დროის ტოლი).
- ρ = 0.7 (70% გამოყენება) დროს, ლოდინის დროა ~2.3 მომსახურების დრო.
- ρ = 0.8 (80% გამოყენება) დროს, ლოდინის დროა ~4 მომსახურების დრო.
- ρ = 0.9 (90% გამოყენება) დროს, ლოდინის დროა ~9 მომსახურების დრო.
- ρ = 0.95 (95% გამოყენება) დროს, ლოდინის დროა ~19 მომსახურების დრო.
- ρ = 1.0 (100% გამოყენება) დროს, ლოდინის დრო უსასრულოა.
მუხლი: დაახლოებით 80%-იანი გამოყენებისას მრუდი მკვეთრად იხრება. მუხლის ქვემოთ ტევადობა კომფორტულია; ზემოთ კი ლატენცია იზრდება უფრო სწრაფად, ვიდრე გამოყენება.
პრაქტიკული დასკვნა: სტაბილური მდგომარეობისთვის მიზნად ისახეთ 70% გამოყენება, არასდროს 100%. 30% „თავისუფალი ადგილი“ არ არის ფუჭი ხარჯი; ეს არის შეზღუდული ლატენციის ფასი.
მუხლის გადაწყვეტილება (Sizing Across the Knee)
ორი სცენარი:
სცენარი A: 10 რეპლიკა მუშაობს 60% CPU-ზე. Latency p99 = 100 მს.
სცენარი B: იგივე ფლოტი მუშაობს 90% CPU-ზე ტრაფიკის ზრდის გამო. p99 = 600 მს.
იგივე ფლოტი, იგივე კოდი, შეიცვალა მხოლოდ გამოყენების დონე.
ზომა და ტრიგერი ერთად
სინთეზი
ახლა უკვე შეგიძლიათ ლიტლის კანონი გამოიყენოთ როგორც მართკუთხედი, წაიკითხოთ რიგის მრუდი და მისი მუხლი, და ორივე დაუკავშიროთ სიმძლავრის გადაწყვეტილებებს.
გამოიყენეთ ორივე.
ბექენდის ტიერი ამუშავებს 2,000 req/s-ს საშუალო ლატენტობით 50 მს ერთ რეპლიკაზე, რომლის სიმძლავრეა 80 req/s 70%-იან CPU-ზე. საგანგებო ფაქტორი 2x; გსურთ გადაურჩოთ 3 ერთდროულ რეპლიკის გაუმართავობას.
თანმხვედრი შენიშვნები
თანმხვედრი შენიშვნები
ეს გეომეტრიის გაკვეთილი Stateless Horizontal Scaling-ის მთავარ გაკვეთილს რაოდენობრივ გეომეტრიად აქცევს.
შემდეგი თანამგზავრი, geometry_of_ingress_egress_separation, ქსელის საზღვრის გაყოფას ორმხრივ გრაფად აქცევს, რომელსაც აქვს საჭრელი წვერო, რომელსაც ეს გაყოფა აშორებს.
კარგად შეასრულეთ.