Ohjelmointi

Käytä Memcachedia Java-yrityksen suorituskykyyn, osa 1: Arkkitehtuuri ja asennus

Danga Interactive on kehittänyt sivuston suorituskyvyn parantamiseksi LiveJournal.comissa. Memcachedin hajautettu arkkitehtuuri tukee nykyään sosiaalisten verkkosovellusten, kuten Twitter, Facebook ja Wikipedia, eksponentiaalista skaalautuvuutta. Tässä kaksiosaisessa opetusohjelmassa Sunil Patil esittelee Memcachedin hajautetun hashtable-arkkitehtuurin ja opastaa aloittamaan sen käytön tietojen välimuistiin tallentamiseen omiin tietokantapohjaisiin Java-yrityssovelluksiin.

Tämä opetusohjelma esittelee Memcachedin käytön Java-yrityssovellusten suorituskyvyn parantamiseksi. Ensimmäinen puolisko alkaa yleiskatsauksesta perinteisiin Java-välimuistiarkkitehtuureihin verrattuna Memcachedin arkkitehtuuriin. Saamme myös Memcachedin asennettuna koneellesi ja esitän sinulle asetukset ja komennot Memcachedin kanssa työskentelemiseksi Telnetin kautta. Toisella puoliskolla kehitämme Java-ohjelmassa "Hello Memcached" -asiakasohjelman, jota käytämme etsimään spymemcached-asiakkaan konepellin alla. Opit myös käyttämään Memcached-ohjelmaa tietokantapalvelimen kuormituksen vähentämiseen ja sen käyttämiseen dynaamisesti luodun sivumerkinnän välimuistiin. Lopuksi tarkastelemme joitain lisäasetuksia spymemcached-asiakkaiden määrittämiseen.

Lisätietoja Java-välimuistista JavaWorldissa

  • Katso "Palvelimen kuormituksen tasapainotusarkkitehtuurit, osa 1: Kuljetustason kuormituksen tasapainottaminen" saadaksesi syvällisemmän keskustelun hajautetusta välimuistista Memcachedin kanssa.
  • Katso myös "Avoimen lähdekoodin Java-projektit: Java-välimuistijärjestelmä", jos haluat oppia perinteisestä Java-välimuistista.

Katsaus Memcached- ja Java-välimuistiarkkitehtuureihin

Java-välimuistikehykset, kuten EHCache ja OSCache, ovat lähinnä HashMap esineitä sovelluskoodissasi. Aina kun lisäät uuden välimuistiin objektin, se tallennetaan sovelluksesi muistiin. Tämä strategia toimii hyvin pienten tietomäärien tallentamisessa, mutta se ei toimi yli muutaman gigatavun (Gt) välimuistiin tallentamiseen. Memcached-palvelimen suunnittelijat käyttivät hajautettua arkkitehtonista lähestymistapaa, joka mahdollistaa järjestelmän skaalautuvuuden. Tämän seurauksena voit käyttää Memcachediä välimuistiin valtavan määrän tietoja.

Memcachedin arkkitehtuuri koostuu kahdesta kappaleesta. Ensimmäinen on Memcached-palvelin, joka toimii omassa prosessissaan. Jos haluat skaalata sovellustasi, voit asentaa ja suorittaa Memcached-palvelimen muille koneille. Memcached-palvelimen esiintymät eivät ole tietoisia toisistaan. Memcached-asiakas, toinen osa Memcached-järjestelmää, tekee tietää jokaisesta palvelimesta. Asiakas on vastuussa palvelimen hakemisesta jokaiselle välimuistimerkinnälle ja joko välimuistimerkinnän tallentamisesta tai hankkimisesta - prosessista, josta keskustelen yksityiskohtaisesti myöhemmin artikkelissa.

Jos sinulla on jonkin verran kokemusta Java EE -verkkosovellusten käytöstä, olet todennäköisesti käyttänyt aiemmin avoimen lähdekoodin Java-välimuistikehystä, kuten EHCache tai OSCache. Olet ehkä käyttänyt myös kaupallista välimuistikehystä, joka toimitettiin osana sovelluspalvelinta, kuten DynaCache (joka toimitetaan IBM WebSphere Application Server -palvelimen kanssa) tai JBoss Cache (joka toimitetaan JBoss AS: n kanssa). Ennen kuin pääsemme tämän opetusohjelman käytännön oppimisosaan, on tärkeää ymmärtää, kuinka Memcached eroaa näistä perinteisistä Java-välimuistikehyksistä.

