Programiranje

Uporabite Memcached za zmogljivost podjetja Java, 1. del: Arhitektura in namestitev

Memcachedova distribuirana arhitektura, ki jo je razvila Danga Interactive za izboljšanje učinkovitosti spletnega mesta na LiveJournal.com, danes podpira eksponentno razširljivost socialnih spletnih aplikacij, kot so Twitter, Facebook in Wikipedia. V tej dvodelni vadnici Sunil Patil predstavlja Memcachedovo porazdeljeno arhitekturo razprševanja in začnete z njeno uporabo za predpomnjenje podatkov za vaše lastne poslovne aplikacije Java, ki jih poganja baza podatkov.

Ta vadnica vam predstavlja uporabo Memcached za izboljšanje zmogljivosti Java aplikacij za podjetja. Prva polovica se začne s pregledom tradicionalnih arhitektur predpomnjenja Java v primerjavi z arhitekturo Memcached. Na vaš računalnik bomo namestili tudi Memcached in predstavil vam bom nastavitve in ukaze za delo z Memcachedom prek Telneta. V drugi polovici bomo v Javi razvili odjemalski program "Hello Memcached", ki ga bomo uporabili za iskanje pod pokrovom odštetega odjemalca. Spoznali boste tudi uporabo Memcached za zmanjšanje obremenitve strežnika baz podatkov in njegovo uporabo za predpomnjenje dinamično ustvarjenih oznak strani. Na koncu bomo razmislili še o nekaterih naprednih možnostih za konfiguriranje odjemalcev s predpomnilnikom.

Več o predpomnjenju Java na JavaWorldu

  • Glejte "Arhitekture uravnoteženja obremenitve strežnika, 1. del: Uravnavanje obremenitve na ravni transporta" za podrobnejšo razpravo o porazdeljenem predpomnjenju z Memcachedom.
  • Glejte tudi "Odprtokodni projekti Java: Sistem Java Caching", če želite izvedeti več o tradicionalnem predpomnjenju Java.

Pregled arhitektur predpomnjenja Memcached in Java

Okvirji Java za predpomnjenje, kot sta EHCache in OSCache, so v bistvu HashMap predmeti v vaši aplikacijski kodi. Kadar koli dodate nov predmet v predpomnilnik, se shrani v pomnilnik vaše aplikacije. Ta strategija deluje dobro za shranjevanje majhnih količin podatkov, ne deluje pa za predpomnjenje več kot nekaj gigabajtov (GB). Oblikovalci strežnika Memcached so uporabili porazdeljen arhitekturni pristop, ki omogoča razširljivost sistema. Posledično lahko z Memcachedom shranite ogromno podatkov.

Arhitektura Memcached je sestavljena iz dveh delov. Najprej je strežnik Memcached, ki deluje v svojem procesu. Če želite prilagoditi svojo aplikacijo, lahko strežnik Memcached namestite in zaženete na dodatnih računalnikih. Primerki strežnika Memcached se ne poznajo. Odjemalec Memcached, drugi del sistema Memcached, naredi vedeti o vsakem strežniku. Stranka je odgovorna za prevzem strežnika za vsak vnos predpomnilnika in za shranjevanje ali vnos predpomnilnika - postopek, o katerem bom podrobneje razpravljal kasneje v članku.

Če imate nekaj izkušenj z delom na spletnih aplikacijah Java EE, je verjetno, da ste že uporabljali odprtokodno ogrodje predpomnjenja Java, kot sta EHCache ali OSCache. Morda ste uporabili tudi komercialno ogrodje predpomnjenja, ki je bilo dostavljeno kot del vašega aplikacijskega strežnika, na primer DynaCache (ki je priložen IBM WebSphere Application Server) ali JBoss Cache (ki je priložen JBoss AS). Preden se lotimo praktičnega dela te vadnice, je pomembno razumeti, kako se Memcached razlikuje od teh tradicionalnih okvirov predpomnjenja Java.

Uporaba tradicionalnega predpomnilnika Java

Uporaba tradicionalnega ogrodja predpomnjenja Java je precej enostavna, ne glede na to, ali izberete odprtokodno ali komercialno možnost. Za odprtokodno ogrodje, kot sta EHCache ali OSCache, boste morali prenesti binarne datoteke in dodati potrebne datoteke JAR na pot razreda do vaše aplikacije. Morda boste morali ustvariti tudi konfiguracijsko datoteko, s katero bi konfigurirali velikost predpomnilnika, razkladanje diska itd. Za ogrodje predpomnjenja, ki je bilo priloženo strežniku aplikacij, vam običajno ne bi bilo treba prenesti nobenih dodatnih JAR-jev, ker bi bili priloženi programski opremi.

Po dodajanju podpore za ogrodje predpomnjenja v aplikaciji lahko začnete uporabljati z ustvarjanjem CacheManager predmet ter pridobivanje in nastavitev vnosov v predpomnilnik v njem. Pod pokrovom bi ogrodje predpomnilnika ustvarilo CacheManager predmeti v istem JVM, kjer se je izvajala vaša aplikacija. Vsakič, ko dodate vnos v predpomnilnik, bi bil ta predmet dodan tudi v neko vrsto razpršitve, ki jo vzdržuje ogrodje predpomnjenja.

