Upotrijebite Memcached za izvedbu Java poduzeća, 1. dio: Arhitektura i postavljanje

Razvijena od strane Danga Interactive za poboljšanje performansi web mjesta na LiveJournal.com, distribuirana arhitektura Memcacheda danas podržava eksponencijalnu skalabilnost društvenih web aplikacija kao što su Twitter, Facebook i Wikipedia. U ovom dvodijelnom vodiču, Sunil Patil predstavlja Memcachedovu distribuiranu arhitekturu raspršivanja i započinje s korištenjem za predmemoriranje podataka za vaše vlastite Java korporacijske aplikacije vođene bazom podataka.

Ovaj vas vodič upoznaje s korištenjem Memcacheda za poboljšanje performansi Java korporativnih aplikacija. Prvo poluvrijeme započinje pregledom tradicionalnih Java arhitektura predmemoriranja u usporedbi s Memcachedovom arhitekturom. Također ćemo instalirati Memcached na vaš stroj, a ja ću vas upoznati s postavkama i naredbama za rad s Memcacheom putem Telneta. U drugoj polovici razvit ćemo klijentski program "Hello Memcached" na Javi, koji ćemo upotrijebiti za gledanje ispod haube spyemcached klijenta. Također ćete naučiti kako koristiti Memcached za smanjenje opterećenja na vašem poslužitelju baze podataka i kako ga koristiti za predmemoriranje dinamički generiranog označavanja stranica. Konačno, razmotrit ćemo neke napredne mogućnosti za konfiguriranje spymemched klijenata.

Više o Java predmemoriranju na JavaWorldu

  • Pogledajte "Arhitekture uravnoteženja opterećenja poslužitelja, 1. dio: Uravnoteženje opterećenja na transportnoj razini" za detaljniju raspravu o distribuiranom predmemoriranju s Memcachedom.
  • Također pogledajte "Javni projekti s otvorenim kodom: Java Caching System" da biste saznali više o tradicionalnom Java predmemoriranju.

Pregled Memcached i Java caching arhitektura

Okviri Java predmemoriranja poput EHCache i OSCache u osnovi su HashMapobjekti u kodu vaše aplikacije. Kad god dodate novi objekt u predmemoriju, on će se pohraniti u memoriju vaše aplikacije. Ova strategija dobro funkcionira za pohranu malih količina podataka, ali ne radi za predmemoriranje više od nekoliko gigabajta (GB). Dizajneri poslužitelja Memcached zauzeli su distribuirani arhitektonski pristup, koji omogućuje skalabilnost sustava. Kao rezultat toga, Memcached možete koristiti za predmemoriranje ogromne količine podataka.

Arhitektura Memcacheda sastoji se od dva dijela. Prvo je Memcached poslužitelj koji se pokreće u vlastitom procesu. Ako želite prilagoditi svoju aplikaciju, možete instalirati i pokrenuti memcached poslužitelj na dodatnim računalima. Primjeri memcached poslužitelja nisu međusobno svjesni. Memcached klijent, druga komad Memcached sustava, ne znam o svakom od poslužitelja. Klijent je odgovoran za preuzimanje poslužitelja za svaki unos predmemorije i spremanje ili dobivanje unosa predmemorije - postupak o kojem ću detaljno razgovarati kasnije u članku.

Ako imate iskustva s radom na web-aplikacijama Java EE, velika je vjerojatnost da ste prethodno koristili Java predmemoriranje otvorenog koda, kao što su EHCache ili OSCache. Možda ste koristili i komercijalni okvir predmemoriranja koji se isporučuje kao dio vašeg aplikacijskog poslužitelja, poput DynaCache (koji se isporučuje s IBM WebSphere Application Server) ili JBoss Cache (koji se isporučuje s JBoss AS). Prije nego što uđemo u dio ovog vodiča o praktičnom učenju, važno je razumjeti kako se Memcached razlikuje od ovih tradicionalnih okvira za Java predmemoriranje.

Korištenje tradicionalne Java predmemorije

Korištenje tradicionalnog okvira za predmemoriranje Java prilično je jednostavno, bez obzira na to jeste li odabrali open source ili komercijalnu opciju. Za okvir otvorenog koda kao što je EHCache ili OSCache, morat ćete preuzeti binarne datoteke i dodati potrebne JAR datoteke u put predavanja svoje aplikacije. Možda ćete također trebati stvoriti konfiguracijsku datoteku koju biste koristili za konfiguriranje veličine predmemorije, prebacivanja diska i tako dalje. Za okvir za predmemoriranje koji se isporučuje u paketu s aplikacijskim poslužiteljem, obično ne biste morali preuzimati dodatne JAR-ove jer bi bili u paketu sa softverom.

Nakon dodavanja podrške za okvir predmemoriranja u svojoj aplikaciji, mogli biste ga početi koristiti stvaranjem CacheManagerobjekta i dobivanjem i postavljanjem unosa predmemorije u njemu. Ispod napa, okvir za predmemoriranje stvorio bi CacheManagerobjekte u istom JVM-u u kojem se izvodila vaša aplikacija. Svaki put kad biste dodali unos predmemorije, taj bi se objekt također dodao nekoj vrsti hashtable-a koju održava okvir predmemoriranja.

