Hacker News

Tikroji atsitiktinio I/O kaina

Komentarai

13 min read Via vondra.me

Mewayz Team

Editorial Team

Hacker News

Jūsų verslo programinė įranga yra lėtesnė, nei turėtų būti – o atsitiktinė įvestis/išvestis yra nematomas kaltininkas

Kiekvieną kartą, kai klientas skundžiasi dėl lėto prietaisų skydelio, kiekvieną kartą, kai jūsų komanda laukia papildomai tris sekundes, kol bus įkelta ataskaita, ir kiekvieną kartą, kai atsiskaitymo puslapis praranda pirkėją dėl nekantrumo – yra didelė tikimybė, kad atsitiktinė įvestis / išvestis tyliai išeikvoja jūsų pajamas. Tai nėra madingas žodis, skirtas duomenų bazių inžinieriams. Tai išmatuojama, brangi kliūtis, slypi beveik kiekvienoje verslo programoje, nuo CRM paieškos iki sąskaitų faktūrų generavimo. Suprasti tikrąją jo kainą nėra tik techninė užduotis – tai finansinė. Įmonės, kurios to nepaiso, moka išpūstomis debesų sąskaitomis, prarastais klientais ir komandomis, laukiančiomis ekranuose, kurie turėtų būti įkeliami akimirksniu.

Ką iš tikrųjų reiškia atsitiktinė įvestis / išvestis (ir kodėl ji brangi)

I/O – įvestis/išvestis – yra duomenų nuskaitymo ir įrašymo į saugyklą procesas. Kai jūsų programa gauna įrašus iš duomenų bazės, įkelia failus iš disko arba rašo operacijų žurnalus, ji atlieka įvesties / išvesties operacijas. Šios operacijos yra dviejų tipų: nuoseklios ir atsitiktinės. Nuoseklus I/O nuskaito arba įrašo duomenis gretimuose blokuose, pavyzdžiui, skaito knygą nuo pradžios iki pabaigos. Atsitiktinis įvestis / išvestis šokinėja nenuspėjamai, pavyzdžiui, perkeliama į 47 puslapį, tada 3 puslapį, tada 812 puslapį.

Šių dviejų modelių našumo skirtumas yra stulbinantis. Įprastame standžiajame diske nuosekliai nuskaitant galima pasiekti 150–200 MB/s pralaidumą, o atsitiktiniai nuskaitymai dažnai nuskaitomi 0,5–1,5 MB/s greičiu – skirtumas yra 100 kartų ar daugiau. Netgi šiuolaikiniuose NVMe SSD, kurie žymiai pagerina atsitiktinių įvesties ir išvesties našumą, skirtumas vis tiek svyruoja nuo 5x iki 20x, priklausomai nuo darbo krūvio. Kai jūsų verslo programa pateikia tūkstančius mažų, išsklaidytų skaitymo užklausų per sekundę – ištraukiant kliento vardą čia, sąskaitos faktūros eilutės elementą ten, tikrinant leidimus kažkur kitur – kiekvienas šuolis įveda delsą, matuojamą mikrosekundėmis, kuri sujungiama į realaus naudotojo laukimo laiko sekundes.

Fizika nepasikeitė dešimtmečius: prieiga prie duomenų, išsibarsčiusių saugykloje, yra iš esmės lėtesnė, nei srautinis jų eilės siuntimas. Pasikeitė mastas, kuriuo šiuolaikinės programos generuoja atsitiktines įvesties / išvesties programas, todėl neįmanoma nepaisyti išlaidų.

Paslėptas mokestis už kiekvieną verslo operaciją

Apsvarstykite, kas nutinka, kai vienas naudotojas atidaro CRM informacijos suvestinę. Programa pateikia užklausą klientų lentelėje, sujungia ją su naujausios veiklos žurnalais, ištraukia susijusias sandorių vertes, tikrina naudotojų leidimus, įkelia pranešimų skaičių ir pateikia rodymo nuostatas. Kiekviena iš šių užklausų gali liesti skirtingas lenteles, saugomas skirtingose ​​disko vietose. Prietaisų skydelis, kuriame rodoma 50 klientų įrašų, po gaubtu gali sugeneruoti 300–500 atsitiktinių įvesties / išvesties operacijų. Padauginkite tai iš 200 vienu metu dirbančių vartotojų piko darbo valandomis ir jūsų duomenų bazės serveris apdoros daugiau nei 100 000 atsitiktinių nuskaitymų per sekundę.

