Hacker News

Təsadüfi I/O-nun real dəyəri

Şərhlər

18 min read Via vondra.me

Mewayz Team

Editorial Team

Hacker News

Biznes proqram təminatınız olması lazım olduğundan daha yavaşdır — Və təsadüfi giriş/çıxış görünməz günahkardır

Müştəri hər dəfə yavaş idarəetmə panelindən şikayət etdikdə, komandanız hesabatın yüklənməsi üçün əlavə üç saniyə gözlədikdə və hər dəfə yoxlama səhifəniz alıcını səbirsizliyə düçar etdikdə — təsadüfi I/O-nun gəlirinizi sakitcə itirməsi şansı var. Bu, verilənlər bazası mühəndisləri üçün nəzərdə tutulmuş bir söz deyil. Bu, CRM axtarışlarından tutmuş faktura yaradılmasına qədər demək olar ki, hər bir iş proqramında gizlənən ölçülə bilən, bahalı darboğazdır. Onun real dəyərini başa düşmək təkcə texniki məşq deyil, həm də maliyyə işidir. Buna məhəl qoymayan şirkətlər bunun əvəzini şişmiş bulud hesabları, itirilmiş müştərilər və dərhal yüklənəcək ekranlarda gözləyən komandalarla ödəyirlər.

Təsadüfi I/O əslində nə deməkdir (və bu nə üçün bahadır)

Əsas olaraq I/O — giriş/çıxış — məlumatın oxunması və saxlanmasına yazılması prosesidir. Tətbiqiniz verilənlər bazasından qeydlər götürdükdə, diskdən faylları yüklədikdə və ya əməliyyat qeydlərini yazdıqda I/O əməliyyatlarını yerinə yetirir. Bu əməliyyatlar iki növdə olur: ardıcıltəsadüfi. Ardıcıl I/O, kitab oxumaq kimi bitişik bloklarda məlumatları oxuyur və ya yazır. Təsadüfi Giriş/Çıxış gözlənilməz şəkildə sıçrayır, məsələn, 47-ci səhifəyə, sonra 3-cü səhifəyə, sonra 812-ci səhifəyə keçmək kimi.

Bu iki nümunə arasındakı performans fərqi heyrətamizdir. Ənənəvi sabit diskdə ardıcıl oxunuşlar 150-200 MB/s ötürmə qabiliyyətinə nail ola bilər, təsadüfi oxunuşlar isə çox vaxt 0,5-1,5 MB/s sürətlə sürünür – fərq 100x və ya daha çoxdur. Təsadüfi I/O performansını kəskin şəkildə yaxşılaşdıran müasir NVMe SSD-lərdə belə iş yükündən asılı olaraq boşluq hələ də 5x ilə 20x arasında dəyişir. Biznes tətbiqiniz saniyədə minlərlə kiçik, səpələnmiş oxunuş sorğusu verdikdə – burada müştəri adı, orada faktura sətir elementi, başqa yerdə icazə yoxlanışı – hər bir hop mikrosaniyələrlə ölçülən gecikməni təqdim edir ki, bu da real istifadəçi gözləmə vaxtının saniyələrinə bərabərdir.

Fizika onilliklər ərzində dəyişməyib: yaddaşa səpələnmiş məlumatlara daxil olmaq onları ardıcıllıqla yayımlamaqdan daha yavaşdır. Dəyişən müasir tətbiqlərin təsadüfi I/O yaratma miqyasıdır ki, onun dəyərini nəzərə almamaq mümkün deyil.

Hər Biznes Əməliyyatı üzrə Gizli Vergi

Bir istifadəçi CRM idarə panelini açanda nə baş verdiyini düşünün. Tətbiq müştəri cədvəlini sorğulayır, ona son fəaliyyət qeydləri ilə qoşulur, əlaqəli sövdələşmə dəyərlərini çəkir, istifadəçi icazələrini yoxlayır, bildirişlərin sayını yükləyir və ekran seçimlərini alır. Bu sorğuların hər biri diskdə müxtəlif yerlərdə saxlanılan müxtəlif cədvəllərə toxuna bilər. 50 müştəri qeydini əks etdirən idarə paneli başlıq altında 300-dən 500-ə qədər təsadüfi I/O əməliyyatları yarada bilər. Pik iş saatlarında bunu 200 eyni vaxtda istifadəçiyə vurun və verilənlər bazası serveriniz saniyədə 100.000-dən çox təsadüfi oxunuşu emal edir.