Perinteisen Java-välimuistin käyttäminen

Perinteisen Java-välimuistikehyksen käyttö on melko helppoa riippumatta siitä, valitsetko avoimen lähdekoodin vai kaupallisen vaihtoehdon. Jos kyseessä on avoimen lähdekoodin kehys, kuten EHCache tai OSCache, sinun on ladattava binäärit ja lisättävä tarvittavat JAR-tiedostot sovelluksesi luokan polulle. Saatat myös joutua luomaan määritystiedoston, jolla määrität välimuistin koon, levyn latauksen ja niin edelleen. Välimuistikehystä varten, joka toimitettiin yhdessä sovelluspalvelimen kanssa, sinun ei yleensä tarvitse ladata muita JAR-tiedostoja, koska ne olisivat mukana ohjelmistossa.

Kun olet lisännyt välimuistikehyksen tuen sovellukseesi, voit aloittaa sen käytön luomalla CacheManager objekti ja välimuistimerkintöjen saaminen ja asettaminen siihen. Hupun alla välimuistikehys loisi CacheManager objektit samassa JVM: ssä, jossa sovelluksesi oli käynnissä. Aina kun lisäät välimuistimerkinnän, kyseinen objekti lisätään myös tietyntyyppiseen hashtableen, jota välimuistikehys ylläpitää.

Jos sovelluspalvelimesi oli käynnissä useilla solmuilla, saatat haluta myös tukea hajautettuun välimuistiin. Kun lisäät objektin välimuistiin hajautetussa välimuistijärjestelmässä AppServer1: ssä, kyseinen objekti on käytettävissä myös sovelluksissa AppServer2 ja AppServer3. Perinteiset Java-välimuistit käyttävät replikointi hajautettuun välimuistiin, mikä tarkoittaa, että kun lisäät välimuistimerkinnän AppServer1: een, se kopioidaan automaattisesti järjestelmän muille sovelluspalvelimille. Tämän seurauksena merkintä on käytettävissä kaikissa solmuissasi.

Memcachedin käyttäminen

Jotta Memcachedia voidaan käyttää välimuistiin, sinun on ensin ladattava ja asennettava Memcached-palvelin valitsemallesi alustalle. Kun olet asentanut Memcached-palvelimen, se kuuntelee joko TCP- tai UDP-porttia puheluiden välimuistiin tallentamiseksi.

Seuraavaksi lataat Java-asiakkaan Memcachedille ja lisäät asiakkaan JAR-tiedostot sovellukseesi. Sen jälkeen voit luoda Memcached-asiakasobjektin ja alkaa kutsua sen menetelmää saadaksesi ja asettamalla välimuistimerkinnät. Kun lisäät objektin välimuistiin, Memcached-asiakas ottaa kyseisen objektin, sarjoittaa sen ja lähettää tavutaulukon Memcached-palvelimelle tallennettavaksi. Tällöin välimuistissa oleva objekti voi olla roskaa, joka on kerätty JVM: stä, jossa sovelluksesi on käynnissä.

Kun tarvitset välimuistissa olevaa objektia, voit soittaa Memcached-asiakkaalle saada() menetelmä. Asiakas ottaa saada pyydä, sarjoita se ja lähetä se Memcached-palvelimelle. Memcached-palvelin etsii objektin välimuistista pyynnön avulla. Kun sillä on objekti, se palauttaa tavutaulukon takaisin Memcached-asiakkaalle. Memcached-asiakasobjekti ottaa sitten tavutaulukon ja deserialisoi sen objektin luomiseksi ja palauttamiseksi sovellukseesi.

Vaikka sovelluksesi olisi käytössä useammalla kuin yhdellä sovelluspalvelimella, ne kaikki voivat osoittaa samaan Memcached-palvelimeen ja käyttää sitä välimuistimerkintöjen hakemiseen ja asettamiseen. Jos sinulla on useampi kuin yksi Memcached-palvelin, palvelimet eivät tiedä toisistaan. Sen sijaan määrität Memcached-asiakkaasi siten, että se tuntee kaikki käytettävissä olevat Memcached-palvelimet. Esimerkiksi, jos sovelluksesi luo Java-objektin AppServer1: een ja kutsuu aseta() Memcached-menetelmä, Memcached-asiakas selvittää, mihin Memcached-palvelimeen kyseinen merkintä menee. Sitten se alkaa kommunikoida vain kyseisen Memcached-palvelimen kanssa. Samoin kun koodisi AppServer2: ssa tai AppServer3: ssa yrittää saada merkinnän, Memcached-asiakas selvittää ensin, mihin palvelimeen kyseinen merkintä on tallennettu, ja kommunikoi sitten vain kyseisen palvelimen kanssa.

Memcached-asiakaslogiikka

Oletuskokoonpanossa Memcached-asiakas käyttää hyvin yksinkertaista logiikkaa valitessaan palvelimen haku- tai asetustoiminnolle. Kun teet saada() tai aseta() puhelun, asiakas ottaa välimuistiavaimen ja soittaa sen hash koodin() tapa saada kokonaisluku, kuten 11. Se sitten ottaa kyseisen numeron ja jakaa sen käytettävissä olevien Memcached-palvelimien lukumäärällä, sanotaan kaksi. Sitten se ottaa jäännöksen arvon, joka on tässä tapauksessa 1. Välimuistimerkintä menee Memcached-palvelimelle 1. Tämä yksinkertainen algoritmi varmistaa, että Memcached-asiakas kullakin sovelluspalvelimellasi valitsee aina saman palvelimen annetulle välimuistiavaimelle.

Memcachedin asentaminen

Memcached toimii Unix, Linux, Windows ja MacOSX. Voit joko ladata Memcached-lähteen ja kääntää sen tai ladata jonkun muun kokoamat binäärit ja käyttää niitä Memcachedin asentamiseen. Täällä käyn läpi prosessin, jolla ladataan binäärit valitsemallesi alustalle; katso Resurssit, jos haluat kääntää lähteestä.

Seuraavat asennusohjeet koskevat 32-bittistä Windows XP -laitetta. Katso muiden käyttöympäristöjen, kuten Linux, asennusohjeet kohdasta Resurssit. Huomaa myös, että tämän artikkelin mallikoodi on kehitetty Windows XP 32-bittisessä koneessa, vaikka sen pitäisi toimia millä tahansa muulla alustalla.

  1. Jellycan-koodissa on muokattu Memcached-versio, jonka kanssa työskentely on helppoa ja tehokasta. Aloita tästä lataamalla Win32-binaarinen ZIP-tiedosto
  2. Laajentaa Memcached--win32-bin.zip kiintolevyllä. Huomaa, että kaikki se sisältää memcached.exe. Käynnistä Memcached-palvelin suorittamalla tämä tiedosto.
  3. Suorita nyt memcached.exe -d asennus rekisteröidä memcached.exe palveluksi. Voit käynnistää ja pysäyttää Memcached-palvelimen Services-konsolilla.

CL start / stop

Yritä käynnistää ja pysäyttää Memcached-palvelin komentoriviltä palvelupaneelin sijaan. Se antaa sinulle enemmän joustavuutta kokeilla erilaisia ​​komentorivivaihtoehtoja ja selvittää tarpeidesi mukaan paras mahdollinen kokoonpano.

Kun suoritat memcached.exe ilman komentorivivaihtoehtoja Memcached-palvelin käynnistyy oletusarvoisesti portilla 11211 64 Mt muistia. Joissakin tapauksissa saatat haluta hallita kokoonpanoa tarkemmin. Oletetaan esimerkiksi, että porttia 11211 käyttää jokin muu koneesi prosessi ja haluat Memcached-palvelimen käyttävän porttia 12000; tai jos aloitit Memcached-palvelimen laadunvarmistus- tai tuotantoympäristössä, haluat antaa sille enemmän muistia kuin oletus 64 Mt. Näissä tapauksissa voit käyttää komentorivivalintoja mukauttamaan palvelimen toimintaa. Suoritetaan memcache.exe -apu -komento tuottaa täydellisen luettelon komentorivivaihtoehdoista, kuten kuvassa 3.

