Programování

Použijte Memcached pro podnikový výkon Java, část 1: Architektura a nastavení

Distribuovaná architektura Memcached vyvinutá společností Danga Interactive za účelem zlepšení výkonu stránek na LiveJournal.com dnes podporuje exponenciální škálovatelnost sociálních webových aplikací, jako je Twitter, Facebook a Wikipedia. V tomto dvoudílném výukovém programu Sunil Patil představuje distribuovanou hashtable architekturu Memcached a seznámí vás s jejím použitím k ukládání dat do mezipaměti pro vaše vlastní podnikové aplikace Java založené na databázi.

Tento kurz vás seznámí s používáním Memcached ke zlepšení výkonu podnikových aplikací Java. První polovina začíná přehledem tradičních architektur ukládání do mezipaměti Java ve srovnání s architekturou Memcached. Na váš stroj také nainstalujeme Memcached a představím vám nastavení a příkazy pro práci s Memcached přes Telnet. Ve druhé polovině vytvoříme v Javě klientský program „Hello Memcached“, kterým se podíváme pod kapotu spymemcached klienta. Dozvíte se také o používání Memcached ke snížení zátěže vašeho databázového serveru a jeho použití k ukládání do mezipaměti dynamicky generovaných značek stránek. Nakonec zvážíme několik pokročilých možností pro konfiguraci spymemcached klientů.

Další informace o ukládání do mezipaměti Java na serveru JavaWorld

  • Viz „Architektury vyrovnávání zatížení serveru, část 1: Vyrovnávání zatížení na úrovni přenosu“, kde najdete podrobnější diskuzi o distribuovaném ukládání do mezipaměti pomocí Memcached.
  • Další informace o tradičním ukládání do mezipaměti Java najdete také v části „Projekty Java s otevřeným zdrojovým kódem: Java Caching System“.

Přehled architektur ukládání do mezipaměti Memcached a Java

Rámečky Java Cache jako EHCache a OSCache jsou v podstatě HashMap objekty v kódu aplikace. Kdykoli do mezipaměti přidáte nový objekt, uloží se do paměti vaší aplikace. Tato strategie funguje dobře pro ukládání malého množství dat, ale nefunguje pro ukládání do mezipaměti více než několik gigabajtů (GB). Návrháři serveru Memcached zaujali distribuovaný architektonický přístup, který umožňuje škálovatelnost systému. Ve výsledku můžete Memcached použít k ukládání velkého množství dat do mezipaměti.

Architektura Memcached se skládá ze dvou částí. První je Memcached server, který běží ve svém vlastním procesu. Pokud chcete škálovat svou aplikaci, můžete nainstalovat a spustit server Memcached na dalších počítačích. Instance serveru Memcached se navzájem nevědí. Klient Memcached, druhá část systému Memcached, dělá vědět o každém ze serverů. Klient je zodpovědný za vyzvednutí serveru pro každou položku mezipaměti a buď uložení nebo získání položky mezipaměti - proces, který podrobně probereme dále v článku.

Máte-li nějaké zkušenosti s prací na webových aplikacích Java EE, je pravděpodobné, že jste dříve používali otevřený rámec pro ukládání do mezipaměti Java, jako je EHCache nebo OSCache. Možná jste také použili komerční rámec pro ukládání do mezipaměti, který byl dodán jako součást vašeho aplikačního serveru, například DynaCache (dodávaný s IBM WebSphere Application Server) nebo JBoss Cache (dodávaný s JBoss AS). Než se dostaneme do praktické části tohoto tutoriálu, je důležité pochopit, jak se Memcached liší od těchto tradičních rámců pro ukládání do mezipaměti Java.

Používání tradiční mezipaměti Java

Použití tradičního rámce Java pro ukládání do mezipaměti je docela snadné, bez ohledu na to, zda zvolíte open source nebo komerční možnost. Pro open source framework, jako je EHCache nebo OSCache, byste si museli stáhnout binární soubory a přidat potřebné soubory JAR do cesty ke třídě vaší aplikace. Možná budete muset vytvořit konfigurační soubor, který byste použili ke konfiguraci velikosti mezipaměti, vyložení disku atd. U rámce pro ukládání do mezipaměti, který byl dodán s aplikačním serverem, byste obvykle nemuseli stahovat žádné další soubory JAR, protože by byly dodávány se softwarem.

Po přidání podpory pro rámec ukládání do mezipaměti ve vaší aplikaci byste jej mohli začít používat vytvořením CacheManager objekt a získávání a nastavování položek mezipaměti v něm. Pod kapotou by mezipaměťový rámec vytvořil CacheManager objekty ve stejném prostředí JVM, kde byla spuštěna vaše aplikace. Pokaždé, když přidáte položku mezipaměti, bude tento objekt také přidán do nějakého typu hashtable udržovaného mezipamětí.