Tai nėra hipotetinė. 2024 m. „Percona“ atliktas tyrimas parodė, kad prastai optimizuoti duomenų bazės darbo krūviai praleidžia iki 68 % viso vykdymo laiko laukdami įvesties / išvesties operacijų, o laisvosios prieigos modeliai yra pagrindinis pažeidėjas. „SaaS“ įmonei, aptarnaujančiai tūkstančius įmonių, tai tiesiogiai reiškia didesnes infrastruktūros išlaidas. Debesijos paslaugų teikėjai apmokestina pagal IOPS (įvesties / išvesties operacijas per sekundę), o atsitiktiniai dideli įvesties / išvesties darbo krūviai gali padidinti mėnesines saugyklos sąskaitas nuo šimtų iki dešimčių tūkstančių dolerių – ne dėl duomenų kiekio, o dėl prieigos modelių.

Išlaidos apima ne tik infrastruktūrą. Remiantis „Akamai“ atliktais tyrimais, kas 100 milisekundžių papildomo puslapio įkėlimo laikas sumažina konversijų rodiklius maždaug 7 proc. Kai atsitiktinis įvestis / išvestis prideda visą sekundę prie sąskaitos faktūros generavimo ar ataskaitos įkėlimo, jūs ne tik skaičiuojate, bet ir pajamas.

Verslo taikomųjų programų našumas blogėja

Ne visos funkcijos yra vienodos, kai kalbama apie įvesties / išvesties modelius. Kai kurios dažniausiai pasitaikančios verslo operacijos taip pat labiausiai pažeidžia atsitiktinę prieigą:

  • Paieška ir filtravimas: užklausos keliuose laukuose (pavadinimas, data, būsena, žymos) verčia duomenų bazę nuskaityti rodykles, išsklaidytas saugykloje, generuojant sunkius atsitiktinius skaitymus.
  • Informacijos suvestinės apibendrinimas: norint susumuoti pajamas, skaičiuoti aktyvius naudotojus arba skaičiuoti vėluojančias sąskaitas faktūras, reikia paliesti tūkstančius eilučių, paskirstytų skirtinguose duomenų puslapiuose.
  • Leidimų tikrinimas: vaidmenimis pagrįstas prieigos valdymas kelių nuomininkų platformose dažnai reikalauja kelių peržvalgų vienai užklausai – naudotojas → vaidmuo → leidimai → ištekliai – kiekvienas pasiekia skirtingas lenteles
  • Ataskaitų generavimas: mėnesinės darbo užmokesčio ataskaitos, automobilių parko priežiūros suvestinės arba personalo analizė vienu metu renka duomenis iš dešimčių lentelių.
  • Pranešimai realiuoju laiku: tikrinant, ar moduliuose nėra naujų pranešimų, užduočių naujinių ir sistemos įspėjimų, sukuriamas nuolatinis mažų atsitiktinių užklausų srautas.

Schema aišku: kuo daugiau modulių ir funkcijų platforma siūlo, tuo daugiau I/O kelių daugėja. Paprastas nuorodos į biografiją įrankis gali sugeneruoti 10 užklausų per vieną puslapio įkėlimą. Visa verslo operacinė sistema su CRM, sąskaitų faktūrų išrašymo, žmogiškųjų išteklių, darbo užmokesčio, užsakymo ir analizės moduliais, kaip tai, ką „Mewayz“ siūlo savo 207 moduliuose, teoriškai galėtų generuoti šimtus. Skirtumas tarp platformos, kuri jaučiasi akimirksniu, ir tos, kuri jaučiasi vangi, dažnai priklauso nuo to, kaip protingai tie įvesties/išvesties modeliai valdomi užkulisiuose.

Kodėl neveikia aparatinės įrangos problemos sprendimas

