Co je mezipaměť?

Když požadujete data z jakéhokoli zdroje, vždy dojde k určitému zpoždění. Ping na webové servery se měří v milisekundách, doba přístupu k úložišti může mít latence v mikrosekundách, zatímco latence RAM se měří v taktech CPU. Samozřejmě, že tyto druhy rychlostí by byly ještě před několika desítkami let nemyslitelné, ale v současnosti nejsou nikdy dost rychlé. Rychlost přístupu je pravidelně určitou formou úzkého hrdla ve výkonu. Jedním ze způsobů, jak to lze vyřešit, je ukládání do mezipaměti.

Ukládání do mezipaměti je proces ukládání dočasné kopie zdroje tak, aby k němu bylo možné přistupovat rychleji, než by mohlo být normálně. Existuje široká škála implementací jak v oblasti softwaru, tak hardwaru. Mezipaměti mohou fungovat jako vyrovnávací paměti pro čtení, zápisy nebo obojí.

Číst mezipaměti

V mezipaměti pro čtení jsou data, která byla dříve požadována, uložena v mezipaměti pro rychlejší přístup. V některých scénářích může být mezipaměť dokonce preventivně načtena daty, což umožňuje obsloužit první požadavek z mezipaměti spíše než pouze následné požadavky.

Mezipaměť pro čtení, kterou pravděpodobně znáte, je mezipaměť prohlížeče. Zde prohlížeč ukládá místní kopii požadovaných zdrojů. To znamená, že pokud a když je webová stránka znovu načtena nebo je načtena podobná stránka, která používá velkou část stejného obsahu, může být tento obsah obsluhován z mezipaměti, nikoli z webového serveru. Nejenže to znamená, že se webová stránka může načítat rychleji, ale také to snižuje zatížení webu a snižuje množství dat, která uživatel potřebuje ke stažení, což může být důležité při měření spojení.

Samotná RAM také funguje jako mezipaměť pro čtení dat na pevném disku. V tomto případě se data pro běžící program preventivně načtou do RAM, aby k nim CPU mělo rychlejší přístup. Data z RAM jsou pak dále ukládána do mezipaměti CPU, i když tento proces je mnohem složitější, protože mezipaměť CPU se měří v megabajtech, nikoli v gigabajtech.

Zapisujte mezipaměti

Zápisová mezipaměť je mezipaměť, která může absorbovat data zapisovaná do pomalejšího zařízení. Běžným příkladem toho může být SLC cache v moderních SSD. Tato mezipaměť neumožňuje rychlejší čtení dat, zápis je však mnohem rychlejší než zápis na TLC nebo QLC flash, který tvoří zbytek SSD. Mezipaměť SLC dokáže absorbovat operace vysokorychlostního zápisu a poté tato data co nejdříve přenese na flash disk TLC, který nabízí mnohem lepší hustotu úložiště, ale zápis je také mnohem pomalejší. Použití flash paměti tímto způsobem ji optimalizuje jak pro vysoké rychlosti zápisu, tak pro vysokou hustotu úložiště.

Hybridní cache

Existuje mnoho způsobů, jak zacházet s mezipamětmi, které jim umožňují fungovat jako mezipaměť pro čtení i zápis. Každá z těchto metod zpracovává operace zápisu odlišně a má výhody i nevýhody. Tři možnosti jsou zapsání, propsání a zpětný zápis. Zápisová mezipaměť při zápisu zcela vynechává mezipaměť, mezipaměť pro zápis zapisuje do mezipaměti, ale operaci považuje za dokončenou, až když je zapsána do úložiště. Mezipaměť pro zpětný zápis zapíše do mezipaměti a poté považuje operaci za dokončenou, přičemž se spoléhá na to, že ji mezipaměť v případě potřeby přenese do úložiště.

