Programovanie

Pre výkonnosť podnikového prostredia Java použite Memcached, časť 1: Architektúra a nastavenie

Distribuovaná architektúra Memcached vyvinutá spoločnosťou Danga Interactive za účelom zlepšenia výkonu stránok na LiveJournal.com dnes podporuje exponenciálnu škálovateľnosť sociálnych webových aplikácií, ako sú Twitter, Facebook a Wikipedia. V tomto dvojdielnom výučbe predstavuje Sunil Patil distribuovanú architektúru hashtable Memcached a zoznámi vás s jej používaním na ukladanie údajov do cache pre vaše vlastné podnikové aplikácie Java založené na databáze.

Tento tutoriál vás oboznámi s používaním Memcached na zlepšenie výkonu podnikových aplikácií Java. Prvá polovica začína prehľadom tradičných architektúr Java Cache v porovnaní s architektúrou Memcached. Na vašom počítači tiež nainštalujeme Memcached a zoznámim vás s nastavením a príkazmi pre prácu s Memcached cez Telnet. V druhej polovici vyvinieme v Jave klientsky program „Hello Memcached“, pomocou ktorého sa pozrieme pod kapotu spymemcached klienta. Dozviete sa tiež o používaní Memcached na zníženie zaťaženia vášho databázového servera a jeho použití na ukladanie do pamäte dynamicky generovaného značenia stránky. Na záver zvážime niekoľko pokročilých možností konfigurácie klientov spymemcached.

Viac informácií o ukladaní do pamäte Java na serveri JavaWorld

  • Pozrite si „Architektúry vyrovnávania zaťaženia servera, časť 1: Vyrovnávanie zaťaženia na úrovni transportu“, kde nájdete podrobnejšiu diskusiu o distribuovanom ukladaní do vyrovnávacej pamäte pomocou Memcached.
  • Ďalšie informácie o tradičnom ukladaní do pamäte Java nájdete v časti „Projekty Java s otvoreným zdrojom: Java Caching System“.

Prehľad architektúr ukladania do medzipamäte Memcached a Java

Cache rámce Java ako EHCache a OSCache sú v podstate HashMap objekty v kóde aplikácie. Kedykoľvek pridáte nový objekt do medzipamäte, uloží sa do pamäte vašej aplikácie. Táto stratégia funguje dobre na ukladanie malého množstva údajov, ale nefunguje na ukladanie do medzipamäte viac ako niekoľko gigabajtov (GB). Návrhári servera Memcached zvolili distribuovaný architektonický prístup, ktorý umožňuje škálovateľnosť systému. Vďaka tomu môžete Memcached použiť na ukladanie veľkého množstva dát do medzipamäte.

Architektúra Memcachedu sa skladá z dvoch častí. Prvý je server Memcached, ktorý beží vo svojom vlastnom procese. Ak chcete rozšíriť svoju aplikáciu, môžete nainštalovať a spustiť server Memcached na ďalších počítačoch. Inštancie servera Memcached sa navzájom nepoznajú. Klient Memcached, druhá časť systému Memcached, robí vedieť o každom zo serverov. Klient je zodpovedný za vyzdvihnutie servera pre každú položku medzipamäte a buď jej uloženie, alebo jej získanie. Tento proces podrobne rozoberiem ďalej v článku.

Ak máte nejaké skúsenosti s prácou na webových aplikáciách Java EE, je pravdepodobné, že ste predtým používali otvorený rámec Java pre ukladanie do pamäte Java, ako napríklad EHCache alebo OSCache. Možno ste použili aj komerčný rámec ukladania do medzipamäte, ktorý sa dodáva ako súčasť vášho aplikačného servera, napríklad DynaCache (dodáva sa s IBM WebSphere Application Server) alebo JBoss Cache (dodáva sa s JBoss AS). Predtým, ako sa dostaneme do praktickej časti tohto tutoriálu, je dôležité pochopiť, v čom sa Memcached líši od týchto tradičných rámcov Java Cache.

Používanie tradičnej medzipamäte Java

Používanie tradičného rámca Java Cache je pomerne jednoduché bez ohľadu na to, či si vyberiete open source alebo komerčnú možnosť. Pre rámec otvoreného zdroja, ako je EHCache alebo OSCache, by ste si museli stiahnuť binárne súbory a pridať potrebné súbory JAR do cesty triedy svojej aplikácie. Možno bude tiež potrebné vytvoriť konfiguračný súbor, ktorý by ste použili na konfiguráciu veľkosti medzipamäte, vyloženia disku atď. Pre rámec ukladania do pamäte cache, ktorý bol dodaný s aplikačným serverom, by ste zvyčajne nemuseli sťahovať žiadne ďalšie súbory JAR, pretože by boli dodávané so softvérom.

Po pridaní podpory pre rámec ukladania do pamäte cache vo vašej aplikácii by ste ho mohli začať používať vytvorením CacheManager objekt a získanie a nastavenie položiek vyrovnávacej pamäte v ňom. Pod kapotou by rámec pre ukladanie do pamäte vytvoril CacheManager objekty v rovnakom prostredí JVM, kde bola spustená vaša aplikácia. Zakaždým, keď ste pridali položku vyrovnávacej pamäte, tento objekt by sa tiež pridal do nejakého typu hashtable udržiavaného rámcom ukladania do pamäte cache.