Kai programos sulėtėja, instinktas yra atnaujinti. Didesni serveriai, greitesni SSD, daugiau RAM. Ir nors techninės įrangos patobulinimai padeda, jie seka mažėjančios grąžos kreivę, dėl kurios finansų direktoriai jaučiasi nepatogūs. Duomenų bazės serverio operatyviosios atminties padvigubinimas nuo 64 GB iki 128 GB gali padidinti talpyklos pataikymo dažnį nuo 92% iki 96% – tai reikšmingas padidėjimas, tačiau likę 4% talpyklos praleidimų vis tiek patenka į saugyklą su atsitiktine įvestimi / išvestimi. Patrigubinti IOPS paskirstymą AWS nuo 3 000 iki 10 000 kainuoja maždaug 450 USD daugiau per mėnesį, tačiau p99 atsako laikas gali pailgėti tik 30 %.

Tikroji problema yra architektūrinė. Atsitiktinis įvestis/išvestis dažnai yra gilesnių problemų simptomas: trūksta indeksų arba jie yra prastai suprojektuoti, N+1 užklausų šablonai, kai programa atlieka vieną duomenų bazės iškvietimą vienam elementui, o ne paketų rinkimui, per daug normalizuotos schemos, kurioms reikia penkių lentelių sujungimų vienai rodymo eilutei, ir skaitymo kopijų ar talpyklos sluoksnių trūkumas. Aparatinės įrangos atnaujinimas pašalina simptomą. Architektūrinis optimizavimas pašalina priežastį.

Brangiausia įvesties / išvesties operacija yra ta, kurios iš pradžių neturėtų būti. Už kiekvieną greitesnei saugyklai išleistą dolerį dešimt centų, išleistų optimizuojant užklausą, duoda geresnių rezultatų. Įmonės, kurios laimi dėl našumo, nepralenkia savo konkurentų – jos per daug galvoja apie savo duomenų prieigos modelius.

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

Praktinės strategijos, kurios iš tikrųjų sumažina atsitiktinių įvedimų / išėjimų skaičių

Norint sumažinti atsitiktines įvesties / išvesties programas, nereikia visiškai perrašyti programos. Tam reikia tikslingų, išmatuojamų duomenų saugojimo, prieigos ir talpyklos pakeitimų. Štai strategijos, kurios turi didžiausią poveikį:

  1. Įdiekite agresyvų užklausų paketą. Pakeiskite N+1 užklausų šablonus noriai įkelti. Jei į prietaisų skydelį įkeliama 50 klientų ir jų naujausia veikla, gaukite visus 50 veiklos rinkinių vienoje užklausoje naudodami WHERE customer_id IN (...), o ne 50 atskirų paieškų. Vien tai gali sumažinti atsitiktinių I/O skaičių 80 % sąrašo rodiniuose.
  2. Strategiškai naudokite sudėtinius indeksus. Sudėtinis indeksas (tenant_id, status, Created_at) leidžia duomenų bazei patenkinti įprastas filtruojamas užklausas vienu nuosekliu indekso nuskaitymu, o ne keliomis atsitiktinėmis peržiūromis atskiruose indeksuose.
  3. Įveskite talpyklos sluoksnį su intelektualiu negaliojimo panaikinimu. Atmintyje saugokite dažnai pasiekiamus, bet retai keičiamus duomenis – naudotojo leidimus, organizacijos nustatymus, modulio konfigūracijas. „Redis“ arba „Memcached“ gali juos pateikti per mikrosekundes, pašalindami tūkstančius atsitiktinių nuskaitymų per minutę.
  4. Iš anksto apskaičiuokite agregatus. Užuot skaičiuoję mėnesines pajamas ar darbuotojų skaičių kiekvieną kartą įkeldami prietaisų skydelį, vykdykite kaupimo užduotis pagal tvarkaraštį ir išsaugokite rezultatus. Pakeiskite nedidelį kiekį duomenų, kad labai sumažintumėte atsitiktinių įvesties ir išvesties realiuoju laiku.
  5. Dideles lenteles suskirstykite pagal prieigos šabloną. Jei 90 % užklausų paliečia pastarųjų 30 dienų duomenis, suskirstykite lenteles pagal dienų seką, kad aktyvus skaidinys liktų karštas talpykloje, o istoriniai duomenys būtų šalti pigesnėje saugykloje.

