Hacker News

Reālās nejaušās I/O izmaksas

komentāri

16 min read Via vondra.me

Mewayz Team

Editorial Team

Hacker News

Jūsu biznesa programmatūra ir lēnāka, nekā vajadzētu — un nejauša ievade/izvade ir neredzamais vaininieks

Katru reizi, kad klients sūdzas par lēnu informācijas paneli, katru reizi, kad jūsu komanda gaida papildu trīs sekundes, līdz tiek ielādēts pārskats, un katru reizi, kad jūsu norēķinu lapa zaudē pircēju nepacietības dēļ — pastāv liela iespēja, ka gadījuma ievade/izvade klusi iztukšo jūsu ieņēmumus. Tas nav modējošs vārds, kas paredzēts datu bāzu inženieriem. Tas ir izmērāms, dārgs šķērslis, kas slēpjas gandrīz katrā biznesa lietojumprogrammā, sākot no CRM meklēšanas līdz rēķinu ģenerēšanai. Izpratne par tā patiesajām izmaksām nav tikai tehnisks uzdevums, tas ir finansiāls uzdevums. Uzņēmumi, kas to ignorē, maksā cenu uzpūstiem mākoņa rēķiniem, zaudētiem klientiem un komandām, kas iestrēgušas gaidot ekrānos, kuriem vajadzētu uzreiz ielādēt.

Ko patiesībā nozīmē nejauša ievade/izvade (un kāpēc tas ir dārgs)

Pamatā I/O — ievade/izvade — ir datu nolasīšanas un ierakstīšanas process krātuvē. Kad jūsu lietojumprogramma ienes ierakstus no datu bāzes, ielādē failus no diska vai raksta darījumu žurnālus, tā veic I/O darbības. Šīs darbības ir pieejamas divās versijās: secīgas un nejaušas. Secīgā I/O nolasa vai ieraksta datus blakus esošos blokos, piemēram, lasot grāmatu no sākuma līdz beigām. Nejaušs ievades/izvades lēciens neparedzami, piemēram, pāršķirt uz 47. lappusi, tad 3. lappusi, tad 812. lappusi.

Šo divu modeļu veiktspējas atšķirība ir satriecoša. Tradicionālajā cietajā diskā secīgā nolasīšana var sasniegt 150–200 MB/s caurlaidspēju, savukārt nejaušā nolasīšana bieži tiek veikta ar ātrumu 0,5–1,5 MB/s — atšķirība ir 100 reižu vai vairāk. Pat mūsdienu NVMe SSD, kas ievērojami uzlabo izlases I/O veiktspēju, atšķirība joprojām ir no 5x līdz 20x atkarībā no darba slodzes. Kad jūsu uzņēmuma lietojumprogramma izdod tūkstošiem mazu, izkliedētu lasīšanas pieprasījumu sekundē — izvelkot klienta vārdu šeit, rēķina rindas vienību tur, atļaujas pārbaudi kaut kur citur — katrs lēciens ievieš latentumu, ko mēra mikrosekundēs, kas tiek apvienots reālā lietotāja gaidīšanas laika sekundēs.

Fizika nav mainījusies gadu desmitiem: piekļuve datiem, kas izkaisīti krātuvē, ir ievērojami lēnāka nekā to straumēšana kārtībā. Ir mainījies mērogs, kādā modernās lietojumprogrammas ģenerē nejaušu ievadi/izvadi, tāpēc nav iespējams ignorēt tās izmaksas.

Slēptais nodoklis par katru uzņēmējdarbības operāciju

Apsveriet, kas notiek, kad viens lietotājs atver CRM informācijas paneli. Lietojumprogramma vaicā klientu tabulu, pievieno to jaunāko darbību žurnāliem, iegūst saistītās darījumu vērtības, pārbauda lietotāju atļaujas, ielādē paziņojumu skaitu un ienes displeja preferences. Katrs no šiem vaicājumiem var pieskarties dažādām tabulām, kas saglabātas dažādās diska vietās. Informācijas panelis, kurā tiek rādīti 50 klientu ieraksti, zem pārsega var ģenerēt 300–500 gadījuma I/O operāciju. Reiziniet to ar 200 vienlaicīgiem lietotājiem maksimālās darba stundās, un jūsu datu bāzes serveris apstrādā vairāk nekā 100 000 gadījuma nolasījumu sekundē.