Zápis kolem může být užitečný, pokud očekáváte velký objem zápisů, protože minimalizuje ztrátu mezipaměti. Znamená to však, že operace, která poté čte jakékoli z těchto zapsaných dat, bude čelit alespoň jednomu vynechání mezipaměti poprvé. Zápis do mezipaměti okamžitě operace zápisu do mezipaměti, což znamená, že výsledek může být doručen z mezipaměti při prvním vyžádání. Aby byla operace zápisu považována za dokončenou, musí také zapsat data na disk, což zvyšuje latenci. Mezipaměť se zpětným zápisem má stejnou výhodu jako zápis, která umožňuje, aby byla zapsaná data okamžitě obsluhována z mezipaměti. Nevyžaduje však operace zápisu k zápisu na disk, aby byl považován za dokončený. To snižuje latenci zápisu, ale přichází s rizikem ztráty dat, pokud je mezipaměť nestálá a nedokončí zápis dat zpět do úložiště před ztrátou napájení.

Jak odstranit data z mezipaměti?

Jedním z limitujících faktorů každé cache je kapacita. Velká keš se hledá dlouho, což neguje značnou část výhody použití keše na prvním místě. Paměťové technologie používané pro ukládání do mezipaměti také bývají dražší než paměť, ze které se mezipaměť ukládá. Pokud by tomu tak nebylo, je pravděpodobné, že by tato paměťová vrstva změnila paměťové technologie ke zlepšení výkonu. Oba tyto faktory znamenají, že mezipaměti bývají relativně malé, zejména ve srovnání s úložným médiem, ze kterého se ukládají do mezipaměti. RAM má menší kapacitu než úložiště a mezipaměť CPU má menší kapacitu než RAM. SLC cache má menší kapacitu než TLC paměť.

To vše znamená, že je často nutné vyřadit data z mezipaměti, aby se uvolnilo místo pro nová data, která je třeba uložit do mezipaměti. K tomu existuje řada různých přístupů. „Nejméně často používané“ upřednostňuje vymazání položek mezipaměti, které mají nejnižší počet přístupů. To může být užitečné pro předpovídání, které položky budou mít nejmenší vliv na budoucí vynechání mezipaměti by také počítalo velmi nedávno přidané položky jako s nízkým počtem přístupů, což může vést k ukládání do mezipaměti máselnice.

„Nejméně nedávno použité“ upřednostňuje vymazání položek mezipaměti, které nebyly nějakou dobu používány. To předpokládá, že se v současné době nepoužívají, ale nebere v úvahu, zda byly před časem intenzivně využívány. „Nejnověji použité“ upřednostňuje vymazání naposledy použitých položek mezipaměti za předpokladu, že byly použity a nebudou muset být znovu použity. Nejlepším přístupem je obecně kombinace všech tří, na základě statistik využití.

Zastaralé informace a bezpečnostní rizika

Hlavním rizikem keší je, že informace, které obsahují, mohou zatuchnout. Záznam mezipaměti je považován za zastaralý, pokud byla aktualizována původní data a záznam v mezipaměti je zastaralý. Je důležité pravidelně ověřovat, že poskytovaná živá kopie se stále shoduje s kopií uloženou v mezipaměti.

Konkrétně na webových stránkách je také nesmírně důležité určit, která data lze a nelze ukládat do mezipaměti. Například je naprosto v pořádku, když se velký neměnný soubor JavaScript uloží do mezipaměti. To ušetří uživateli, že jej nemusí stahovat pokaždé, a dokonce může být přínosem pro ostatní uživatele obsluhované stejnou mezipamětí. Nemůžete však ukládat do mezipaměti data specifická pro relaci. Představte si, co by se stalo, kdybyste přešli do aplikace pro zasílání zpráv, když jste byli přihlášeni jako vy, jen abyste zjistili, že vám byla doručena verze zpráv jiného uživatele uložená v mezipaměti. Naštěstí webové servery mohou určit, které zdroje mohou a nemohou být ukládány do mezipaměti, a tyto problémy jsou obecně dobře známé, takže takových problémů je jen málo.

Závěr

Mezipaměť je část paměti, která může ukládat některá nedávno použitá data způsobem ukládání, ke kterému je rychlejší přístup, než by bylo opětovné dokončení normálního procesu přístupu k datům. Mezipaměť má obvykle omezenou kapacitu, což znamená, že jakmile je plná, potřebuje odstranit položky. Mezipaměti jsou obecně pro uživatele transparentní, což znamená, že latence je jediným ukazatelem toho, že výsledek byl doručen prostřednictvím mezipaměti.