V červenové záplavě novinek na platformě Azure (více např. zde) se poněkud ztrácí nová služba Azure Caching, která ovšem rozhodně stojí za pozornost, neboť přináší nové možnosti pro webové i jiné aplikace běžící v cloudu a to bez zvýšených nákladů. Nejprve si položme základní otázku:

K čemu je vlastně cache dobrá?

Jednoduše by se dalo říct – k odlehčení úzkého hrdla systému, což je typicky databáze anebo výkon procesoru. Existují dvě nejčastější použití mezipaměti cache:

  • Uložení výsledků, jejichž získání je nákladné – pokud se data v čase prakticky nemění, je neekonomické znovu zatěžovat databázi či procesor. Typickým příkladem jsou popisy produktů v e-shopu anebo vypočítané obrázkové bitmapy. Po prvním nákladném získání si je uložím pro další použití v mezipaměti.
  • Robustní uložení dočasných uživatelských dat – např. nákupní košík. Nemá smysl ho ukládat do databáze dokud nevím, zde se nákup uskuteční. Na druhou stranu ho chci mít uložený robustně, aby o něj uživatel nepřišel např. při údržbě serveru

Jakým způsobem se to řešilo doteď?

Pokud pomineme implementaci vlastního řešení anebo “ohýbání” některého z cache produktů pro běh v cloudu, bylo jediným řešením využít cloudovou službu Shared Caching (dříve Azure Appfabric Cache). Jedná se o Microsoftem provozovanou multitenantní cachovací službu (v podstatě cache-as-a-service. Toto řešení mělo několik nevýhod:

  • Poměrně vysoká cena – viz https://www.windowsazure.com/en-us/pricing/details/#caching
  • Omezení na počet připojení, transakce a přenos dat (jedná se o multitenantní aplikaci, tudíž je třeba vynutit ohleduplnost vůči ostatním uživatelům.
  • Omezené funkce oproti srovnatelné on premises službě (více zde), zejména chybějící redundance dat a vysoká dostupnost.

Co přináší nové řešení?

Zjednodušeně řečeno, odstraňuje všechny 3 přechozí nevýhody:

  • Nic nestojí, pokud cache hostujete přímo v existujících virtuálech. Jenom si “ukousne” z existujících zdrojů. Pokud např. máte 2 virtuály velikosti Small (1,75 GB RAM) a vytvoříte na nich cache za použití 30% paměti, budete mít cache velikosti 2 x 1,75 x 0,30, tedy 1,05 GB. Srovnatelná sdílená cache stojí 110 dolarů měíčně. Pokud použijete nový dedikovaný virtuál, má ho cache k dispozici celý a platíte podle zvolené velikosti. Pozor na jednu věc, pokud se rozhodnute pro redundatní uložení dat v cache paměti, je třeba velikost podělit celkovým počtem udržovaných replik (typicky 2).
  • Nejste omezeni žádnými limity. O cache se nemusíte s nikým dělit. Kolik jí dáte prostoru a dalších zdrojů, tak výkonná bude.
  • Plné funkce stejné jako v on-premises řešení – tedy vysoká dostupnost, redundance dat, notifikace atd.

Kde najdu více informací?

Připravil jsem zdokumentované použití pro 3 scénáře:

  1. Uložení Session stavu (např. nákupní košík)
  2. Využití pro OutputCache (např. uložení vyrenderovaných stránek produktů nebo obrázků)
  3. Využití ve vlastním kódu, typicky pro odlehčení databáze

Zdokumentované scénáře naleznete zde, zdrojový kód zde. Pokud se chcete dozvědět více, existuje hezký tutorial.

Michael