Tas nav hipotētisks. Percona 2024. gadā veiktajā pētījumā tika atklāts, ka slikti optimizētas datu bāzes darba slodzes pavada līdz 68% no kopējā izpildes laika, gaidot ievades/izvades darbības, un galvenais pārkāpējs ir brīvpiekļuves modeļi. SaaS uzņēmumam, kas apkalpo tūkstošiem uzņēmumu, tas tieši nozīmē augstākās infrastruktūras izmaksas. Mākoņpakalpojumu sniedzēji iekasē maksu, izmantojot IOPS (I/O operācijas sekundē), un nejaušas I/O lielas darba slodzes var palielināt ikmēneša krātuves rēķinus no simtiem līdz desmitiem tūkstošu dolāru — nevis datu apjoma, bet piekļuves modeļu dēļ.

Izmaksas pārsniedz infrastruktūru. Saskaņā ar Akamai pētījumu katras 100 milisekundes papildu lapas ielādes laika samazina reklāmguvumu līmeni par aptuveni 7%. Kad nejauša ievade/izvade papildina pilnu sekundi jūsu rēķinu ģenerēšanai vai atskaites ielādei, jūs ne tikai tērējat aprēķinus, bet arī ieņēmumus.

Kur biznesa lietojumprogrammas zaudē veiktspēju

Ne visi līdzekļi ir vienādi, ja runa ir par I/O modeļiem. Dažas no visizplatītākajām uzņēmējdarbības operācijām ir arī vissmagākie nejaušās piekļuves pārkāpumi:

  • Meklēšana un filtrēšana: vaicājumi vairākos laukos (nosaukums, datums, statuss, tagi) liek datu bāzei skenēt krātuvē izkaisītus indeksus, ģenerējot smagus nejaušus nolasījumus.
  • Informācijas paneļa apkopojumi: lai summētu ieņēmumus, skaitītu aktīvos lietotājus vai aprēķinātu nokavēto rēķinu skaitu, ir jāpieskaras tūkstošiem rindu, kas izvietotas dažādās datu lapās.
  • Atļauju pārbaudes: uz lomu balstīta piekļuves kontrole vairāku nomnieku platformās bieži vien prasa vairākus meklējumus vienam pieprasījumam — lietotājs → loma → atļaujas → resurss — katrs no tiem saskaras ar dažādām tabulām
  • Pārskatu ģenerēšana: ikmēneša algu pārskati, autoparka apkopes kopsavilkumi vai personāla analīze vienlaikus iegūst datus no desmitiem tabulu.
  • Reāllaika paziņojumi: pārbaudot jaunus ziņojumus, uzdevumu atjauninājumus un sistēmas brīdinājumus visos moduļos, tiek izveidota pastāvīga mazu, nejaušu vaicājumu plūsma.

Shēma ir skaidra: jo vairāk moduļu un funkciju piedāvā platforma, jo vairāk I/O ceļu palielinās. Vienkāršs saišu rīks biogrāfijā var ģenerēt 10 vaicājumus vienā lapas ielādes laikā. Pilna biznesa operētājsistēma ar CRM, rēķinu izrakstīšanas, HR, algu, rezervēšanas un analītikas moduļiem, piemēram, to, ko Mewayz nodrošina savos 207 moduļos, teorētiski varētu radīt simtiem. Atšķirība starp platformu, kas šķiet tūlītēja, un platformu, kas jūtas gausa, bieži vien ir saistīta ar to, cik gudri šie I/O modeļi tiek pārvaldīti aizkulisēs.

Kāpēc problēmas risināšana ar aparatūru nedarbojas

