Hacker News

Trīs kešatmiņas slāņi starp atlasi un disku

Trīs kešatmiņas slāņi starp atlasi un disku Šī izpēte iedziļinās trīs, pārbaudot tās nozīmi un iespējamo ietekmi. Iekļautie pamatjēdzieni Šis saturs pēta: Pamatprincipi un teorijas Praktiski...

11 min read Via frn.sh

Mewayz Team

Editorial Team

Hacker News

Kad jūsu lietojumprogramma aktivizē priekšrakstu SELECT, šis vaicājums gandrīz nekad nepieskaras rotējošam diskam vai pat neapstrādātai zibatmiņai — tas iziet cauri trim atšķirīgiem kešatmiņas slāņiem, kas klusi nosaka, vai jūsu atbilde tiek saņemta mikrosekundēs vai milisekundēs. Izpratne par šiem slāņiem ir atšķirība starp biznesa platformu, kas viegli pielāgojas, un platformu, kas saspringst reālās slodzes apstākļos.

Kas notiek brīdī, kad SELECT vaicājums atstāj jūsu lietojumprogrammu?

Brīdī, kad jūsu lietojumprogramma nosūta SELECT vaicājumu, tā nonāk cauruļvadā, ko lielākā daļa izstrādātāju nekad nepārbauda. Datu bāzes dzinējs pārtver pieprasījumu pirms jebkādas ievades/izvades, parsējot SQL iekšējā izpildes plānā un nekavējoties pārbaudot savu pirmo aizsardzības līniju: vaicājuma rezultātu kešatmiņu. Ja nesen tika izpildīts identisks vaicājums ar identiskiem parametriem, programma var atgriezt kešatmiņā saglabāto rezultātu kopu, nepieskaroties nevienai datu lapai. To dažreiz sauc par vaicājumu kešatmiņu vai rezultātu kešatmiņu, un augstas lasīšanas un zemas rakstīšanas darba slodzēs, piemēram, analīzes informācijas paneļos un pārskatu moduļos, tas var pilnībā novērst lielāko daļu diska nolasīšanas gadījumu.

Šeit svarīgais ieskats ir tāds, ka vaicājumu kešatmiņa ir ļoti jutīga pret datu mutācijām. Jebkurš INSERT, UPDATE vai DELETE pamatā esošajai tabulai padara attiecīgos kešatmiņā saglabātos rezultātus par nederīgiem. Tāpēc transakciju sistēmas, kurās ir daudz rakstīšanas, bieži pilnībā atspējo vaicājumu kešatmiņu un paļaujas uz dziļākiem slāņiem.

Kas ir bufera baseins un kāpēc tas ir svarīgāks, nekā jūs domājat?

Otrais kešatmiņas slānis — un, iespējams, vissvarīgākais ražošanas sistēmās — ir bufera pūls (ko sauc par koplietoto buferi programmā PostgreSQL, InnoDB bufera pūlu MySQL). Šis ir RAM reģions, ko datu bāzes programma izmanto, lai saglabātu nesen piekļūtas datu lapas. Ja vaicājumu nevar apkalpot no rezultātu kešatmiņas, programma pirms diska lasīšanas pārbauda, vai vajadzīgās datu lapas jau atrodas bufera pūlā.

Bufera pūls darbojas pēc laika un telpiskās atrašanās vietas principa: nesen piekļūtiem datiem, visticamāk, tiks piekļūts atkārtoti, un datiem, kas glabājas tuvu piekļūtajiem datiem, visticamāk, drīz tiks piekļūts. Datu bāzes administratori pielāgo bufera pūla lielumu kā vienu no pieņemtajiem lēmumiem ar lielāko sviras konfigurāciju. Pārāk mazs bufera kopums izraisa pastāvīgu lapu izlikšanu, radot parādību, ko sauc par traušanu, kurā sistēma pavada vairāk laika, pārvaldot kešatmiņas trūkumus, nevis izpildot vaicājumus.

Galvenais ieskats: lielākajā daļā OLTP darba slodžu liela izmēra bufera pūls nozīmē, ka 95–99% no visiem nolasītajiem datiem tiek apkalpoti no RAM. Darba kopa — jūsu datu apakškopa, kurai vaicājumi faktiski pieskaras bieži, — bieži vien ir daudz mazāka par kopējo datu bāzes lielumu. Bufera kopas lieluma noteikšana, lai tā atbilstu jūsu darba kopai, nevis visai datu kopai, ir vienīgā vislabākā iestatīšanas darbība, ko varat veikt.