Tai nėra egzotiški metodai. Tai yra tie patys modeliai, leidžiantys platformoms, aptarnaujančioms šimtus tūkstančių vartotojų, išlaikyti trumpesnį nei sekundės atsako laiką sudėtingose ​​kelių modulių sąsajose. Kai Mewayz atkūrė savo V2 architektūrą – nuo vieno „link-in-Bio“ įrankio iki 207 modulių verslo OS, aptarnaujančios daugiau nei 138 000 vartotojų, I/O prieigos modelių optimizavimas buvo esminis veiksnys, kad plėtra būtų gyvybinga proporcingai nepadauginus infrastruktūros sąnaudų.

Sudėtingas poveikis naudotojų patirčiai ir išlaikymui

Našumas yra ne tik pagrindinė problema – tai produkto funkcija. „Google“ tyrimai nuolat rodo, kad 53 % mobiliųjų naudotojų palieka puslapį, kurio įkėlimas trunka ilgiau nei 3 sekundes. Verslo programoms, kuriose vartotojai sąveikauja dešimtis kartų per dieną, tolerancija yra dar mažesnė. Darbo užmokesčio vadybininkas, rengiantis savaitines ataskaitas, personalo vadovas, peržiūrintis kandidatus, arba pardavimo atstovas, tikrinantis vamzdyno būseną – šie vartotojai ugdo intuityvų greičio pojūtį. Jie gali neapibūdinti, kad „atsitiktinė įvesties / išvesties delsa sąskaitų faktūrų apibendrinimo užklausoje yra per didelė“, bet pasakys „ši programinė įranga veikia lėtai“ ir pradės vertinti alternatyvas.

Sudėties efektas yra išmatuojamas. Platforma, kuri prietaisų skydelius įkelia per 800 ms, o ne per 2,4 sekundės, veikia ne tik 3 kartus greičiau – ji keičia naudojimo elgesį. Vartotojai dažniau tikrina duomenis, tyrinėja daugiau modulių ir giliau integruoja įrankį į savo darbo eigą. Didesnis įsitraukimas skatina didesnį išlaikymą, o tai lemia didesnę viso gyvenimo vertę. „Slack“ didžiąją savo ankstyvojo augimo dalį priskyrė obsesiniam našumo optimizavimui, nes pripažino, kad pats greitis buvo konkurencinis griovys.

Verslo platformose „viskas viename“ šis efektas padaugėja kiekviename modulyje. Jei CRM greitas, bet sąskaitų faktūrų išrašymas lėtas, nukenčia visos platformos suvokimas. Dėl funkcijų nuoseklumo – nuo užsakymų valdymo iki transporto parko stebėjimo iki analizės – reikia nuosekliai optimizuotų įvesties / išvesties modelių visur, ne tik matomiausiuose moduliuose.

Svarbių dalykų įvertinimas: atsitiktinės įvesties / išvesties matomumas

Negalite pataisyti to, ko nematote. Pirmasis žingsnis sprendžiant atsitiktinių įvesties / išvesties išlaidas yra padaryti jas matomas jūsų inžinierių ir operacijų komandoms. Šiuolaikiniai stebėjimo įrankiai, tokie kaip „Datadog“, „New Relic“ ar net atvirojo kodo sprendimai, tokie kaip „Prometheus“ su „Grafana“, gali stebėti IOPS modelius, užklausų delsos paskirstymą ir talpyklos pataikymo dažnius realiuoju laiku. Svarbiausios metrikos yra:

  • p95 ir p99 užklausos delsa: vidutinė delsa paslepia skausmą. 95 ir 99 procentilis rodo, ką iš tikrųjų patiria lėčiausi ir labiausiai nusivylę naudotojai
  • IOPS suskirstymas pagal skaitymą ir rašymą, nuoseklus ir atsitiktinis: parodo, ar jūsų darbo krūvis yra susietas su įvesties / išvesties ir kokio tipo įvestis / išvestis dominuoja
  • Talpyklos įvykių koeficientas: mažesnis nei 95 % koeficientas gerai sureguliuotoje sistemoje rodo duomenų prieigos modelius, kurie nepateikiami iš atminties.
  • Užklausų skaičius vienam puslapio įkėlimui: jei vienas naudotojo veiksmas suaktyvina daugiau nei 20–30 duomenų bazės užklausų, beveik neabejotinai yra optimizavimo galimybė.