Muodosta yhteys Memcachediin Telnetin kautta

Kun Memcached-palvelin on käynnistetty, se kuuntelee porttia, johon olet määrittänyt sen. Memcached-asiakas muodostaa yhteyden palvelimeen joko TCP- tai UDP-portissa, lähettää komentoja ja vastaanottaa vastauksia ja lopulta sulkee yhteyden. (Katso Resurssit saadaksesi lisätietoja protokollasta, jota asiakas käyttää yhteydenpitoon palvelimen kanssa.)

Voit muodostaa yhteyden Memcached-palvelimeen monin tavoin. Jos käytät Java-asiakasta, kuten teemme tämän opetusohjelman toisella puoliskolla, voit käyttää yksinkertaista sovellusliittymää objektien tallentamiseen ja vastaanottamiseen välimuistista. Vaihtoehtoisesti voit käyttää Telnet-asiakasta muodostaaksesi yhteyden palvelimeen suoraan. Tieto siitä, miten Telnet-asiakasta käytetään kommunikoimaan Memcached-palvelimen kanssa, on tärkeää Java-asiakkaan virheenkorjauksessa, joten aloitamme siitä.

Telnet-komennot

Ensin sinun on käytettävä valitsemaasi Telnet-asiakasta muodostamaan yhteys Memcached-palvelimeen. Windows XP -tietokoneessa voit yksinkertaisesti suorittaa telnet localhost 11211 olettaen, että Memcached-palvelin toimii samalla koneella ja kuuntelee oletusporttia 11211. Seuraavat komennot ovat välttämättömiä työskenneltäessä Memcachedin kanssa Telnetin kautta:

  • aseta lisää uuden kohteen välimuistiin. Puhelu on: Aseta . Voit kirjoittaa todellisen arvon, joka pitäisi tallentaa seuraavalle riville. Jos et halua välimuistimerkinnän päättyvän, kirjoita arvoksi 0.
  • saada palauttaa välimuistiavain arvon. Käyttää saada saadaksesi arvon keyName.
  • lisätä lisää uuden avaimen vain, jos sitä ei vielä ole olemassa. Esimerkiksi: lisätä
  • korvata korvaa arvon vain, jos avain on olemassa. Esimerkiksi: korvata
  • poistaa poistaa avaimen välimuistimerkinnän. Voit käyttää puhelua poistaa poistaa arvon keyName.

Kuvan 4 kuvakaappaus kuvaa esimerkkivuorovaikutusta Memcached-palvelimen kanssa Telnetin kautta. Kuten näette, Memcached-palvelin antaa palautetta jokaiselle komennolle, kuten SÄILYTETTY, EI_TALLENNETTU, ja niin edelleen.

Johtopäätös osasta 1

Toistaiseksi olemme keskustelleet lyhyesti Memcachedin hajautetun arkkitehtuurin ja perinteisempien Java-välimuistijärjestelmien eroista. Olemme myös määrittäneet Memcached-toteutuksen kehitysympäristösi, ja olet harjoittanut yhteyden muodostamista Memcachediin Telnetin kautta. Tämän opetusohjelman seuraavassa osassa käytämme Java-asiakasta, joka on spymemcached, määrittämään hajautetun välimuistiratkaisun Java-esimerkkisovellukselle. Tässä prosessissa opit paljon enemmän Memcachedista ja siitä, miten se voi parantaa Java EE -sovellusten suorituskykyä.

Sunil Patil on Java EE -arkkitehti, joka työskentelee Avnet Technologyn palveluksessa San Franciscossa Kaliforniassa. Hän on kirjoittanut Java-portlet-sovellukset 101 (SourceBeat, huhtikuu 2007) ja on kirjoittanut lukuisia artikkeleita, jotka ovat julkaisseet JavaWorld, IBM developerWorks ja O'Reilly Media. Sen lisäksi, että hän on IBM-sertifioitu WebSphere Portal Server -sovelluskehittäjä ja hallinto, hän on myös Sun Microsystems -sertifioitu Java-ohjelmoija, verkkokomponenttien kehittäjä ja yrityskomponenttien kehittäjä. Voit tarkastella Sunilin blogia osoitteessa //www.webspherenotes.com.