Programiranje

Odprtokodni projekti Java: sistem Java Caching

Strokovnjak za podjetniško Java Steve Haines se je ta mesec pridružil seriji odprtokodnih projektov Java z uvodom v sistem Java Caching System (JCS), robustno rešitev za predpomnjenje na ravni podjetja. Steve začne s hitrim uvodom v predpomnjenje in razpravlja o merilih za določanje, ali je treba predmete predpomniti in ali bi vaša aplikacija imela koristi od predpomnilnika. Nato vam pokaže, kako konfigurirati JCS in ga uporabiti za izdelavo aplikacije za predpomnjenje.

Java Caching System (JCS) je robusten odprtokodni izdelek za predpomnjenje, izdan prek podprojekta Apache Jakarta. Ponuja standardne funkcije, ki bi jih pričakovali od sistema predpomnilnika, na primer predpomnjenje v pomnilniku in algoritmi za selektivno odstranjevanje predmetov iz predpomnilnika. Ponuja tudi naprednejše funkcije, kot sta indeksirano predpomnjenje diska in podpora za porazdeljene predpomnilnike.

Predpomnilnik JCS ima strukturo, podobno zemljevidu, v kateri so podatki shranjeni v predpomnilniku kot par ime-in-vrednost. JCS razdeli predpomnilnik na regijah. Vsaka regija ima svojo konfiguracijo, pa tudi svoj nabor parov ime-vrednost. Vsaka regija lahko:

  • Bodite drugačni
  • Izvajati drugače
  • Vsebujejo različne podatke

The tipke (imena v parih imena in vrednosti) v eni regiji so lahko enaka tipkam v drugih regijah. To je pomembno, ker vam omogoča vzdrževanje ločenih predpomnilnikov za različne predmete, vse znotraj istega JVM - in vse definirane v eni datoteki z lastnostmi.

Odprtokodne licence

Za vsak odprtokodni projekt Java, zajet v tej seriji, je potrebna licenca, ki jo morate razumeti, preden projekt vključite v svoje projekte. Za JCS velja licenca Apache; glejte Vire, če želite izvedeti več.

Ta članek raziskuje JCS, tako da vam najprej pokaže, kako pridobiti in namestiti trenutno izdajo. Nato bom razložil, kaj je predpomnilnik, zakaj ga lahko uporabljate in ali je to prava rešitev za določeno aplikacijo. Nato se boste poglobili v datoteko lastnosti JCS, ki je najboljša pot do razumevanja JCS. Na koncu boste zgradili vzorec aplikacije za predpomnjenje, ki uporablja JCS.

Začnite z JCS

JCS lahko prenesete s strani za prenose na spletnem mestu projekta JCS. Od tega pisanja je najnovejša različica 1.3. Prenesite binarno distribucijo (bodisi kot datoteko TAR v sistemih Unix ali kot datoteko ZIP v sistemu Windows) in jo razpakirajte v lokalni imenik v računalniku.

Koren namestitvenega imenika vsebuje jcs-1.3.jar, ki ga morate dodati v svoj ZAPRTI pred sestavljanjem in zagonom aplikacij JCS.

Dokumentacija predavanj goldmine

V tem članku, pa tudi v svojih neodvisnih študijah, boste ugotovili, da JCS dokumenti directory je neprecenljiv vir informacij o JCS, vključno z dokumentacijo API. Robustni dokument Javadoc je vaše pooblastilo za razumevanje uporabe razredov JCS.

Potrebovali boste dve odvisnosti:

  • Commons Logging
  • Sočasno

V Commons Logging dodajte commons-logging.jar svojemu ZAPRTI.

Hitro predpomnilnik