Ako se vaš poslužitelj aplikacija izvodio na više čvorova, možda ćete također trebati podršku za distribuirano predmemoriranje. U sustavu distribuirane predmemorije, kada dodate objekt u predmemoriju na AppServer1, taj je objekt dostupan i na AppServer2 i AppServer3. Tradicionalne Java predmemorije koriste replikaciju za distribuirano predmemoriranje, što znači da se, kada dodate unos predmemorije na AppServer1, automatski replicira na druge poslužitelje aplikacija u vašem sustavu. Kao rezultat toga, unos će biti dostupan na svim vašim čvorovima.

Koristeći Memcached

Da biste koristili Memcached za predmemoriranje, prvo morate preuzeti i instalirati Memcached poslužitelj za platformu po vašem izboru. Jednom kada instalirate memcached poslužitelj, on će slušati na TCP ili UDP priključku za predmemoriranje poziva.

Zatim ćete preuzeti Java klijent za Memcached i dodati JAR-ove klijenta u svoju aplikaciju. Nakon toga možete stvoriti objekt klijenta Memcached i početi pozivati ​​njegovu metodu za dobivanje i postavljanje unosa u predmemoriju. Kada dodate objekt u predmemoriju, memcached klijent će taj objekt uzeti, serializirati i poslati niz bajtova na memcached poslužitelj na pohranu. Tada bi predmemorirani objekt mogao biti smeće prikupljeno iz JVM-a u kojem se vaša aplikacija izvodi.

Kada vam je potreban taj predmemorirani objekt, možete nazvati get()metodu klijenta Memcached . Klijent će uzeti getzahtjev, serializirati ga i poslati na memcached poslužitelj. Poslužitelj Memcached upotrijebit će zahtjev za traženje objekta iz predmemorije. Jednom kada ima objekt, vratit će bajtni niz natrag klijentu Memcached. Klijentski objekt Memcached tada će uzeti bajtni niz i deserializirati ga da stvori objekt i vrati ga u vašu aplikaciju.

Čak i ako se vaša aplikacija izvodi na više poslužitelja aplikacija, svi oni mogu ukazivati ​​na isti memcached poslužitelj i koristiti ga za dobivanje i postavljanje unosa u predmemoriju. Ako imate više od jednog poslužitelja Memcached, poslužitelji neće znati jedni o drugima. Umjesto toga, konfigurirat ćete memcached klijenta tako da zna sve dostupne memcached poslužitelje. Na primjer, ako vaša aplikacija kreira Java objekt na AppServer1 i pozove set()metodu Memcached, tada će klijent Memcached shvatiti na koji Memcached poslužitelj ide taj unos. Tada će započeti komunikaciju samo s tim Memcached poslužiteljem. Isto tako, kada vaš kôd u AppServer2 ili AppServer3 pokuša unijeti getunos, klijent Memcached prvo će shvatiti na kojem je poslužitelju taj unos pohranjen, a zatim komunicirati samo s tim poslužiteljem.

Memcached logika klijenta

U svojoj zadanoj konfiguraciji, klijent Memcached koristi vrlo jednostavnu logiku za odabir poslužitelja za operaciju dobivanja ili postavljanja. Kad uputite poziv get()ili ga set()pozovete, klijent uzima ključ predmemorije i poziva njegovu hashCode()metodu da dobije cijeli broj kao što je 11. Zatim uzima taj broj i dijeli ga s brojem dostupnih memcached poslužitelja, recimo dva. Tada uzima vrijednost ostatka, koja je u ovom slučaju 1. Unos predmemorije ići će na memcached poslužitelj 1. Ovaj jednostavni algoritam osigurava da memcached klijent na svakom od vaših aplikacijskih poslužitelja uvijek odabere isti poslužitelj za zadani ključ predmemorije.

Instaliranje Memcacheda

Memcached radi na Unixu, Linuxu, Windowsima i MacOSX-ima. Možete preuzeti izvor Memcached i kompajlirati ga ili možete preuzeti binarne datoteke koje je sastavio netko drugi i koristiti ih za instalaciju Memcacheda. Ovdje ću proći kroz postupak preuzimanja binarnih datoteka za platformu po vašem izboru; pogledajte Resursi ako više volite kompajlirati iz izvora.

Sljedeće upute za instalaciju odnose se na 32-bitni stroj sa sustavom Windows XP. Pogledajte Resurse za upute za instalaciju za druge platforme kao što je Linux. Također imajte na umu da je uzorak koda za ovaj članak razvijen na 32-bitnom stroju sa sustavom Windows XP, iako bi trebao raditi na bilo kojoj drugoj platformi.

  1. Kôd Jellycan ima modificiranu verziju Memcacheta s kojom je lako i učinkovito raditi. Započnite ovdje preuzimanjem win32 binarne ZIP datoteke
  2. Proširite Memcached--win32-bin.zipna tvrdom disku. Imajte na umu da sve što sadrži je memcached.exe. Izvršite ovu datoteku za pokretanje memcached poslužitelja.
  3. Sada izvršite memcached.exe -d installda biste memcached.exe registrirali kao uslugu. Moći ćete koristiti uslužnu konzolu za pokretanje i zaustavljanje memcached poslužitelja.

