
200 მილიწამი: ინტერაქტიული გვერდი ერთი HTTP მოთხოვნის სრულ ცხოვრებას აკვირდება
thenodebook.com-ის გვერდი „200 Milliseconds“ ერთ HTTP მოთხოვნას მთელი 211.4 მილიწამის განმავლობაში ადევნებს თვალს — კაფეში დაწკაპუნებიდან სან-ფრანცისკოში შეკვეთის დადასტურებამდე.
thenodebook.com-ის ინტერაქტიული გვერდი „200 Milliseconds“ ერთი HTTP მოთხოვნის მთელ, 211.4 მილიწამიან ცხოვრებას ადევნებს თვალს: სამშაბათს დილის 9:41-ზე სან-ფრანცისკოს კაფეში ვიღაც „Buy“-ს აჭერს, 211.4 მილიწამის შემდეგ კი ეკრანი აჩვენებს „Order confirmed“-ს. დამწკრეკილს ეს დაყოვნება არ შეუმჩნევია. გვერდზე არსებული საათი ზუსტია და t = 0.211 400 წმ-ზე ჩერდება; თხრობა ჩერდება მოკლე გაკვეთილების დროს, სანამ საათი გაყინულია, და შემდეგ გრძელდება.
გზა
მოთხოვნა შვიდ გაჩერებას გადის: ლეპტოპი კაფეს Wi-Fi-ზე, წვდომის წერტილი, რომელიც რადიოსიგნალს იღებს და სადენით გადასცემს, კაფეს პროვაიდერი, დაახლოებით 4 700 კმ ბოჭკოვანი მინა სან-ფრანცისკოსა და ვირჯინიის ეშბერნს შორის, ბალანსირებადი მოწყობილობა ოთხი Node.js პროცესით, თავად სერვერის პროცესი (PID 1447, გაშვებული 23 დღის წინ) და PostgreSQL ბაზა, რომელიც 0.35 მილიწამის მანძილზეა. დადასტურების გამოსახვამდე მოთხოვნა და პასუხები ექვსჯერ კვეთენ ჩრდილოეთ ამერიკას და გადიან დაახლოებით ორმოც მანქანაზე, სადაც ასი მილიონი სტრიქონი სხვისი კოდია გაშვებული.
სად იხარჯება საათი
პირველ ხუთ მილიწამში კლიკი აპარატურა და ბრაუზერის ბუღალტერიაა: ტაჩპადზე ტევადობის ცვლილება წარმოქმნის წყვეტას (interrupt), HID დრაივერი, Window Server და Chrome-ის ბრაუზერის პროცესი მოვლენას იზოლირებულ renderer-ს გადასცემენ, სადაც hit testing კლიკს ექვს დონეზე ჩაშენებულ Buy ღილაკამდე აყვანს. შემდეგ fetch /api/checkout-ზე სამივე ქეშს გამოტოვებს — მეხსიერების, service worker-ისა და დისკის — რადგან POST მოთხოვნები არ ქეშირდება. სოკეტების აუზში api.thenodebook.com-თან კავშირი არ არის, ამიტომ მოთხოვნა „ცივ გაშვებას“ იხდის: TCP-ისა და TLS-ის handshake-ები 62 მილიწამიანი რაუნდით ჯამში 211.4 მილიწამიდან 127-ს შთანთქავს. 203-ბაიტიანი ტექსტური მოთხოვნა 225-ბაიტიან TLS ჩანაწერად იქცევა და ქსელში 300 ბაიტზე ოდნავ ნაკლები მოცულობით მიდის; მისამართები კი ყველა კვანძზე წაკითხვადი რჩება, რადგან დაახლოებით ორმოც მანქანას მარშრუტირება სჭირდება.
ცივი და თბილი გაშვება
გამოქვეყნებული დაშლა ასეთია: მომზადება 7 მწმ, handshake-ები 127 მწმ, ფრენა და რენდერი 74 მწმ, სერვერი 3 მწმ. იმავე „თბილ“ კავშირზე მეორე მოთხოვნას დაახლოებით 95 მწმ სჭირდება — ბრაუზერი 5, ერთი გადაკვეთა 62, სერვერი 3, რენდერი 25 — რადგან შენარჩუნებული სოკეტი და სესიის ბილეთი handshake-ებს სრულად აქრობს. აქტებს შორის გვერდი საათს აჩერებს და სოკეტებს, პორტებს, anycast მარშრუტირებას, SYN cookie-ებსა და ავთენტიფიცირებულ დაშიფვრას ხსნის.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.