Ak váš aplikačný server bežal na viacerých uzloch, možno budete chcieť aj podporu pre distribuované ukladanie do pamäte cache. Keď v systéme distribuovanej pamäte cache pridáte objekt do pamäte cache na serveri AppServer1, je tento objekt k dispozícii aj na serveroch AppServer2 a AppServer3. Používajú sa tradičné Java kešky replikácia pre distribuované ukladanie do pamäte cache, čo znamená, že keď pridáte položku vyrovnávacej pamäte na AppServer1, automaticky sa replikuje na ďalšie servery aplikácií vo vašom systéme. Výsledkom bude, že záznam bude k dispozícii vo všetkých vašich uzloch.

Používanie Memcached

Aby ste mohli Memcached používať na ukladanie do pamäte cache, musíte si najskôr stiahnuť a nainštalovať server Memcached pre platformu podľa vášho výberu. Akonáhle nainštalujete server Memcached, bude počúvať na portoch TCP alebo UDP ukladanie hovorov do medzipamäte.

Ďalej si stiahnete klienta Java pre Memcached a do svojej aplikácie pridáte súbory JAR klienta. Potom môžete vytvoriť objekt klienta Memcached a začať volať jeho metódu na získanie a nastavenie položiek vyrovnávacej pamäte. Keď pridáte objekt do medzipamäte, klient Memcached tento objekt vezme, serializuje a odošle bajtové pole na server Memcached na uloženie. V tom okamihu môže byť objektom vo vyrovnávacej pamäti odpad zhromaždený z JVM, kde je spustená vaša aplikácia.

Ak potrebujete tento objekt vo vyrovnávacej pamäti, môžete zavolať klienta Memcached dostať () metóda. Klient si vezme dostať vyžiadať, serializovať a odoslať na server Memcached. Memcached server použije požiadavku na vyhľadanie objektu z medzipamäte. Len čo má objekt, vráti bajtové pole späť klientovi Memcached. Objekt klienta Memcached potom vezme bajtové pole a deserializuje ho, aby vytvoril objekt a vrátil ho do vašej aplikácie.

Aj keď je vaša aplikácia spustená na viac ako jednom aplikačnom serveri, všetky môžu smerovať na rovnaký server Memcached a používať ho na získanie a nastavenie položiek pamäte cache. Ak máte viac ako jeden server Memcached, servery o sebe nebudú vedieť. Namiesto toho nakonfigurujete svojho klienta Memcached tak, aby poznal všetky dostupné servery Memcached. Napríklad ak vaša aplikácia vytvorí objekt Java na AppServer1 a zavolá na sada () metódou Memcached, potom klient Memcached zistí, na ktorý server Memcached daný záznam ide. Potom začne komunikovať iba s daným serverom Memcached. Rovnako tak, keď sa to pokúša váš kód v AppServer2 alebo AppServer3 dostať záznam, klient Memcached najskôr zistí, na ktorom serveri je tento záznam uložený, a potom bude komunikovať iba s týmto serverom.

Prepojená logika klienta

Vo svojej predvolenej konfigurácii používa klient Memcached veľmi jednoduchú logiku na výber servera pre operáciu získania alebo nastavenia. Keď urobíte a dostať () alebo sada () hovor, klient vezme kľúč medzipamäte a zavolá jeho hashCode () metóda na získanie celého čísla ako napríklad 11. Potom vezme toto číslo a vydelí ho počtom dostupných serverov Memcached, napríklad dvoma. Potom vezme hodnotu zvyšku, ktorá je v tomto prípade 1. Položka vyrovnávacej pamäte prejde na server Memcached 1. Tento jednoduchý algoritmus zaisťuje, že klient Memcached na každom z vašich aplikačných serverov vždy vyberie pre daný kľúč pamäte cache ten istý server.

Inštalácia Memcached

Memcached beží na Unixe, Linuxe, Windows a MacOSX. Môžete si buď stiahnuť zdroj Memcached a skompilovať ho, alebo si môžete stiahnuť binárne súbory zostavené niekým iným a použiť ich na inštaláciu Memcached. Tu prejdem proces sťahovania binárnych súborov pre platformu podľa vášho výberu; Ak chcete kompilovať zo zdroja, pozrite si Zdroje.

Nasledujúce pokyny na inštaláciu sú určené pre 32-bitové zariadenie so systémom Windows XP. Pokyny na inštaláciu pre ďalšie platformy, ako je Linux, nájdete v Zdrojoch. Upozorňujeme tiež, že vzorový kód tohto článku bol vyvinutý na 32-bitovom počítači so systémom Windows XP, mal by však fungovať na akejkoľvek inej platforme.

  1. Kód Jellycan má upravenú verziu Memcached, s ktorou sa pracuje ľahko a efektívne. Začnite tu stiahnutím binárneho súboru ZIP win32
  2. Rozbaliť Memcached--win32-bin.zip na pevnom disku. Všimnite si, že všetko, čo obsahuje, je memcached.exe. Vykonaním tohto súboru spustíte server Memcached.
  3. Teraz vykonajte memcached.exe -d nainštalovať zaregistrovať memcached.exe ako službu. Na spustenie a zastavenie servera Memcached budete môcť použiť konzolu Služby.