Kad lietojumprogrammas palēninās, instinkts ir jaunināšana. Lielāki serveri, ātrāki SSD, vairāk RAM. Un, lai gan aparatūras uzlabojumi palīdz, tie seko atdeves samazināšanās līknei, kas padara finanšu vadītājus neērtus. Divkāršojot datu bāzes servera operatīvo atmiņu no 64 GB uz 128 GB, kešatmiņas trāpījumu līmenis var uzlaboties no 92% līdz 96% — tas ir ievērojams ieguvums, taču atlikušie 4% kešatmiņas izlaidumu joprojām skar krātuvi, izmantojot nejaušu I/O. Trīskāršojot savu IOPS piešķīrumu AWS no 3000 līdz 10 000, mēnesī ir jāmaksā aptuveni par 450 ASV dolāriem vairāk, taču tas var tikai uzlabot p99 atbildes laiku par 30%.

Patiesā problēma ir arhitektoniskā. Nejauša ievade/izvade bieži vien ir dziļāku problēmu simptoms: trūkst vai ir slikti izstrādāti indeksi, N+1 vaicājumu modeļi, kuros lietojumprogramma veic vienu datu bāzes izsaukumu katram vienumam, nevis pakešu veidošanai, pārāk normalizētas shēmas, kurām ir nepieciešami pieci tabulas savienojumi vienai displeja rindai, un lasīšanas kopiju vai kešatmiņas slāņu trūkums. Aparatūras jauninājumi novērš simptomu. Arhitektūras optimizācija novērš cēloni.

Visdārgākā I/O operācija ir tā, kurai nevajadzētu pastāvēt. Par katru dolāru, kas iztērēts ātrākai uzglabāšanai, desmit centi, kas iztērēti vaicājumu optimizēšanai, nodrošina labākus rezultātus. Uzņēmumi, kas uzvar veiktspējas ziņā, nepārspēj savus konkurentus — tie pārdomā savus datu piekļuves modeļus.

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

Praktiskas stratēģijas, kas faktiski samazina nejaušas ievades/izvades gadījumu skaitu

Lai samazinātu nejaušas ievades/izvades apjomu, jūsu lietojumprogramma nav pilnībā jāpārraksta. Tam nepieciešamas mērķtiecīgas, izmērāmas izmaiņas datu glabāšanā, piekļūšanā un kešatmiņā. Tālāk ir norādītas stratēģijas, kas nodrošina vislielāko ietekmi:

  1. Ieviesiet agresīvu vaicājumu grupēšanu. Aizstājiet N+1 vaicājumu modeļus ar nepacietīgu ielādi. Ja informācijas panelī tiek ielādēti 50 klienti un viņu nesenās darbības, vienā vaicājumā izgūstiet visas 50 darbību kopas, izmantojot WHERE customer_id IN (...), nevis 50 atsevišķus meklējumus. Tas vien var samazināt izlases I/O par 80% saraksta skatos.
  2. Stratēģiski izmantojiet saliktos indeksus. Salikts indekss (tenant_id, status, Created_at) ļauj datu bāzei apmierināt izplatītus filtrētus vaicājumus, izmantojot vienu secīgu indeksa skenēšanu, nevis vairākus nejaušus meklējumus atsevišķos rādītājos.
  3. Ieviest kešatmiņas slāni ar inteliģentu nederīgu atzīšanu. Saglabājiet atmiņā bieži piekļūtos, bet reti mainītos datus — lietotāju atļaujas, organizācijas iestatījumus, moduļu konfigurācijas. Redis vai Memcached tos var apkalpot mikrosekundēs, novēršot tūkstošiem nejaušu nolasījumu minūtē.
  4. Iepriekš aprēķiniet apkopojumus. Tā vietā, lai aprēķinātu ikmēneša ieņēmumus vai darbinieku skaitu katrai informācijas paneļa ielādei, veiciet apkopošanas darbus pēc grafika un saglabājiet rezultātus. Apmainiet nelielu datu apjomu, lai ievērojami samazinātu reāllaika nejaušo I/O.
  5. Sadaliet lielas tabulas pēc piekļuves modeļa. Ja 90% vaicājumu skar pēdējo 30 dienu datus, sadaliet tabulas pēc datumu diapazona, lai aktīvais nodalījums paliktu karsts kešatmiņā, bet vēsturiskie dati paliktu auksti, izmantojot lētāku krātuvi.