Turėdamos šiuos duomenis, komandos gali teikti pirmenybę didžiausio poveikio optimizavimui, o ne spėlioti. Įmonės, kurios įvesties / išvesties našumą vertina kaip aukščiausios klasės metriką, kartu su veikimo laiku, klaidų lygiu ir vartotojų pasitenkinimu, nuolat tiekia greitesnius produktus mažesnėmis sąnaudomis. Rinkoje, kurioje vartotojai tikisi, kad verslo įrankiai bus tokie pat jautrūs kaip vartotojų programos, ši disciplina nėra neprivaloma. Tai skirtumas tarp platformos, kuri grakščiai padidinama iki 138 000 naudotojų, ir platformos, kuri stabilizuojasi dėl savo sudėtingumo.

Supaprastinkite savo verslą naudodami „Mewayz“

Mewayz vienoje platformoje sujungia 207 verslo modulius – CRM, sąskaitų faktūrų išrašymą, projektų valdymą ir kt. Prisijunkite prie daugiau nei 138 000 naudotojų, kurie supaprastino savo darbo eigą.

Pradėkite nemokamai šiandien →

Dažniausiai užduodami klausimai

Kas tiksliai yra atsitiktinis I/O ir kodėl jis toks lėtas?

Atsitiktinė įvestis/išvestis įvyksta, kai sistema nuskaito arba įrašo mažas duomenų dalis iš įvairių, nenuoseklių saugojimo įrenginio vietų. Skirtingai nuo nuoseklaus įvesties / išvesties (failo skaitymo nuo pradžios iki pabaigos), skaitymo / rašymo galvutė turi nuolat šokinėti ir sukelti didelių fizinių vėlavimų. Tai yra pagrindinė priežastis, kodėl duomenų bazės užklausa, siunčianti išsklaidytus įrašus, yra daug lėtesnė nei didelio vaizdo failo srautinis perdavimas, net jei bendras duomenų kiekis yra mažesnis.

Kaip atsitiktinė įvestis/išvestis tiesiogiai veikia mano verslo operacijas?

Tai tiesiogiai veikia vartotojo patirtį ir produktyvumą. Lėti atsakymai į programas nuvilia klientus, todėl krepšelis paliekamas ir palaikomi bilietai. Darbuotojams vangios CRM ir ataskaitų teikimo įrankiai švaisto brangų laiką. Dėl šių vėlavimų atsiranda apčiuopiamų išlaidų: prarasti pardavimai, sumažėjęs darbuotojų efektyvumas ir galima žala jūsų prekės ženklo reputacijai dėl reagavimo. Kiekviena delsos sekundė turi piniginę vertę.

Ar tai ne tik aparatinės įrangos problema? Ar negaliu tiesiog nusipirkti greitesnių SSD?

Nors greitesni SSD padeda, jie yra brangus ir dažnai neišsamus sprendimas. Pagrindinė priežastis dažniausiai yra neefektyvi programinė įranga, kuri atlieka daug mažų, išsklaidytų duomenų bazės užklausų. Programos kodo ir duomenų bazės užklausų optimizavimas, siekiant sumažinti atsitiktinius I/O, yra daug efektyvesnis. Tokie sprendimai, kaip Mewayz, kuriame yra 207 iš anksto sukurti moduliai, kurių kaina prasideda nuo 19 USD per mėnesį, yra skirti efektyviai supaprastinti duomenų prieigos modelius.

Koks pirmas žingsnis norint nustatyti, ar atsitiktinis įvestis/išvestis yra mano kliūtis?

Pradėkite nuo programos našumo stebėjimo įrankių. Ieškokite duomenų bazės metrikos, rodančios didelį skaitymo / rašymo operacijų per sekundę (IOPS) skaičių ir lėtą užklausos laiką. Profiliuokite savo programą, kad nustatytumėte dažnas mažas užklausas. Jei vienas naudotojo veiksmas suaktyvina daugybę atskirų duomenų bazės iškvietimų, o ne kelis efektyvius, greičiausiai radote atsitiktinę įvesties / išvesties problemą, kurią reikia išspręsti.

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