Bu hipotetik deyil. Percona tərəfindən 2024-cü ildə aparılan bir araşdırma, zəif optimallaşdırılmış verilənlər bazası iş yüklərinin ümumi icra vaxtının 68%-ə qədərini giriş/çıxış əməliyyatlarını gözləməyə sərf etdiyini, təsadüfi giriş nümunələrinin əsas günahkar olduğunu göstərdi. Minlərlə müəssisəyə xidmət göstərən SaaS şirkəti üçün bu, birbaşa daha yüksək infrastruktur xərclərinə çevrilir. Bulud provayderləri IOPS (saniyədə giriş/çıxış əməliyyatları) ilə ödəniş alır və təsadüfi giriş/çıxış-ağır iş yükləri aylıq yaddaş hesablarını yüzlərlə dollardan on minlərlə dollara çatdıra bilər – məlumatın həcminə görə deyil, giriş nümunələrinə görə.

Xərc infrastrukturdan kənara çıxır. Akamai-nin araşdırmasına görə, hər 100 millisaniyədə əlavə səhifə yükləmə müddəti dönüşüm nisbətlərini təxminən 7% azaldır. Təsadüfi I/O faktura yaratmağınıza və ya hesabatın yüklənməsinə tam saniyə əlavə etdikdə siz təkcə hesablamaları yandırmırsınız, həm də gəliri yandırırsınız.

Biznes Tətbiqlərinin Performansı Boşaltdığı Harada

Giriş/çıxış nümunələrinə gəldikdə bütün funksiyalar bərabər yaradılmır. Ən ümumi biznes əməliyyatlarından bəziləri təsadüfi giriş üçün ən pis cinayətlərdir:

  • Axtarış və filtrləmə: Çoxsaylı sahələr (ad, tarix, status, teqlər) üzrə sorğular verilənlər bazasını yaddaşa səpələnmiş indeksləri skan etməyə məcbur edir və çox təsadüfi oxunuşlar yaradır
  • İdarəetmə panelinin yığılması: Gəlirin cəmlənməsi, aktiv istifadəçilərin sayılması və ya vaxtı keçmiş fakturaların hesablanması müxtəlif məlumat səhifələrində yayılmış minlərlə sıraya toxunmağı tələb edir
  • İcazə yoxlanışı: Çox kirayəçi platformalarında rol əsaslı giriş nəzarəti tez-tez hər sorğu üçün çoxsaylı axtarışlar tələb edir — istifadəçi → rol → icazələr → resurs — hər biri müxtəlif cədvəllərə toxunur
  • Hesabatın yaradılması: Aylıq əmək haqqı hesabatları, donanma baxımının xülasəsi və ya HR analitikası eyni vaxtda onlarla cədvəldən data çıxarır
  • Real vaxt bildirişləri: Modullar arasında yeni mesajların, tapşırıq yeniləmələrinin və sistem xəbərdarlıqlarının yoxlanılması daimi kiçik, təsadüfi sorğular axını yaradır

Nümunə aydındır: platforma nə qədər çox modul və xüsusiyyət təklif etsə, bir o qədər çox I/O yolları artır. Sadə link-in-bio aləti hər səhifə yükləməsi üçün 10 sorğu yarada bilər. CRM, faktura, HR, əmək haqqı, rezervasiya və analitik modulları olan tam biznes əməliyyat sistemi - Mewayz-in 207 modulunda təmin etdiyi kimi - nəzəri olaraq yüzlərlə yarada bilər. Ani hiss olunan platforma ilə ləng hiss edilən platforma arasındakı fərq çox vaxt həmin I/O modellərinin pərdə arxasında nə qədər ağıllı şəkildə idarə olunmasından asılıdır.

Niyə Problemə Avadanlıq Atmaq İşləmir

Tətbiqlər yavaşladıqda instinkt təkmilləşdirməkdir. Daha böyük serverlər, daha sürətli SSD-lər, daha çox RAM. Avadanlıq təkmilləşdirmələri kömək etsə də, onlar CFO-ları narahat edən azalan gəlirlərin əyrisini izləyirlər. Verilənlər bazası serverinizin operativ yaddaşını 64 GB-dan 128 GB-a qədər ikiqat artırmaq, keş vurma dərəcələrini 92% -dən 96% -ə qədər yaxşılaşdıra bilər - mənalı bir qazanc, lakin keşin qalan 4% -i hələ də təsadüfi I/O ilə yaddaşı vurur. AWS-də IOPS ayırmanızı 3000-dən 10.000-ə qədər artırmaq ayda təxminən 450 dollar baha başa gəlir, lakin p99 cavab müddətini yalnız 30% yaxşılaşdıra bilər.

Əsl problem memarlıqdır. Təsadüfi giriş/çıxış tez-tez daha dərin problemlərin əlamətidir: çatışmayan və ya zəif tərtib edilmiş indekslər, proqramın paketləşdirmə əvəzinə hər bir element üçün bir verilənlər bazası çağırışı etdiyi N+1 sorğu nümunələri, bir ekran cərgəsi üçün beş cədvəl birləşməsini tələb edən həddindən artıq normallaşdırılmış sxemlər və oxunmuş replikaların və ya keş qatlarının olmaması. Avadanlıq yeniləmələri simptomu müalicə edir. Memarlıq optimallaşdırması səbəbi müalicə edir.

Ən bahalı I/O əməliyyatı ilk növbədə mövcud olmaması lazım olan əməliyyatdır. Daha sürətli saxlama üçün xərclənən hər dollar üçün sorğunun optimallaşdırılmasına xərclənən on sent daha yaxşı nəticələr verir. Performans baxımından qalib gələn şirkətlər öz rəqabətlərini geridə qoymurlar – onlar məlumat əldə etmək modellərini üstələyirlər.

💡 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 →

Təsadüfi I/O-nu faktiki olaraq azaldan praktik strategiyalar

Təsadüfi I/O-nun azaldılması tətbiqinizin tam yenidən yazılmasını tələb etmir. Bu, məlumatların necə saxlandığı, əldə edilməsi və keşləşdirilməsi ilə bağlı məqsədyönlü, ölçülə bilən dəyişikliklər tələb edir. Ən yüksək təsir göstərən strategiyalar bunlardır:

  1. Aqressiv sorğu toplusunu həyata keçirin. N+1 sorğu nümunələrini həvəsli yükləmə ilə əvəz edin. İdarə paneliniz 50 müştərini və onların son fəaliyyətini yükləyirsə, 50 fərdi axtarış əvəzinə WHERE customer_id IN (...) istifadə edərək, bütün 50 fəaliyyət dəstini bir sorğuda əldə edin. Təkcə bu, siyahı baxışlarında təsadüfi I/O-nu 80% azalda bilər.
  2. Kompozit indekslərdən strateji istifadə edin. (tenant_id, status, created_at) üzərindəki kompozit indeks verilənlər bazasına ayrı-ayrı indekslər üzrə çoxsaylı təsadüfi axtarışlar əvəzinə tək ardıcıl indeks skanı ilə ümumi süzülmüş sorğuları təmin etməyə imkan verir.
  3. Ağıllı etibarsızlaşdırma ilə keşləmə qatını təqdim edin. Yaddaşda tez-tez daxil olan, lakin nadir hallarda dəyişdirilən data - istifadəçi icazələri, təşkilat parametrləri, modul konfiqurasiyaları - keş. Redis və ya Memcached bunlara mikrosaniyələrdə xidmət edə bilər, dəqiqədə minlərlə təsadüfi oxunuşu aradan qaldırır.
  4. Hesablamadan əvvəl toplamalar. Aylıq gəliri və ya hər bir tablosuna yüklənən işçi sayını hesablamaq əvəzinə, toplama işlərini cədvəl üzrə icra edin və nəticələri yadda saxlayın. Real vaxtda təsadüfi I/O-da kütləvi azalma üçün az miqdarda məlumat təzəliyini alver edin.
  5. Böyük cədvəlləri giriş nümunəsinə görə bölmək. Əgər sorğuların 90%-i son 30 günün datasına toxunursa, cədvəllərinizi tarix diapazonuna görə bölmək olar ki, aktiv bölmə keşdə isti qalsın, tarixi data isə daha ucuz yaddaşda soyuq qalsın.

Bunlar ekzotik üsullar deyil. Onlar yüz minlərlə istifadəçiyə xidmət göstərən platformalara mürəkkəb, çox modullu interfeyslərdə saniyədən aşağı cavab vaxtlarını saxlamağa imkan verən eyni nümunələrdir. Mewayz öz arxitekturasını V2 üçün yenidən qurduqda – tək link-in-bio alətindən 138.000-dən çox istifadəçiyə xidmət edən 207 modullu biznes ƏS-ə miqyası – I/O giriş nümunələrinin optimallaşdırılması, infrastruktur xərclərini mütənasib şəkildə artırmadan bu genişlənməni həyata keçirmək üçün əsas idi.

İstifadəçi Təcrübəsinə və Saxlanmasına Komponent Təsiri

Performans təkcə arxa plana aid deyil, həm də məhsul xüsusiyyətidir. Google-un araşdırması ardıcıl olaraq göstərdi ki, mobil istifadəçilərin 53%-i yüklənməsi 3 saniyədən çox vaxt aparan səhifəni tərk edir. İstifadəçilərin gündə onlarla dəfə qarşılıqlı əlaqədə olduğu biznes tətbiqləri üçün tolerantlıq daha da aşağıdır. Həftəlik hesabatlar verən əmək haqqı meneceri, ərizəçiləri nəzərdən keçirən HR rəhbəri və ya boru kəmərinin vəziyyətini yoxlayan satış nümayəndəsi – bu istifadəçilər intuitiv sürət hissi inkişaf etdirir. Onlar "faktura toplama sorğusunda təsadüfi giriş/çıxış gecikməsi çox yüksəkdir" ifadəsini işlətməyə bilər, lakin onlar "bu proqram təminatı yavaş hiss edir" deyəcək və alternativləri qiymətləndirəcək.

Kompleksləşdirmə effekti ölçülə bilər. İdarə panellərini 2,4 saniyə əvəzinə 800 ms-də yükləyən platforma sadəcə 3 dəfə sürətli hiss etmir, həm də istifadə davranışını dəyişir. İstifadəçilər məlumatları daha tez-tez yoxlayır, daha çox modulu araşdırır və aləti öz iş axınlarına daha dərindən inteqrasiya edir. Daha yüksək nişan daha yüksək saxlanma təmin edir, bu da daha yüksək ömür boyu dəyərini artırır. Slack məşhur şəkildə erkən artımının əhəmiyyətli bir hissəsini obsesif performans optimallaşdırması ilə əlaqələndirdi və sürətin özünün rəqabətli bir xəndək olduğunu başa düşdü.

Hamısı bir yerdə biznes platformaları üçün bu effekt hər modulda artır. CRM sürətlidirsə, lakin faktura yavaşdırsa, bütün platformanın qavranılması əziyyət çəkir. Funksiyalar üzrə performansın ardıcıllığı – rezervasiya idarəçiliyindən tutmuş parkın izlənməsinə və analitikaya qədər – təkcə ən görünən modullarda deyil, hər yerdə ardıcıl olaraq optimallaşdırılmış I/O nümunələri tələb edir.

Əhəmiyyətli olanı Ölçmək: Təsadüfi Giriş/Çıxışları Görünən etmək

Görmədiyiniz şeyi düzəldə bilməzsiniz. Təsadüfi I/O xərclərini həll etmək üçün ilk addım onları mühəndislik və əməliyyat qruplarınıza görünən etməkdir. Datadog, New Relic kimi müasir müşahidə alətləri və ya hətta Grafana ilə Prometheus kimi açıq mənbəli həllər real vaxt rejimində IOPS nümunələrini, sorğuların gecikmə paylamalarını və keş hit dərəcələrini izləyə bilər. Ən əhəmiyyətli göstəricilər bunlardır:

  • p95 və p99 sorğu gecikməsi: Orta gecikmə ağrını gizlədir. 95-ci və 99-cu faiz dilimləri istifadəçilərin əslində nə ilə qarşılaşdığını göstərir
  • Oxuma və yazma, ardıcıl və təsadüfi IOPS bölgüsü: Bu, iş yükünüzün I/O-ya bağlı olub-olmadığını və hansı növ I/O-nun üstünlük təşkil etdiyini göstərir
  • Keş vurma əmsalı: Yaxşı tənzimlənmiş sistemdə 95%-dən aşağı olan əmsal yaddaşdan təqdim edilməyən məlumatlara giriş modellərini təklif edir
  • Hər səhifə yükləməsi üzrə sorğuların sayı: Əgər bir istifadəçi əməliyyatı 20-30-dan çox verilənlər bazası sorğusunu işə salırsa, demək olar ki, optimallaşdırma imkanı var

Bu data ilə silahlanmış komandalar təxmin etmək əvəzinə ən yüksək təsirli optimallaşdırmalara üstünlük verə bilər. I/O performansını birinci dərəcəli metrik kimi qəbul edən müəssisələr – iş vaxtı, səhv dərəcələri və istifadəçi məmnuniyyəti ilə yanaşı – ardıcıl olaraq daha aşağı qiymətə daha sürətli məhsullar təqdim edirlər. İstifadəçilərin biznes alətlərinin istehlakçı tətbiqləri qədər həssas olmasını gözlədiyi bir bazarda bu nizam-intizam isteğe bağlı deyil. Bu, 138 000 istifadəçiyə qədər genişlənən platforma ilə öz mürəkkəbliyi altında bağlanan platforma arasındakı fərqdir.

Mewayz ilə biznesinizi sadələşdirin

Mewayz 207 biznes modulunu bir platformaya gətirir — CRM, faktura, layihənin idarə edilməsi və s. İş axınını sadələşdirən 138 000+ istifadəçiyə qoşulun.

Bu gün Pulsuz Başlayın→a>