Tās nav eksotiskas metodes. Tie ir tie paši modeļi, kas ļauj platformām, kas apkalpo simtiem tūkstošu lietotāju, saglabāt atbildes laiku, kas nepārsniedz sekundes, sarežģītās, vairāku moduļu saskarnēs. Kad Mewayz pārbūvēja savu arhitektūru V2 — no viena saite-in-bio rīka uz 207 moduļu biznesa operētājsistēmu, kas apkalpo vairāk nekā 138 000 lietotāju, I/O piekļuves modeļu optimizēšana bija pamats, lai padarītu šo paplašināšanu dzīvotspējīgu, proporcionāli nereizinot infrastruktūras izmaksas.

Sarežģītā ietekme uz lietotāju pieredzi un noturēšanu

Veiktspēja nav tikai aizmugursistēmas problēma — tā ir produkta funkcija. Google pētījumi pastāvīgi liecina, ka 53% mobilo ierīču lietotāju pamet lapu, kuras ielāde ilgst vairāk nekā 3 sekundes. Biznesa lietojumprogrammām, kurās lietotāji mijiedarbojas desmitiem reižu dienā, pielaide ir vēl zemāka. Algu menedžeris, kas sagatavo iknedēļas pārskatus, personāla vadītājs, kas pārskata pretendentus, vai tirdzniecības pārstāvis, kas pārbauda konveijera statusu — šie lietotāji attīsta intuitīvu ātruma sajūtu. Viņi, iespējams, nenorādīs, ka “rēķinu apkopošanas vaicājumā nejaušais I/O latentums ir pārāk augsts”, taču viņi pateiks “šī programmatūra šķiet lēna” un sāks izvērtēt alternatīvas.

Savienojuma efekts ir izmērāms. Platforma, kas ielādē informācijas paneļus 800 ms, nevis 2,4 sekundēs, ne tikai jūtas 3 reizes ātrāka – tā maina lietošanas paradumus. Lietotāji biežāk pārbauda datus, izpēta vairāk moduļu un padziļināti integrē rīku savās darbplūsmās. Lielāka iesaistīšanās veicina lielāku saglabāšanu, kas veicina augstāku mūža vērtību. Slack ir slavens, ka ievērojamu daļu no savas agrīnās izaugsmes ir saistīta ar obsesīvu veiktspējas optimizāciju, atzīstot, ka ātrums pats par sevi bija konkurences grāvis.

Viss vienā biznesa platformām šis efekts tiek reizināts katrā modulī. Ja CRM ir ātrs, bet rēķinu izrakstīšana ir lēna, tiek ciesta visas platformas uztvere. Lai nodrošinātu veiktspējas konsekvenci dažādās funkcijās — no rezervāciju pārvaldības līdz autoparka izsekošanas līdz analītikai — ir nepieciešami konsekventi optimizēti I/O modeļi visur, ne tikai redzamākajos moduļos.

Svarīgā mērīšana: nejaušas I/O redzamības padarīšana

Jūs nevarat labot to, ko neredzat. Pirmais solis, lai novērstu nejaušas I/O izmaksas, ir padarīt tās redzamas jūsu inženieru un operāciju komandām. Mūsdienu novērošanas rīki, piemēram, Datadog, New Relic vai pat atvērtā pirmkoda risinājumi, piemēram, Prometheus ar Grafana, var reāllaikā izsekot IOPS modeļiem, vaicājumu latentuma sadalījumiem un kešatmiņas trāpījumu biežumu. Vissvarīgākie rādītāji ir:

  • P95 un p99 vaicājuma latentums: vidējais latentums slēpj sāpes. 95. un 99. procentile parāda, ko patiesībā piedzīvo jūsu lēnākie un visneapmierinātākie lietotāji
  • IOPS sadalījums pēc lasīšanas un rakstīšanas, secīgi un nejauši: tas atklāj, vai jūsu darba slodze ir saistīta ar I/O un kāda veida I/O dominē.
  • Kešatmiņas trāpījumu attiecība: koeficients, kas ir mazāks par 95% labi noregulētā sistēmā, liecina par datu piekļuves modeļiem, kas netiek apkalpoti no atmiņas.
  • Vaicājumu skaits vienā lapas ielāde: ja viena lietotāja darbība aktivizē vairāk nekā 20–30 datu bāzes vaicājumus, gandrīz noteikti pastāv optimizācijas iespēja.