CL štart / stop

Skúste server Memcached spustiť a zastaviť z príkazového riadku a nie z panela služieb. Týmto spôsobom získate väčšiu flexibilitu pri skúšaní rôznych možností príkazového riadku a zisťovaní najlepšej možnej konfigurácie pre vaše požiadavky.

Keď vykonáte memcached.exe bez akýchkoľvek možností príkazového riadku sa server Memcached štandardne spustí na porte 11211 so 64 MB pamäte. V niektorých prípadoch možno budete chcieť mať podrobnejšiu kontrolu nad konfiguráciou. Napríklad povedzme port 11211 používa iný proces na vašom počítači a chcete, aby server Memcached používal port 12000; alebo ak ste spúšťali server Memcached v QA alebo produkčnom prostredí, mali by ste mu dať viac pamäte ako predvolených 64 MB. V týchto prípadoch môžete na prispôsobenie správania servera použiť možnosti príkazového riadku. Vykonávanie memcache.exe -pomoc príkazom získate kompletný zoznam možností príkazového riadku, ako sú tie, ktoré sú zobrazené na obrázku 3.

Spojte sa s Memcached cez Telnet

Po spustení servera Memcached počúva na porte, ku ktorému ste ho priradili. Klient Memcached sa pripája k serveru na porte TCP alebo UDP, odosiela príkazy a prijíma odpovede a nakoniec ukončí pripojenie. (Podrobnosti o protokole, ktorý klient používa na komunikáciu so serverom, nájdete v časti Zdroje.)

K serveru Memcached sa môžete pripojiť rôznymi spôsobmi. Ak používate klienta Java, ako to urobíme v druhej polovici tohto tutoriálu, budete mať prístup k jednoduchému rozhraniu API na ukladanie a získavanie objektov z medzipamäte. Alternatívne môžete na priame pripojenie k serveru použiť klienta Telnet. Vedieť, ako používať klienta Telnet na komunikáciu so serverom Memcached, je dôležité pre ladenie klienta Java, takže začneme tým.

Príkazy Telnetu

Najskôr musíte na pripojenie k serveru Memcached použiť klienta Telnet podľa vášho výberu. Na počítači so systémom Windows XP môžete jednoducho vykonať telnet localhost 11211 za predpokladu, že server Memcached beží na rovnakom stroji a počúva na predvolenom porte 11211. Nasledujúce príkazy sú nevyhnutné pre prácu s Memcached cez Telnet:

  • nastaviť pridá novú položku do cache. Hovor je: Nastaviť . Môžete napísať skutočnú hodnotu, ktorá by sa mala uložiť na ďalší riadok. Ak nechcete, aby platnosť záznamu v pamäti vypršala, zadajte ako hodnotu 0.
  • dostať vráti hodnotu kľúča cache. Použite dostať získať hodnotu keyName.
  • pridať pridá nový kľúč, iba ak ešte neexistuje. Napríklad: pridať
  • vymeniť nahradí hodnotu, iba ak kľúč existuje. Napríklad: vymeniť
  • vymazať vymaže položku vyrovnávacej pamäte pre kľúč. Môžete použiť hovor vymazať vymazať hodnotu keyName.

Screenshot na obrázku 4 predstavuje ukážkovú interakciu so serverom Memcached cez Telnet. Ako vidíte, server Memcached poskytuje spätnú väzbu každému príkazu, ako napr SKLADOVANÉ, NOT_STORED, a tak ďalej.

Záver k časti 1

Doteraz sme stručne diskutovali o rozdieloch medzi distribuovanou architektúrou Memcached a tradičnejšími systémami medzipamäte Java. Vo vašom vývojovom prostredí sme tiež nastavili implementáciu Memcached a precvičili ste si pripojenie k Memcached cez Telnet. V ďalšej časti tohto tutoriálu použijeme klienta Java spymemcached na nastavenie riešenia distribuovaného ukladania do pamäte cache pre vzorovú aplikáciu Java. V tomto procese sa dozviete oveľa viac o Memcachedu a o tom, ako môže zlepšiť výkon vašich aplikácií Java EE.

Sunil Patil je architekt Java EE pracujúci pre spoločnosť Avnet Technology v San Franciscu v Kalifornii. Je autorom Portlety Java 101 (SourceBeat, apríl 2007) a napísal množstvo článkov publikovaných autormi JavaWorld, IBM developerWorks a O'Reilly Media. Okrem toho, že je IBM Certified WebSphere Portal Server Application Developer a Administer, je tiež Sun Microsystems Certified Java Programmer, vývojár webových komponentov a vývoj obchodných komponentov. Blog spoločnosti Sunil si môžete pozrieť na adrese //www.webspherenotes.com.

$config[zx-auto] not found$config[zx-overlay] not found