Predpomnilnik je zasnovan tako, da hrani predmete, običajno v pomnilniku, za takojšen dostop aplikacije. Aplikacija deluje drugače kot s predpomnilnikom kot z zunanjimi rešitvami za shranjevanje. Običajno aplikacija pridobi povezavo z bazo podatkov, izvede poizvedbo po omrežju in razčleni rezultate, ko so vrnjeni. Predpomnilnik ohranja zbirko zlahka dostopnih predmetov v robustni strukturi, podobni zemljevidu, ki ne zahteva omrežnega klica. Uspešnost aplikacij Java Enterprise se eksponentno izboljša, ko dostopa do predmetov za večkratno uporabo v predpomnilniku, potem ko jih naloži iz baze podatkov, namesto da bi opravila oddaljene klice baze podatkov.

Če ima vaša aplikacija obvladljivo število predmetov, do katerih pogosto dostopate, lahko predpomnilnik verjetno izboljša njeno delovanje. Programi Java so omejeni z razpoložljivimi viri v JVM, med katerimi je najdragocenejši spomin. JVM-ju ni smiselno vzeti pomnilnika za shranjevanje predmetov, ki so redko dostopni. Verjetno je bolje, da predmet, do katerega dostopate, naložite enkrat na nekaj ur, kolikor je to potrebno, in pustite dovolj prostega pomnilnika za druge vire. Po drugi strani pa je bolje, da predmete, do katerih dostopate večkrat na minuto - ali celo večkrat na uro - naložite v predpomnilnik in jih strežete iz pomnilnika, ne pa da kličete na daljavo vsakič, ko je predmet potreben. Če je število predmetov, do katerih vaša aplikacija pogosto dostopa, dostopno v razpoložljivem pomnilniku, potem je to dober kandidat za predpomnjenje. Če pa dostopa milijone predmetov pogosto, potem je morda še vedno v najboljšem interesu aplikacije, da naloži predmete po potrebi, namesto da za gostovanje predpomnilnika uporabi 75 odstotkov kopice JVM.

Predpomnjenje v primerjavi z združevanjem

V razpravah o predpomnjenju se pogosto pojavi zmeda glede razlike med predpomnilnikom in področjem. Katere predmete je treba predpomniti in katere predmete združiti? Odgovor je v naravi samih predmetov. Če objekt ohranja stanje, ga je treba shraniti v predpomnilnik. Predmete brez državljanstva je treba združiti. Kot analogijo razmislite o dveh dejavnostih: nakup hrane v supermarketu in prevzem otroka iz šole. Vsak blagajnik lahko preveri katero koli stranko v supermarketu; ni pomembno, katero blagajno dobite, zato je treba blagajnike združiti. Ko vzamete otroka iz šole, želite vaš otroka, ne nekoga drugega, zato bi morali biti otroci v predpomnilniku.

Če to idejo ekstrapolirate na poslovno Javo, je treba zbrati vire, kot so povezave z bazami podatkov in zrna za poslovno obdelavo, predmete, kot so zaposleni, dokumenti in pripomočki, pa predpomniti. Vseeno je, katero povezavo z bazo podatkov vaša aplikacija pridobi iz nabora povezav - vsi delajo isto - toda če si želite zvišati plačo, je pomembno, da pridobite vaš predmet zaposlenega.

Razumevanje regij JCS

Uporaba JCS je pravzaprav precej preprosta, vendar potrebujete nekaj temeljnega znanja o tem, kako JCS opredeljuje predpomnilniške regije in kako jih je mogoče konfigurirati. Datoteka lastnosti JCS je logično mesto za začetek razumevanja JCS. Seznam 1 prikazuje vzorčno datoteko lastnosti JCS.

Seznam 1. Datoteka z lastnostmi JCS (cache.ccf)