Apbruņojoties ar šiem datiem, komandas var noteikt prioritāti visefektīvākajām optimizācijām, nevis minējumiem. Uzņēmumi, kas I/O veiktspēju uzskata par pirmās klases metriku — līdzās darbspējas laikam, kļūdu biežumam un lietotāju apmierinātībai – konsekventi piegādā ātrākus produktus par zemākām izmaksām. Tirgū, kurā lietotāji sagaida, ka biznesa rīki būs tikpat atsaucīgi kā patērētāju lietotnes, šī disciplīna nav obligāta. Tā ir atšķirība starp platformu, kas graciozi mērogojas līdz 138 000 lietotājiem, un platformu, kas saspringst savas sarežģītības apstākļos.

Racionalizējiet savu biznesu, izmantojot Mewayz

Mewayz apvieno 207 biznesa moduļus vienā platformā — CRM, rēķinu izrakstīšanu, projektu pārvaldību un daudz ko citu. Pievienojieties vairāk nekā 138 000 lietotājiem, kuri ir vienkāršojuši savu darbplūsmu.

Sāciet bez maksas jau šodien →

Bieži uzdotie jautājumi

Kas īsti ir nejauša ievade/izvade, un kāpēc tā ir tik lēna?

Nejaušs ievads/izvade notiek, kad sistēma nolasa vai ieraksta nelielas datu daļas no dažādām nesecīgām vietām atmiņas diskā. Atšķirībā no secīgās I/O (faila nolasīšanas no sākuma līdz beigām), lasīšanas/rakstīšanas galviņai ir nepārtraukti jālēkā apkārt, radot ievērojamas fiziskas aizkaves. Tas ir galvenais iemesls, kāpēc datu bāzes vaicājums, kas ienes izkaisītus ierakstus, ir daudz lēnāks nekā liela video faila straumēšana, pat ja kopējais datu apjoms ir mazāks.

Kā nejauša ievade/izvade tieši ietekmē manu uzņēmējdarbību?

Tas tieši ietekmē lietotāja pieredzi un produktivitāti. Lēnas lietojumprogrammu atbildes satrauc klientus, izraisot groza pamešanu un atbalsta biļetes. Darbiniekiem gausa CRM un ziņošanas rīki tērē dārgo laiku. Šīs kavēšanās pārvēršas par taustāmām izmaksām: pārdošanas apjoma samazināšanos, darbinieku efektivitātes samazināšanos un iespējamu kaitējumu jūsu zīmola reputācijai saistībā ar atsaucību. Katrai latentuma sekundei ir naudas vērtība.

Vai tā nav tikai aparatūras problēma? Vai es nevaru nopirkt ātrākus SSD?

Lai gan palīdz ātrāki SSD, tie ir dārgs un bieži vien nepilnīgs risinājums. Galvenais iemesls parasti ir neefektīva programmatūra, kas veic daudzus mazus, izkliedētus datu bāzes pieprasījumus. Lietojumprogrammas koda un datu bāzes vaicājumu optimizēšana, lai samazinātu nejaušu I/O, ir daudz efektīvāka. Risinājumi, piemēram, Mewayz ar 207 iepriekš iebūvētiem moduļiem, sākot no 19 ASV dolāriem mēnesī, ir izstrādāti, lai efektīvi racionalizētu datu piekļuves modeļus.

Kas ir pirmais solis, lai noteiktu, vai nejauša ievade/izvade ir mans vājais kakls?

Sāciet ar lietojumprogrammas veiktspējas uzraudzības rīkiem. Meklējiet datu bāzes metriku, kas parāda augstu lasīšanas/rakstīšanas operāciju sekundē (IOPS) kopā ar lēnu vaicājuma laiku. Profilējiet savu lietojumprogrammu, lai identificētu biežus, mazus vaicājumus. Ja viena lietotāja darbība aktivizē desmitiem atsevišķu datu bāzes izsaukumu, nevis dažus efektīvus izsaukumus, iespējams, esat atradis nejaušu I/O problēmu, kas jārisina.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime