Zamislite da pri svakom vašem posjetu web-stranica mora ispočetka obraditi sve podatke kako bi učitala slike, prikazala stranice ili dohvatila informacije. To ne samo da produljuje vrijeme odziva nego i dodatno opterećuje poslužitelj i resurse sustava. Upravo tu na scenu stupa predmemoriranje (caching). Pohranjivanjem često korištenih podataka u bržu memoriju predmemoriranje može skratiti vrijeme pristupa podacima i poboljšati performanse sustava. No kako predmemoriranje funkcionira, koje vrste postoje i koji se izazovi mogu pojaviti pri njegovoj upotrebi?
Što je predmemoriranje?
Predmemoriranje je postupak pohranjivanja često korištenih podataka u posebnu memoriju. Pretpostavimo da svakih nekoliko minuta trebate pristupiti određenoj aplikaciji ili podatku. Budući da se tom podatku često pristupa, on se pohranjuje na mjesto koje se naziva predmemorija (cache) kako ga ne biste morali dohvaćati pri svakoj upotrebi. Postoji mnogo razloga za predmemoriranje, ali jedan od najvažnijih je skraćivanje vremena pristupa podacima.
Tvrdi diskovi su spori, a ni najbrži od njih ne mogu dostići brzinu RAM-a i procesora. Zbog toga dohvaćanje podataka s njih traje. Predmemorija je, međutim, drukčija jer je riječ o vrsti iznimno brze memorije. Ta memorija ima ograničen kapacitet i u njoj se mogu pohraniti samo podaci kojima se često pristupa.
Vrste predmemoriranja
U ovom ćemo odjeljku pregledati različite vrste predmemoriranja i njihovu primjenu.
Predmemoriranje na strani klijenta
Kod ove metode podaci se pohranjuju na strani klijenta, obično u web-pregledniku. Preglednik može u svojoj predmemoriji pohraniti kopije web-stranica i resursa poput slika kako bi ih pri sljedećim posjetima mogao prikazati bez ponovnog dohvaćanja s poslužitelja. Primjerice, provjerom vremena posljednje izmjene stranice preglednik može utvrditi je li predmemorirana inačica još uvijek valjana.Predmemoriranje na strani poslužitelja
Kod ove metode podaci se pohranjuju na strani poslužitelja kako bi se na zahtjeve odgovaralo brže te kako bi se smanjilo opterećenje poslužitelja i mreže. Jedan od primjera je upotreba proxy poslužitelja za predmemoriranje, koji može pohraniti traženi sadržaj i po potrebi isti sadržaj isporučiti drugim korisnicima. DynaCache u IBM WebSphere Application Serveru još je jedan primjer mehanizma predmemoriranja na strani poslužitelja.Predmemoriranje cijele stranice
Kod ove metode pohranjuje se kopija cijele generirane web-stranice kako bi se pri sljedećim zahtjevima stranica mogla isporučiti bez ponovnog izvršavanja svih procesa generiranja sadržaja. Ipak, ova je metoda prikladna samo ako se sadržaj stranice može predmemorirati i ako se njegovim promjenama pravilno upravlja.Predmemoriranje fragmenata
Kod ove metode pojedini dijelovi stranice predmemoriraju se zasebno umjesto pohranjivanja cijele stranice. Takav je pristup koristan kada stranica sadrži i statički i dinamički sadržaj. Predmemoriranjem dijelova koji se mogu pohraniti moguće je poboljšati performanse stranice bez potrebe za predmemoriranjem cijele stranice kao jedne cjeline.Predmemoriranje statičkog sadržaja
Ova se metoda koristi za pohranjivanje sadržaja koji se rijetko mijenja, poput grafičkih slika i tekstualnih datoteka. Budući da takav sadržaj obično ne zahtijeva česta ažuriranja, pohranjivanje njegove kopije u predmemoriju može smanjiti broj zahtjeva prema izvornom poslužitelju i skratiti vrijeme učitavanja stranica.Predmemoriranje dinamičkog sadržaja
Kod ove metode predmemorira se sadržaj koji se može često mijenjati ili se generira na temelju podataka i uvjeta vezanih uz korisnika. Budući da dinamički sadržaj može biti personaliziran, posebno je važno upravljati valjanošću predmemorije i odrediti kada je treba ažurirati. DynaCache u IBM WebSphere Application Serveru primjer je rješenja za predmemoriranje dinamičkog sadržaja.
Zašto biste trebali koristiti predmemoriranje?
Kao što je već spomenuto, jedan od razloga za predmemoriranje je brži pristup često korištenim podacima. Osim toga, predmemoriranje smanjuje opterećenje poslužitelja pri obradi. No zašto?
Kada sustavu često treba određeni podatak koji mora dohvaćati iz pohrane, to ne samo da traje dulje nego zahtijeva i dodatnu obradu od strane CPU-a i drugih resursa sustava. Međutim, ako je taj podatak dostupan u predmemoriji, sustav mu može pristupiti i dohvatiti ga bez ponovnog pristupanja pohrani.
Predmemoriranje donosi i druge prednosti, koje je lakše razumjeti na primjeru. Pretpostavimo da imate 10 GB podataka koje treba pohraniti. Budući da je procesor znatno brži od sustava za pohranu, sustav za pohranu možda neće moći spremati te podatke istom brzinom. Upravo tu na scenu stupa predmemoriranje. Procesor šalje podatke u predmemoriju, a ona ih zatim prikladnom brzinom prosljeđuje sustavu za pohranu. Tako procesor može nastaviti s radom bez nepotrebnih zastoja, a podaci se pritom ispravno pohranjuju.
Kako hosting utječe na performanse web-stranice?
Predmemoriranje može znatno poboljšati performanse web-stranice, ali nije jedini čimbenik koji određuje koliko se brzo stranica učitava. Važnu ulogu ima i infrastruktura hostinga. Resursi poslužitelja poput CPU-a, RAM-a, brzine pohrane i mrežnih performansi mogu utjecati na to koliko se brzo obrađuju zahtjevi, osobito kada web-stranica ima velik promet.
Čak i uz učinkovitu strategiju predmemoriranja performanse web-stranice mogu ostati slabe ako hosting okruženje ne može učinkovito podnijeti njezino opterećenje. Odabir hosting usluge s dovoljno resursa i pouzdanim performansama može pomoći u skraćivanju vremena odziva poslužitelja i poboljšanju korisničkog iskustva. Stoga, ako želite poboljšati brzinu i performanse svoje web-stranice, istraživanje paketa web hostinga koji odgovaraju potrebama vaše stranice može biti učinkovit korak uz primjenu tehnika optimizacije.
Kako funkcionira predmemoriranje?
Predmemoriranje postoji u različitim oblicima i predstavlja vrstu pohrane. Kada se zatraže podaci, najprije se provjerava predmemorija, a tek onda se podaci dohvaćaju s tvrdog diska. Međutim, budući da predmemorija ima ograničen kapacitet, u nju se ne mogu pohraniti svi podaci sustava. Zato sustav mora odrediti koje će podatke pohraniti u predmemoriju.
S druge strane, kada je predmemorija puna, a potrebno je dodati nove podatke kojima se često pristupa, sustav mora odlučiti koje postojeće podatke ukloniti. Za tu svrhu postoje različiti algoritmi koji procjenjuju koji će se podaci najvjerojatnije najmanje ponovno koristiti.
Što je promašaj predmemorije (cache miss)?
Kada aplikacija traži različite vrste podataka, zahtjevi se šalju predmemoriji. Ako traženi podaci nisu dostupni u predmemoriji, broj promašaja predmemorije raste. To znači da je sustav više puta pristupio predmemoriji, ali budući da potrebni podaci nisu bili dostupni, morao ih je dohvatiti iz pohrane.
To smanjuje performanse sustava. Kako bi se taj problem riješio, može se povećati kapacitet predmemorije.
Što je RAID kontroler?
RAID kontroler je hardverska komponenta u poslužiteljima posebno osmišljena za poboljšanje performansi predmemoriranja i pohrane. Uz pomoć flash memorije njegova predmemorija pruža dodatni kapacitet pohrane i znatno poboljšava performanse poslužitelja.
Izazovi predmemoriranja
- Lokalna predmemorija: pohranjivanje različitih inačica istih podataka na više sustava može dovesti do nedosljednosti podataka i smanjiti učinkovitost predmemoriranja.
- Problem koherentnosti predmemorije: kada se podaci promijene u jednoj predmemoriji, izazov je održati odgovarajuće kopije tih podataka usklađenima u ostalim predmemorijama.
- Proboj predmemorije (cache penetration): javlja se kada traženi podaci ne postoje ni u predmemoriji ni u izvornoj bazi podataka. Upotreba Bloomova filtra može pomoći u ublažavanju tog problema.
- Lavina predmemorije (cache avalanche): kvar predmemorije ili istodobno istjecanje velikog broja predmemoriranih stavki može prema bazi podataka uputiti golemu količinu zahtjeva i potencijalno izazvati prekide u radu. Upotreba klastera predmemorije i alata poput Hystrixa može pomoći u ublažavanju tog problema.
Zaključak
Predmemoriranje je učinkovit način za poboljšanje performansi sustava, skraćivanje vremena pristupa podacima i smanjenje opterećenja poslužitelja pri obradi. Ovisno o zahtjevima sustava, mogu se koristiti različite metode predmemoriranja za pohranjivanje često korištenih podataka i njihovu bržu isporuku. Ipak, odabir prave strategije predmemoriranja i pravilno upravljanje predmemoriranim podacima ključni su za održavanje performansi i sprječavanje problema poput promašaja predmemorije, problema koherentnosti predmemorije i lavine predmemorije. Razumijevanje načina rada predmemoriranja, njegovih vrsta i mogućih izazova pomaže vam da donosite bolje odluke pri projektiranju i optimizaciji sustava.
Česta pitanja
1. Kako funkcioniraju algoritmi za izbacivanje podataka iz predmemorije?
Algoritmi za izbacivanje podataka iz predmemorije određuju koje podatke treba ukloniti kada predmemorija dosegne svoj kapacitet. Algoritmi poput LRU (Least Recently Used) i LFU (Least Frequently Used) odabiru podatke na temelju toga koliko im se nedavno ili koliko često pristupalo.
Upotreba obiju metoda poboljšava sigurnost dediciranog poslužitelja i dostupnost usluge.
2. Što je koherentnost predmemorije i zašto je važna?
Koherentnost predmemorije osigurava da više predmemoriranih kopija istih podataka ostane međusobno usklađeno kada dođe do promjena. Posebno je važna u distribuiranim sustavima i višeprocesorskim okruženjima u kojima više predmemorija može sadržavati kopije istih podataka.