# PRIROČNA REGIJA PREDMETA jcs.default = DC jcs.default.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects = 1000 jcs.default.cacheattributes.MemoryCacheName = org.apache.jory.eng. .lru.LRUMemoryCache jcs.default.cacheattributes.UseMemoryShrinker = true jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds = 3600 jcs.default.cacheattributes.ShrinkerIntervalSeconds = 60 jcs.default.elementattributesj j. elementattributes.IsEternal = false jcs.default.elementattributes.MaxLifeSeconds = 21600 jcs.default.elementattributes.IdleTime = 1800 jcs.default.elementattributes.IsSpool = true jcs.default.elementattributes.IsRemote = true jcs.default. # PREDDOLOČENE REGIJE PREDMETA jcs.region.musicCache = DC jcs.region.musicCache.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.region.musicCache.cacheattributes.MaxObjects = 1000 jcs.region.musicCacheCache ame = org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.region.musicCache.cacheattributes.UseMemoryShrinker = resnična jcs.region.musicCache.cacheattributes.MaxMemoryIdleTimeSeconds = 3600 jcs.regionhrec. region.musicCache.cacheattributes.MaxSpoolPerRun = 500 jcs.region.musicCache.elementattributes = org.apache.jcs.engine.ElementAttributes jcs.region.musicCache.elementattributes.IsEternal = false # RAZPOLOŽLJIVI AUXILIACC = AUXILICA .jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory jcs.auxiliary.DC.attributes = org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes jcs.auxiliary.DC.attributes.DiskPath = c: .attributes.MaxPurgatorySize = 10000000 jcs.auxiliary.DC.attributes.MaxKeySize = 1000000 jcs.auxiliary.DC.attributes.MaxRecycleBinSize = 5000 jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount = 300000 jcs.utit.utit

Seznam 1 vsebuje tri razdelke:

  • Privzeto območje definira privzeto konfiguracijo za vsa območja, razen če ga izrecno preglasi ena od drugih regij.
  • Sledi seznam vnaprej določenih (torej uporabniško določenih) regij predpomnilnika, ki v tem primeru vključuje musicCache ki ga bom uporabil v naslednjem primeru.
  • Določite pomožne predpomnilnike pomožni ki jih lahko priključite na območje predpomnilnika. Čeprav mora imeti vsako področje predpomnilnika enega (in samo enega) pomožnega pomnilnika, ima lahko poljubno število drugih pomožnih naprav, ki lahko hranijo predpomnjene podatke. V tem primeru ustvarim indeksiran predpomnilnik diska, vendar ga lahko tudi določite bočna in na daljavo pomožni. Stranski pomožni sistem lahko preko predpomnilnika preko TCP vtičnice ali sklada protokolov JGroups podvoji vaše predpomnjene podatke. Oddaljeni pomožni sistem lahko preko RMI (Remote Method Invocation) replicira podatke v druge predpomnilnike.

Vsaka regija lahko določi atributi predpomnilnika tako dobro, kot atributi elementov. Atribut predpomnilnika opredeli konfiguracijsko možnost za predpomnilnik, medtem ko atribut elementa definira možnost konfiguracije za elemente v predpomnilniku. Tu je povzetek možnosti atributov predpomnilnika:

  • MaxObjects: To je največje dovoljeno število predmetov v pomnilniku.
  • MemoryCacheName: Ta lastnost vam omogoča, da določite upravitelja pomnilnika, ki bo uporabljen kot vaš MemoryCache. Privzeti upravitelj pomnilnika izvaja strategijo LRU.
  • UseMemoryShrinker: Ta možnost omogoča JCS, da periodično pregleduje predpomnilnik in išče predmete, ki jih je mogoče odstraniti (predmeti, ki so potekli ali so presegli svoj največji čas mirovanja). Privzeta vrednost je napačno.
  • MaxMemoryIdleTimeSeconds: Če je pomnilnik skrčen, ta lastnost pove JCS-u, kako dolgo lahko objekt ostane v prostem teku, preden ga skrči (in ga preskrbi na disk, če je bil ustvarjen indeksiran predpomnilnik diska). Privzeta vrednost je -1, ki onemogoči to možnost.
  • ShrinkerIntervalSeconds: Če je pomnilnik skrčen, je ta lastnost JCS-ju sporočila, kako pogosto naj zažene skrčilec. Privzeta vrednost je 60 sekund.
  • DiskUsagePattern: Če je omogočen predpomnilnik diska, ta lastnost JCS-ju pove, kako ohraniti podatke, ko je predpomnilnik poln. Privzeta vrednost je SWAP, ki predmete na disku zamenja samo, ko je predpomnilnik poln. Druga možnost je NADGRADNJA, ki ohrani vse podatke na disku, vendar šele, ko se podatki posodobijo. Če je pomožni pripomoček JDBC opredeljen kot predpomnilnik diska, ostanejo vsi predmeti v pomnilniku (dokler se pomnilnik ne napolni) in se hranijo tudi v zbirki podatkov, kar zagotavlja dobro zmogljivost in zanesljivost.