Pokud váš aplikační server běžel na více uzlech, možná budete chtít také podporu pro distribuované ukládání do mezipaměti. Když v systému distribuované mezipaměti přidáte objekt do mezipaměti na AppServer1, je tento objekt k dispozici také na AppServer2 a AppServer3. Používají se tradiční Java cache replikace pro distribuované ukládání do mezipaměti, což znamená, že když přidáte položku mezipaměti na AppServer1, automaticky se replikuje na další servery aplikací ve vašem systému. Výsledkem bude, že položka bude k dispozici ve všech vašich uzlech.

Používání Memcached

Abyste mohli Memcached používat pro ukládání do mezipaměti, musíte si nejprve stáhnout a nainstalovat server Memcached pro vámi zvolenou platformu. Jakmile nainstalujete server Memcached, bude naslouchat na portu TCP nebo UDP pro ukládání hovorů do mezipaměti.

Dále si stáhnete klienta Java pro Memcached a přidáte klientské JAR do své aplikace. Poté můžete vytvořit objekt klienta Memcached a začít volat jeho metodu pro získání a nastavení položek mezipaměti. Když přidáte objekt do mezipaměti, klient Memcached tento objekt převezme, serializuje a odešle bajtové pole na server Memcached pro uložení. V tomto okamžiku může být objekt v mezipaměti uvolněn z JVM, kde je spuštěna vaše aplikace.

Pokud potřebujete tento objekt v mezipaměti, můžete zavolat klienta Memcached dostat() metoda. Klient si vezme dostat požádat, serializovat a odeslat na server Memcached. Memcached server použije požadavek k vyhledání objektu z mezipaměti. Jakmile má objekt, vrátí bajtové pole zpět klientovi Memcached. Objekt klienta Memcached poté vezme bajtové pole a deserializuje jej, aby vytvořil objekt a vrátil jej do vaší aplikace.

I když je vaše aplikace spuštěna na více než jednom aplikačním serveru, všechny mohou ukazovat na stejný server Memcached a používat jej k získávání a nastavování položek mezipaměti. Pokud máte více než jeden server Memcached, servery o sobě nebudou vědět. Místo toho nakonfigurujete svého klienta Memcached tak, aby znal všechny dostupné servery Memcached. Například pokud vaše aplikace vytvoří objekt Java na AppServer1 a zavolá soubor() Metoda Memcached, pak klient Memcached zjistí, na který server Memcached tato položka přejde. Poté začne komunikovat pouze s tímto serverem Memcached. Podobně, když se váš kód v AppServer2 nebo AppServer3 pokusí dostat záznam, klient Memcached nejprve zjistí, na kterém serveru je tento záznam uložen, a poté komunikuje pouze s tímto serverem.

Memcached logika klienta

Ve své výchozí konfiguraci používá klient Memcached velmi jednoduchou logiku k výběru serveru pro operaci získání nebo nastavení. Když uděláte dostat() nebo soubor() volání, klient vezme klíč mezipaměti a zavolá jeho hashCode () metoda pro získání celého čísla, jako je 11. Potom toto číslo vezme a vydělí ho počtem dostupných serverů Memcached, řekněme dvěma. Poté převezme hodnotu zbytku, která je v tomto případě 1. Položka mezipaměti přejde na Memcached server 1. Tento jednoduchý algoritmus zajišťuje, že klient Memcached na každém z vašich aplikačních serverů vždy zvolí stejný server pro daný klíč mezipaměti.

Instalace Memcached

Memcached běží na Unixu, Linuxu, Windows a MacOSX. Můžete si buď stáhnout zdroj Memcached a zkompilovat ho, nebo si můžete stáhnout binární soubory zkompilované někým jiným a použít je k instalaci Memcached. Zde projdu procesem stahování binárních souborů pro platformu podle vašeho výběru; viz Zdroje, pokud dáváte přednost kompilaci ze zdroje.

Následující pokyny k instalaci jsou určeny pro 32bitový počítač se systémem Windows XP. Pokyny k instalaci pro jiné platformy, jako je Linux, najdete v článku Zdroje. Všimněte si také, že ukázkový kód pro tento článek byl vyvinut na 32bitovém počítači se systémem Windows XP, i když by měl fungovat na jakékoli jiné platformě.

  1. Kód Jellycan má upravenou verzi Memcached, se kterou je snadné a efektivní pracovat. Začněte zde stažením binárního souboru ZIP win32
  2. Rozšířit Memcached--win32-bin.zip na pevném disku. Všimněte si, že vše, co obsahuje, je memcached.exe. Spuštěním tohoto souboru spustíte server Memcached.
  3. Nyní proveďte memcached.exe -d instalace zaregistrovat memcached.exe jako službu. Ke spuštění a zastavení serveru Memcached budete moci použít konzolu Services.