Če se je vaš aplikacijski strežnik izvajal na več vozliščih, boste morda želeli tudi podporo za porazdeljeno predpomnjenje. V sistemu porazdeljenega predpomnilnika, ko dodate objekt v predpomnilnik na AppServer1, je ta predmet na voljo tudi v AppServer2 in AppServer3. Tradicionalni predpomnilniki Java uporabljajo replikacija za porazdeljeno predpomnjenje, kar pomeni, da se, ko dodate vnos predpomnilnika v AppServer1, samodejno podvoji na druge strežnike aplikacij v vašem sistemu. Posledično bo vnos na voljo na vseh vaših vozliščih.

Uporaba Memcached

Če želite uporabiti Memcached za predpomnjenje, morate najprej prenesti in namestiti strežnik Memcached za izbrano platformo. Ko namestite strežnik Memcached, bo poslušal vrata TCP ali UDP za predpomnjenje klicev.

Nato naložite odjemalca Java za Memcached in v svojo aplikacijo dodate odjemalske JAR-je. Po tem lahko ustvarite odjemalski objekt Memcached in začnete klicati njegovo metodo, da dobite in nastavite vnose v predpomnilnik. Ko dodate objekt v predpomnilnik, odjemalec Memcached vzame ta objekt, ga serializira in pošlje bajtno matriko strežniku Memcached za shranjevanje. Takrat je lahko predpomnjeni objekt smeti, zbrane iz JVM, kjer se izvaja vaša aplikacija.

Ko potrebujete ta predpomnjeni objekt, lahko pokličete odjemalca Memcached dobili () metoda. Stranka bo vzela dobili zahtevo, jo serializirajte in pošljite na strežnik Memcached. Strežnik Memcached bo zahtevo uporabil za iskanje predmeta iz predpomnilnika. Ko ima objekt, vrne bajtno matriko nazaj odjemalcu Memcached. Odjemalski objekt Memcached bo nato vzel bajtno matriko in jo deserializiral, da bo ustvaril objekt in ga vrnil v vašo aplikacijo.

Tudi če se vaša aplikacija izvaja na več kot enem strežniku aplikacij, lahko vsi kažejo na isti strežnik Memcached in ga uporabljajo za pridobivanje in nastavitev vnosov v predpomnilnik. Če imate več kot en strežnik Memcached, strežniki ne bodo vedeli drug o drugem. Namesto tega boste odjemalca Memcached konfigurirali tako, da bo poznal vse razpoložljive strežnike Memcached. Če na primer vaša aplikacija ustvari objekt Java na AppServer1 in pokliče datoteko set () Metoda Memcached, bo odjemalec Memcached ugotovil, na kateri strežnik Memcached gre ta vnos. Nato bo začel komunicirati samo s tem strežnikom Memcached. Prav tako, ko poskuša vaša koda v AppServer2 ali AppServer3 dobili vnosa bo odjemalec Memcached najprej ugotovil, na katerem strežniku je ta vnos shranjen, nato pa komuniciral samo s tem strežnikom.

Memcached odjemalska logika

V svoji privzeti konfiguraciji odjemalec Memcached uporablja zelo preprosto logiko za izbiro strežnika za operacijo pridobivanja ali nastavitve. Ko naredite dobili () ali set () klic, stranka vzame ključ predpomnilnika in pokliče svojega hashCode () metoda, da dobimo celo število, kot je 11. Nato vzame to število in ga deli s številom razpoložljivih strežnikov Memcached, recimo dve. Nato vzame vrednost ostanka, ki je v tem primeru 1. Vnos predpomnilnika bo preusmerjen na strežnik Memcached 1. Ta preprost algoritem zagotavlja, da odjemalec Memcached na vsakem od vaših strežnikov aplikacij vedno izbere isti strežnik za dani ključ predpomnilnika.

Namestitev Memcached

Memcached deluje v sistemih Unix, Linux, Windows in MacOSX. Lahko prenesete vir Memcached in ga prevedete ali pa prenesete binarne datoteke, ki jih je sestavil nekdo drug, in z njimi namestite Memcached. Tu se bom sprehodil skozi postopek nalaganja binarnih datotek za platformo po vaši izbiri; glejte Vire, če želite prevajanje iz vira.

Naslednja navodila za namestitev so za 32-bitno napravo Windows XP. Za navodila za namestitev drugih platform, kot je Linux, glejte Vire. Upoštevajte tudi, da je bila vzorčna koda za ta članek razvita na 32-bitnem računalniku s sistemom Windows XP, čeprav bi morala delovati na kateri koli drugi platformi.

  1. Koda Jellycan ima spremenjeno različico Memcached, s katero je enostavno in učinkovito delati. Začnite tukaj s prenosom binarne ZIP datoteke win32
  2. Razširi Memcached--win32-bin.zip na trdem disku. Upoštevajte, da vse, kar vsebuje, je memcached.exe. Izvedite to datoteko, da zaženete strežnik Memcached.
  3. Zdaj izvrši memcached.exe -d namestitev za registracijo memcached.exe kot storitve. Konzolo Services boste lahko uporabljali za zagon in zaustavitev strežnika Memcached.