Kā operētājsistēmas kešatmiņa aizpilda plaisu starp RAM un disku?

Pat tad, ja pašas datubāzes bufera pūls netiek izmantots, vaicājums vēl nav paredzēts patiesai diska nolasīšanai. Operētājsistēma uztur lapas kešatmiņu (sauktu arī par failu sistēmas kešatmiņu), kodola pārvaldītas RAM reģionu, kas buferē lasīšanas un rakstīšanas, lai bloķētu ierīces. Kad datu bāzes programma pieprasa lapu, kuras bufera pūlā nav, OS kodols pārbauda pats savas lapas kešatmiņu pirms fiziskas I/O komandas izdošanas krātuves kontrollerim.

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

Šis trešais slānis lielākoties nav redzams lietojumprogrammu izstrādātājiem, taču tas ir ļoti svarīgs sistēmās, kurās datu bāzes bufera pūls ir nepietiekami nodrošināts. OS lapas kešatmiņa tiek koplietota visos procesos, tāpēc tā konkurē ar jūsu lietojumprogrammu serveri, tīmekļa serveri un jebkuru citu programmatūru, kas darbojas tajā pašā resursdatorā. Īpašos datu bāzes serveros šī konkurence ir minimāla, un OS kešatmiņa nodrošina nozīmīgu otrās iespējas buferi. Koplietotajos saimniekdatoros vai konteineros ar ierobežotiem atmiņas ierobežojumiem OS kešatmiņa bieži ir pārāk maza, lai palīdzētu.

Kurš kešatmiņas slānis ir atbildīgs par lielāko veiktspējas ieguvumu praksē?

Reālās ražošanas sistēmās bufera pūls ievērojami dominē veiktspējas rezultātos. Lūk, kāpēc katrs slānis dažādos lietošanas gadījumos ir atšķirīgs:

  • Vaicājuma rezultātu kešatmiņa: vislielākais ieguvums no lasāmām, galvenokārt statiskām datu kopām — pārskatu vaicājumi, kešatmiņā saglabātie informācijas paneļi, publiskā satura galapunkti. Bezjēdzīgi uz galdiem, kuros ir daudz rakstāmības.
  • Datu bāzes bufera pūls: universāls darba zirgs. Šeit vispirms ir jānoregulē katrs ražošanas datu bāzes serveris. Efektīvi apstrādā gan nejaušās, gan secīgās piekļuves modeļus.
  • OS lapas kešatmiņa: nodrošina drošības tīklu, ja bufera kopa ir maza izmēra. Lieliski palīdz arī lielu tabulu secīgās skenēšanas laikā, kas pretējā gadījumā izstumtu karstās lapas no bufera kopas.
  • Uzglabāšanas kontrollera kešatmiņa (aparatūras slānis): ceturtais, bieži aizmirstais slānis — NVMe SSD un RAID kontrolleri uztur iebūvētu rakstīšanas kešatmiņu ar akumulatora vai kondensatora dublējumu. Tas aizsargā izturību, nezaudējot rakstīšanas caurlaidspēju uz fsync latentuma rēķina.
  • Lietojumprogrammu slāņa kešatmiņa (Redis, Memcached): pilnībā atrodas virs datu bāzes, kešatmiņā saglabājot sērijveida vaicājumu rezultātus vai aprēķinātos objektus, lai izvairītos no datubāzes nokļūšanas vispār — ideāli piemērota vairāku nomnieku SaaS platformām, kas apkalpo tūkstošiem vienlaicīgu lietotāju.

Kā modernās biznesa platformas var izmantot kešatmiņas arhitektūru, lai nodrošinātu uzticamību mērogā?

Uzņēmumiem, kas darbojas daudzos funkcionālajos moduļos — CRM, projektu vadība, e-komercija, analītika — kešatmiņas arhitektūra tieši nosaka platformas atsaucību, komandām augot. Platformas, kas veidotas, pamatojoties uz daudzslāņu kešatmiņas stratēģiju, var apkalpot desmitiem tūkstošu vienlaicīgu lietotāju bez proporcionālām infrastruktūras izmaksām. Galvenais ir izveidot datu piekļuves modeļus, kas ievēro kešatmiņas robežas: saglabājot mazus datus un piekļuves modeļus paredzamus, izmantojot lasīšanas replikas, lai sadalītu bufera pūla slodzi, un lietojumprogrammas slāņa kešatmiņas, piemēram, Redis, novietošanu datu bāzes priekšā galapunktiem, kas apkalpo identiskus datus vairākiem lietotājiem vienlaikus.