CL start / stop

Zkuste spustit a zastavit server Memcached z příkazového řádku místo z panelu služeb. Tímto způsobem získáte větší flexibilitu, abyste mohli vyzkoušet různé možnosti příkazového řádku a zjistit nejlepší možnou konfiguraci podle vašich požadavků.

Když provedete memcached.exe bez jakýchkoli možností příkazového řádku se server Memcached standardně spustí na portu 11211 se 64 MB paměti. V některých případech možná budete chtít mít podrobnější kontrolu nad konfigurací. Řekněme například, že port 11211 používá nějaký jiný proces na vašem počítači a chcete, aby server Memcached používal port 12000; nebo pokud jste spouštěli server Memcached v QA nebo produkčním prostředí, chtěli byste mu dát více paměti než výchozí 64 MB. V těchto případech můžete použít možnosti příkazového řádku k přizpůsobení chování serveru. Provádění memcache.exe - pomoc příkaz přinese kompletní seznam možností příkazového řádku, jako jsou ty, které jsou zobrazeny na obrázku 3.

Spojte se s Memcached přes Telnet

Po spuštění serveru Memcached naslouchá na portu, ke kterému jste jej přiřadili. Klient Memcached se připojuje k serveru na portu TCP nebo UDP, odesílá příkazy a přijímá odpovědi a nakonec ukončí připojení. (Podrobnosti o protokolu, který klient používá ke komunikaci se serverem, najdete v části Zdroje.)

K serveru Memcached se můžete připojit různými způsoby. Pokud používáte klienta Java, jak to uděláme ve druhé polovině tohoto kurzu, budete mít přístup k jednoduchému rozhraní API pro ukládání a získávání objektů z mezipaměti. Alternativně můžete k přímému připojení k serveru použít klienta Telnet. Vědět, jak používat klienta Telnet ke komunikaci se serverem Memcached, je důležité pro ladění klienta Java, takže začneme tam.

Příkazy Telnetu

Nejprve budete muset použít klienta Telnet podle vašeho výběru pro připojení k serveru Memcached. Na počítači se systémem Windows XP můžete jednoduše spustit telnet localhost 11211 za předpokladu, že server Memcached běží na stejném počítači a naslouchá na výchozím portu 11211. Následující příkazy jsou nezbytné pro práci s Memcached přes Telnet:

  • soubor přidá do mezipaměti novou položku. Hovor je: Soubor . Můžete zadat skutečnou hodnotu, která by měla být uložena na dalším řádku. Pokud nechcete, aby platnost položky v mezipaměti vypršela, zadejte jako hodnotu 0.
  • dostat vrací hodnotu klíče mezipaměti. Použití dostat získat hodnotu keyName.
  • přidat přidá nový klíč, pouze pokud ještě neexistuje. Například: přidat
  • nahradit nahradí hodnotu pouze v případě, že klíč existuje. Například: nahradit
  • vymazat odstraní položku mezipaměti pro klíč. Hovor můžete použít vymazat vymazat hodnotu keyName.

Snímek obrazovky na obrázku 4 představuje ukázkovou interakci se serverem Memcached přes Telnet. Jak vidíte, server Memcached poskytuje zpětnou vazbu ke každému příkazu, například SKLADOVÁNO, NOT_STORED, a tak dále.

Závěr k části 1

Zatím jsme stručně diskutovali o rozdílech mezi distribuovanou architekturou Memcached a tradičnějšími systémy mezipaměti Java. Také jsme nastavili implementaci Memcached ve vašem vývojovém prostředí a procvičovali jste si připojení k Memcached přes Telnet. V další části tohoto kurzu použijeme klienta Java spymemcached k nastavení řešení distribuovaného ukládání do mezipaměti pro ukázkovou aplikaci Java. V tomto procesu se dozvíte mnohem více o Memcachedu a o tom, jak může zlepšit výkon vašich aplikací Java EE.

Sunil Patil je architekt Java EE pracující pro společnost Avnet Technology v San Francisku v Kalifornii. Je autorem knihy Portlety Java 101 (SourceBeat, duben 2007) a napsal řadu článků publikovaných společnostmi JavaWorld, IBM developerWorks a O'Reilly Media. Kromě toho, že je IBM Certified WebSphere Portal Server Application Developer a Administer, je také Sun Microsystems Certified Java Programmer, vývojář webových komponent a vývojář obchodních komponent. Sunilův blog si můžete prohlédnout na //www.webspherenotes.com.

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