Tu so še možnosti atributov elementov:

  • IsEternal: Če je element večen, ga ni mogoče odstraniti iz predpomnilnika, ker presega njegovo največjo življenjsko dobo. Ta možnost je privzeto nastavljena na prav.
  • MaxLifeSeconds: Če elementi niso večni, ta možnost določi najdaljšo življenjsko dobo vsakega predmeta, preden je odstranjen. Če pomnilnik deluje, pomnilnik odstrani predmete; v nasprotnem primeru se ob dostopu odstranijo. Ta možnost je privzeto nastavljena na -1, ki onemogoči možnost.
  • IsSpool: Ta možnost določa, ali je element mogoče preslikati na disk ali ne. Privzeto je prav.
  • IsLateral: Ta možnost določa, ali je mogoče element poslati v stranski predpomnilnik. Privzeto je prav.
  • IsRemote: Ta možnost določa, ali je mogoče element poslati v oddaljeni predpomnilnik. Privzete vrednosti prav.

Na seznamu 1 sem ustvaril regijo z imenom musicCache ki vsebuje do 1000 predmetov v spominu. Njegov upravitelj pomnilnika uporablja algoritem LRU: ko je predpomnilnik poln in mora JCS narediti prostor za nove predmete, bo odstranil predmete, ki niso bili nedavno dostopni. Omogočen je pomnilnik pomnilnika, ki se bo zagnal vsakih 60 sekund. Izselil bo predmete, ki v prostem teku sedijo več kot 60 minut (3.600 sekund). Predmeti niso večni in jih je mogoče zapisati na disk, stranski predpomnilnik ali oddaljeni predpomnilnik.

Upoštevajte, da IsSpool, IsLateral, in IsRemote nastavitve so podedovane po privzetih nastavitvah. Zaradi jcs.region.musicCache element je nastavljen na DC, je opredeljen ne samo za vzdrževanje predpomnilnika v pomnilniku, temveč tudi za uporabo indeksiranega predpomnilnika diska kot pomožnega. (Lastnost lahko nastavite na seznam več pomožnih naprav, ločenih z vejicami.) Predpomnilnik diska je konfiguriran za shranjevanje elementov v c: / temp imenik. (JCS ima raje poševnice naprej kot poševnice nazaj.) Preostali atributi konfigurirajo predpomnilnik diska z IndexedDiskCacheAttribute predmet; o teh atributih lahko preberete v JCS Javadoc.

Izdelava vzorčne aplikacije za predpomnjenje

Ko enkrat razumete, kako konfigurirati JCS, je izdelava aplikacije za predpomnjenje preprosta. Aplikacija mora biti sposobna:

  • Inicializirajte predpomnilnik iz njegove konfiguracijske datoteke
  • Dostop do regije v predpomnilniku
  • Naloži predmete v predpomnilnik
  • Pridobi predmete iz predpomnilnika
  • Odstranite predmete iz predpomnilnika

Predpomnilnik je mogoče inicializirati samodejno ali ročno. Če poimenujete svojo konfiguracijsko datoteko cache.ccf in ga postavite neposredno v svoj ZAPRTI (na primer korenski imenik za gradnjo), nato prvič pokliče JCS, da najde datoteko in se ustrezno inicializira. Če želite svojo konfiguracijsko datoteko shraniti drugje ali jo poimenovati drugače, lahko uporabite org.apache.jcs.utils.props.PropertyLoader's loadProperties () za nalaganje lastnosti JCS iz katere koli datoteke z lastnostmi.

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