CL start / stop

Pokušajte pokrenuti i zaustaviti memcached poslužitelj iz naredbenog retka umjesto s servisne ploče. To će vam dati veću fleksibilnost za isprobavanje različitih opcija naredbenog retka i pronalaženje najbolje moguće konfiguracije za vaše zahtjeve.

Kada izvršite memcached.exebez ikakvih opcija naredbenog retka, Memcached poslužitelj će se pokrenuti na portu 11211 s 64 MB memorije. U nekim ćete slučajevima možda htjeti imati detaljniju kontrolu nad konfiguracijom. Na primjer, recimo da port 11211 koristi neki drugi postupak na vašem stroju, a vi želite da poslužitelj Memcached koristi port 12000; ili ako ste pokretali Memcached poslužitelj u QA ili proizvodnom okruženju, željeli biste mu dati više memorije od zadanih 64 MB. U tim biste slučajevima mogli koristiti opcije naredbenog retka za prilagodbu ponašanja poslužitelja. Izvršenjem memcache.exe -helpnaredbe dobit ćete cjelovit popis opcija naredbenog retka poput onih prikazanih na slici 3.

Povežite se s Memcachedom putem Telneta

Nakon pokretanja memcached poslužitelja preslušava na priključku kojem ste ga dodijelili. Klijent Memcached povezuje se s poslužiteljem na TCP ili UDP priključku, šalje naredbe i prima odgovore i na kraju prekida vezu. (Pogledajte Resursi za detalje o protokolu koji klijent koristi za komunikaciju s poslužiteljem.)

Sa svojim poslužiteljem Memcached možete se povezati na razne načine. Ako koristite Java klijent, kao što ćemo učiniti u drugoj polovici ovog vodiča, moći ćete pristupiti jednostavnom API-ju za spremanje i preuzimanje objekata iz predmemorije. Možete koristiti i Telnet klijent za izravno povezivanje s poslužiteljem. Znanje kako koristiti Telnet klijenta za komunikaciju s memcached poslužiteljem važno je za ispravljanje pogrešaka Java klijenta, pa ćemo tamo početi.

Telnet naredbe

Prvo ćete trebati koristiti Telnet klijent po vašem izboru za povezivanje s memcached poslužiteljem. Na računalu sa sustavom Windows XP možete jednostavno izvršiti telnet localhost 11211pod pretpostavkom da je poslužitelj Memcached pokrenut na istom stroju i sluša na zadanom priključku 11211. Sljedeće su naredbe bitne za rad s Memcachedom putem Telneta:

  • setdodaje novu stavku u predmemoriju. Poziv je: Set . Možete upisati stvarnu vrijednost koja bi se trebala pohraniti u sljedeći redak. Ako ne želite da unos predmemorije istekne, unesite 0 kao vrijednost.
  • getvraća vrijednost ključa predmemorije. Upotrijebite get za dobivanje vrijednosti keyName.
  • adddodaje novi ključ samo ako već ne postoji. Na primjer:add
  • replacezamijenit će vrijednost samo ako ključ postoji. Na primjer:replace
  • deletebriše unos predmemorije za ključ. Pomoću poziva delete možete izbrisati vrijednost keyName.

Snimak zaslona na slici 4 predstavlja primjer interakcije s memcached poslužiteljem putem Telneta. Kao što možete vidjeti, Memcached poslužitelj pruža povratne informacije za svaku naredbu, kao što su STORED, NOT_STOREDi tako dalje.

Zaključak prema 1. dijelu

Do sada smo ukratko razgovarali o razlikama između distribuirane arhitekture Memcacheda i tradicionalnijih Java cache sustava. Također smo postavili implementaciju Memcachea u vašem razvojnom okruženju, a vi ste uvježbavali povezivanje s Memcachedom putem Telneta. U sljedećem dijelu ovog vodiča koristit ćemo Java klijent spymemcached za postavljanje rješenja za distribuirano predmemoriranje za uzorak Java aplikacije. U tom ćete procesu saznati mnogo više o Memcachedu i kako može poboljšati izvedbu vaših Java EE aplikacija.

Sunil Patil je Java EE arhitekt koji radi za tvrtku Avnet Technology u San Franciscu u Kaliforniji. Autor je Java Portlets 101 (SourceBeat, travanj 2007.) i napisao je brojne članke koje su objavili JavaWorld, IBM developerWorks i O'Reilly Media. Osim što je IBM Certified WebSphere Portal Server Developer Application Administrator i Administrator, on je i Sun Microsystems Certified Java programer, programer web komponenata i programer poslovne komponente. Sunilov blog možete pogledati na //www.webspherenotes.com.