CL start / stop

Poskusite zagnati in ustaviti strežnik Memcached iz ukazne vrstice namesto s podokna s storitvami. S tem boste dobili več prilagodljivosti za preizkušanje različnih možnosti ukazne vrstice in ugotovitev najboljše možne konfiguracije za vaše potrebe.

Ko zaženete memcached.exe brez možnosti ukazne vrstice se strežnik Memcached privzeto zažene na vratih 11211 s 64 MB pomnilnika. V nekaterih primerih boste morda želeli imeti bolj natančen nadzor nad konfiguracijo. Recimo, da vrata 11211 na primer uporabljajo nekateri drugi procesi na vaši napravi in ​​želite, da strežnik Memcached uporablja vrata 12000; ali če ste strežnik Memcached začenjali v QA ali produkcijskem okolju, bi mu želeli dati več pomnilnika kot privzetih 64 MB. V teh primerih lahko z ukazno vrstico prilagodite vedenje strežnika. Izvajanje memcache.exe -pomoč command bo dal popoln seznam možnosti ukazne vrstice, kot so prikazane na sliki 3.

Povežite se z Memcached prek Telneta

Po zagonu strežnika Memcached posluša na vratih, ki ste jim jih dodelili. Odjemalec Memcached se poveže s strežnikom na vratih TCP ali UDP, pošlje ukaze in prejme odgovore ter sčasoma prekine povezavo. (Za podrobnosti o protokolu, ki ga odjemalec uporablja za komunikacijo s strežnikom, glejte Viri.)

Na strežnik Memcached se lahko povežete na različne načine. Če uporabljate odjemalca Java, kot bomo storili v drugi polovici te vadnice, boste lahko dostopali do preprostega API-ja za shranjevanje in pridobivanje predmetov iz predpomnilnika. Lahko pa uporabite odjemalca Telnet za neposredno povezavo s strežnikom. Vedeti, kako uporabiti odjemalca Telnet za komunikacijo s strežnikom Memcached, je pomembno za odpravljanje napak odjemalca Java, zato bomo tam začeli.

Ukazi Telnet

Najprej boste morali uporabiti odjemalca Telnet po vaši izbiri za povezavo s strežnikom Memcached. Na računalniku z operacijskim sistemom Windows XP lahko preprosto izvedete telnet localhost 11211 ob predpostavki, da se strežnik Memcached izvaja na isti napravi in ​​posluša na privzetih vratih 11211. Naslednji ukazi so bistveni za delo z Memcachedom prek Telneta:

  • nastavite doda nov element v predpomnilnik. Klic je: Nastavite . Vtipkate lahko dejansko vrednost, ki naj bo shranjena v naslednji vrstici. Če ne želite, da vnos predpomnilnika poteče, kot vrednost vnesite 0.
  • dobili vrne vrednost ključa predpomnilnika. Uporaba dobili da dobimo vrednost keyName.
  • dodajte doda nov ključ le, če še ne obstaja. Na primer: dodajte
  • zamenjati bo nadomestila vrednost le, če ključ obstaja. Na primer: zamenjati
  • izbriši izbriše vnos predpomnilnika za ključ. Klic lahko uporabite izbriši da izbrišete vrednost keyName.

Posnetek zaslona na sliki 4 predstavlja vzorčno interakcijo s strežnikom Memcached prek Telneta. Kot lahko vidite, strežnik Memcached daje povratne informacije vsakemu ukazu, na primer SHRANJENO, NOT_STORED, in tako naprej.

Zaključek k 1. delu

Do zdaj smo na kratko razpravljali o razlikah med porazdeljeno arhitekturo Memcached in bolj tradicionalnimi sistemi predpomnilnika Java. V vašem razvojnem okolju smo postavili tudi implementacijo Memcached in vadili ste se v povezovanju z Memcachedom prek Telneta. V naslednjem delu te vadnice bomo z odjemalcem Java spymemcached nastavili razdeljeno rešitev predpomnjenja za vzorčno aplikacijo Java. V tem procesu boste izvedeli veliko več o Memcachedu in o tem, kako lahko izboljša delovanje vaših aplikacij Java EE.

Sunil Patil je arhitekt Java EE, zaposlen v podjetju Avnet Technology v San Franciscu v Kaliforniji. Je avtor knjige Portalski programčki Java 101 (SourceBeat, april 2007) in je napisal številne članke, ki so jih objavili JavaWorld, IBM developerWorks in O'Reilly Media. Poleg tega, da je IBM Certified WebSphere Portal Server Application Developer in skrbnik, je Sun Microsystems Certified Java programer, razvijalec spletnih komponent in razvijalec poslovne komponente. Sunilov spletni dnevnik si lahko ogledate na //www.webspherenotes.com.

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