Mewayz ir veidots, ņemot vērā tieši šo filozofiju. Ar 207 integrētiem biznesa moduļiem, kas nodrošina vairāk nekā 138 000 lietotāju, platformas datu slānis ir veidots tā, lai lielākā daļa nolasījumu tiktu apkalpoti no kešatmiņas — tas nodrošina ātru reakcijas laiku un paredzamas infrastruktūras izmaksas neatkarīgi no tā, vai izmantojat 19 $/mēnesī sākuma plānu vai 49 $/mēnesī profesionālo līmeni.

Bieži uzdotie jautājumi

Vai vaicājumu kešatmiņas atspējošana vienmēr uzlabo datu bāzes veiktspēju?

Ne vienmēr, bet lielas rakstīšanas slodzes gadījumā tas parasti notiek. Vaicājuma kešatmiņai ir nepieciešams globāls mutex, lai saglabātu konsekvenci, kas kļūst par vājo vietu augstas vienlaicības gadījumā. Šī iemesla dēļ MySQL 8.0 pilnībā noņēma vaicājuma kešatmiņu. PostgreSQL nekad neieviesa iebūvētu vaicājumu kešatmiņu, tā vietā paļaujoties uz bufera pūlu un lietojumprogrammu slāņa kešatmiņu. Ja jūsu lasīšanas un rakstīšanas attiecība ir augsta un vaicājumi bieži atkārtojas, vaicājumu kešatmiņa var nodrošināt reālus ieguvumus — pretējā gadījumā ieguldiet šīs pielāgošanas pūles bufera pūlā.

Kā es varu zināt, vai mana bufera pūla izmērs ir pareizi?

Pārraugiet bufera pūla trāpījumu attiecību: no kopas apkalpoto lapu pieprasījumu procentuālā daļa salīdzinājumā ar tiem, kuriem nepieciešama diska lasīšana. Trāpījumu attiecība, kas ir mazāka par 95% OLTP darba slodzei, ir signāls, lai palielinātu kopas lielumu. Programmā MySQL vaicājiet SHOW ENGINE INNODB STATUS un skatiet bufera pūla trāpījumu līmeni. Programmā PostgreSQL skats pg_statio_user_tables parāda kaudzes blokus, kas tiek lasīti no diska, salīdzinot ar apkalpošanu no bufera pūla. Centieties visu savu darba komplektu, nevis visu datu kopu, saglabāt RAM.

Kāda ir saistība starp kešatmiņas slāņiem un vairāku nomnieku SaaS uzticamību?

Vairāku nomnieku SaaS kešatmiņas slāņi novērš "trokšņaina kaimiņa" problēmas, kad viena nomnieka liela vaicājumu slodze pasliktina visu pārējo nomnieku veiktspēju. Īrnieku informēta lietojumprogrammu kešatmiņa ar TTL balstītu nederīgumu saglabā katra nomnieka karstos datus pakalpojumā Redis, krasi samazinot bufera pūla spiedienu no lieliem kontiem. Datu bāzes līmeņa savienojumu apvienošana kopā ar siltu bufera kopu nodrošina, ka sērijveida darbības no jebkura viena konta neizdzēš koplietotās lapas no kešatmiņas un neizraisa latentuma kāpumus visā platformā.


Kešatmiņas slāņi nav datubāzes sīkumi — tie ir arhitektoniskais pamats, kas atdala platformas, kuru mērogs ir ātras, no tām, kurām nepieciešama pastāvīga infrastruktūras ugunsgrēku dzēšana. Ja veidojat vai vadāt uzņēmumu, kam nepieciešama platforma, kas jau ir optimizēta šīm realitātēm, izpētiet Mewayz vietnē app.mewayz.com — 207 moduļus, vienu saskaņotu platformu, kas izstrādāta tā, lai nodrošinātu uzticamu darbību no pirmā lietotāja līdz simttūkstošajai daļai.

Try Mewayz Free

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

Related Guide

HR Management Guide →

Manage your team effectively: employee profiles, leave management, payroll, and performance reviews.

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