Programování

Open source Java projects: Java Caching System

Specialista na podnikovou Javu Steve Haines se tento měsíc připojil k sérii projektů s otevřeným zdrojovým kódem Java zavedením Java Caching System (JCS), robustního řešení pro ukládání do mezipaměti na podnikové úrovni. Steve začíná krátkým úvodem do ukládání do mezipaměti, diskutuje o kritériích pro určení, zda by se objekty měly ukládat do mezipaměti, a zda by vaší aplikaci prospěla mezipaměť. Poté vám ukáže, jak nakonfigurovat JCS a použít jej k vytvoření aplikace pro ukládání do mezipaměti.

Systém Java Caching System (JCS) je robustní produkt pro ukládání do mezipaměti s otevřeným zdrojovým kódem, který byl uvolněn prostřednictvím dílčího projektu Apache Jakarta. Poskytuje standardní funkce, které byste očekávali od systému mezipaměti, jako je ukládání do mezipaměti v paměti a algoritmy pro selektivní odebírání objektů z mezipaměti. Nabízí také pokročilejší funkce, jako je ukládání indexovaných disků do mezipaměti a podpora distribuovaných mezipamětí.

Mezipaměť JCS má strukturu podobnou mapě, ve které jsou data uložena v mezipaměti jako dvojice název-hodnota. JCS rozděluje mezipaměť do regionech. Každá oblast má vlastní konfiguraci i vlastní sadu párů název-hodnota. Každý region může:

  • Mějte jinou velikost
  • Být implementován jinak
  • Obsahují různá data

The klíče (názvy v párech název-hodnota) v jedné oblasti mohou být stejné jako klíče v jiných oblastech. To je důležité, protože vám umožňuje udržovat samostatné mezipaměti pro různé objekty, všechny v rámci stejného JVM - a všechny jsou definovány v jediném souboru vlastností.

Licence open source

Každý z open source projektů Java zahrnutých v této sérii podléhá licenci, které byste měli pochopit před integrací projektu s vlastními projekty. Na společnost JCS se vztahuje licence Apache; Další informace najdete v části Zdroje.

Tento článek zkoumá JCS tak, že vám nejprve ukáže, jak získat a nainstalovat aktuální verzi. Poté vysvětlím, co je to mezipaměť, proč ji můžete použít a zda se jedná o správné řešení pro konkrétní aplikaci. Dále se ponoříte do souboru vlastností JCS, což je nejlepší cesta k porozumění JCS. Nakonec vytvoříte ukázkovou aplikaci pro ukládání do mezipaměti, která používá JCS.

Začněte s JCS

JCS si můžete stáhnout ze stránky pro stahování na webu projektu JCS. V době psaní tohoto článku je nejnovější verze 1.3. Stáhněte si binární distribuci (buď jako soubor TAR v systémech Unix nebo soubor ZIP ve Windows) a dekomprimujte ji do místního adresáře ve vašem počítači.

Kořenový adresář instalačního adresáře obsahuje jcs-1.3.jar, které musíte přidat do svého CLASSPATH před kompilací a spuštěním aplikací JCS.

Třída dokumentace zlatý důl

V celém tomto článku, stejně jako ve svých vlastních nezávislých studiích, zjistíte, že JCS dokumenty adresář je neocenitelným zdrojem informací o JCS, včetně dokumentace API. Robustní dokument Javadoc je vaší autoritou pro pochopení toho, jak používat třídy JCS.

Budete potřebovat dvě závislosti:

  • Commons protokolování
  • Souběžně

Z Commons Logging přidejte commons-logging.jar tvému CLASSPATH.

Rychlý základní nátěr

Mezipaměť je navržena tak, aby uchovávala objekty, obvykle v paměti, pro okamžitý přístup k aplikaci. Aplikace interaguje odlišně s mezipamětí od způsobu, jakým interaguje s externími řešeními úložiště. Aplikace obvykle získá připojení k databázi, provede dotaz v síti a analyzuje výsledky, jakmile jsou vráceny. Mezipaměť udržuje sbírku snadno dostupných objektů v robustní struktuře podobné mapě, která nevyžaduje síťové volání. Výkon aplikací Enterprise Java se exponenciálně zlepšuje, když přistupuje k opakovaně použitelným objektům v mezipaměti po jejich načtení z databáze, namísto vzdáleného volání databáze.

Pokud má vaše aplikace zvládnutelný počet objektů, ke kterým se často přistupuje, může mezipaměť pravděpodobně zlepšit její výkon. Java aplikace jsou omezeny dostupnými prostředky v JVM, z nichž nejcennější je paměť. Nemá smysl odnést paměť z JVM k držení objektů, které jsou zřídka přístupné. Pravděpodobně je lepší načíst objekt, ke kterému se přistupuje jednou za několik hodin, jak je potřeba, a ponechat dostatek volné paměti pro další zdroje. Na druhou stranu je lepší načíst objekty, ke kterým se přistupuje několikrát za minutu - nebo dokonce několikrát za hodinu - do mezipaměti a obsluhovat je z paměti, namísto vzdáleného volání pokaždé, když je objekt potřeba. Pokud je počet objektů, ke kterým vaše aplikace často přistupuje, spravovatelný v dostupné paměti, pak je to dobrý kandidát na ukládání do mezipaměti. Ale pokud to přistupuje miliony objektů často, pak může být v nejlepším zájmu aplikace načíst objekty podle potřeby, namísto použití 75 procent haldy JVM k hostování mezipaměti.

Ukládání do mezipaměti versus sdružování

V diskusích o ukládání do mezipaměti se často objevuje zmatek ohledně rozdílu mezi mezipamětí a fondem. Které objekty by se měly ukládat do mezipaměti a jaké objekty by se měly sdružovat? Odpověď spočívá v povaze samotných předmětů. Pokud objekt udržuje stav, měl by být uložen do mezipaměti. Bezstavové objekty by měly být sdruženy. Jako analogii zvažte dvě činnosti: nákup potravin v supermarketu a vyzvednutí dítěte ze školy. Každý pokladník si může v supermarketu vyzkoušet libovolného zákazníka; nezáleží na tom, který pokladník získáte, proto by se měli pokladníci spojit. Když vyzvednete své dítě ze školy, chcete vaše dítě, ne někdo jiný, proto by děti měly být ukládány do mezipaměti.

Při extrapolaci této myšlenky na podnikovou Javu by se měly shromažďovat prostředky, jako jsou připojení k databázi a fazole pro podnikové zpracování, zatímco objekty, jako jsou zaměstnanci, dokumenty a widgety, by se měly ukládat do mezipaměti. Nezáleží na tom, jaké připojení k databázi vaše aplikace získá z fondu připojení - všichni dělají totéž - ale pokud si chcete dát zvýšení platu, je důležité, abyste získali vaše objekt zaměstnance.

Porozumění regionům JCS

Používání JCS je ve skutečnosti docela jednoduché, ale potřebujete základní znalosti o tom, jak JCS definuje oblasti mezipaměti a jak je lze konfigurovat. Soubor vlastností JCS je logickým místem, kde můžete začít rozumět JCS. Výpis 1 zobrazuje ukázkový soubor vlastností JCS.

Výpis 1. Soubor vlastností JCS (cache.ccf)

# DEFAULT CACHE REGION jcs.default = DC jcs.default.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects = 1000 jcs.default.cacheattributes.MemoryCacheName = org.apache.jcs.engine.memory.memory .lru.LRUMemoryCache jcs.default.cacheattributy.UseMemoryShrinker = true jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds = 3600 jcs.default.cacheattributes.ShrinkerIntervalSeconds = 60 jcs.default.aplikace.cement.ache.cement.ache.lement.ache.lement.jase.cement.ache.cement. 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.elementattributes.IsLateral = true # PREDEFINOVANÉ REGIONY CACHE jcs.region.musicCache = DC jcs.region.musicCache.cacheattributes = org.apache.jcs.engine.CompositeCacheAttributes jcs.region.musicCache.cacheattributy.MaxObjects = 1000 jcs.region.musicCache.cacheattcacheatcams.cacheattcamseat ame = org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.region.musicCache.cacheattributy.UseMemoryShrinker = true jcs.region.musicCache.cacheattributy.MaxMemoryIdleTimeSeconds = 3600 jcs.region.musicCache.caterSeatIntegrate.musicCache.casseatr = region.musicCache.cacheattributes.MaxSpoolPerRun = 500 jcs.region.musicCache.elementattributes = org.apache.jcs.engine.ElementAttributes jcs.region.musicCache.elementattributes.IsEternal = false # DOSTUPNÉ POMOCNÉ CACHES jcs.auxiliary.DC = org .jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory jcs.auxiliary.DC.attributes = org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes jcs.auxiliary.DC.attributes.DiskPath = c: / temp jcs.auxiliary.DC .attributes.MaxPurgatorySize = 10 000 000 jcs.auxiliary.DC.attributes.MaxKeySize = 10 000 000 jcs.auxiliary.DC.attributes.MaxRecycleBinSize = 5 000 jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount = 300 000 jcs.auxiliary.DC.attributy = 60

Výpis 1 obsahuje tři části:

  • Výchozí oblast definuje výchozí konfiguraci pro všechny oblasti, pokud není explicitně přepsána jednou z ostatních oblastí.
  • Dále je uveden seznam předdefinovaných (tj. Uživatelem definovaných) oblastí mezipaměti, které v tomto případě zahrnují musicCache které použiji v nadcházejícím příkladu.
  • Definují pomocné mezipaměti pomocné látky které lze zapojit do oblasti mezipaměti. Ačkoli každá oblast mezipaměti musí mít jednu (a pouze jednu) pomocnou paměť, může mít libovolný počet dalších pomocných zařízení, která mohou obsahovat data v mezipaměti. V tomto příkladu vytvořím indexovanou mezipaměť disku, ale můžete také definovat postranní a dálkový pomocné látky. Postranní pomocník může replikovat vaše data v mezipaměti do jiných mezipamětí prostřednictvím soketu TCP nebo zásobníku protokolu JGroups. Vzdálený pomocník může replikovat data do jiných mezipamětí pomocí Remote Method Invocation (RMI).

Každý region může definovat atributy mezipaměti jakož i atributy prvků. Atribut mezipaměti definuje možnost konfigurace pro mezipaměť, zatímco atribut prvku definuje možnost konfigurace pro prvky v mezipaměti. Zde je souhrn možností atributů mezipaměti:

  • MaxObjects: Toto je maximální počet objektů povolených v paměti.
  • MemoryCacheName: Tato vlastnost umožňuje definovat správce paměti, který se má použít jako váš MemoryCache. Výchozí správce paměti implementuje strategii LRU.
  • UseMemoryShrinker: Tato možnost umožňuje JCS periodicky iterovat přes mezipaměť a hledat objekty, které lze odebrat (položky, jejichž platnost vypršela nebo překročily maximální dobu nečinnosti paměti). Výchozí hodnota je Nepravdivé.
  • MaxMemoryIdleTimeSeconds: Pokud je povolen zmenšovač paměti, tato vlastnost říká JCS, jak dlouho může objekt zůstat nečinný, než jej zmenšovač odstraní (a zařadí jej na disk, pokud byla vytvořena indexovaná mezipaměť disku). Výchozí hodnota je -1, což tuto možnost zakáže.
  • ShrinkerIntervalSeconds: Pokud je povolen zmenšovač paměti, tato vlastnost řekne JCS, jak často se zmenšovač spouští. Výchozí hodnota je 60 sekund.
  • DiskUsagePattern: Pokud je povolena disková mezipaměť, tato vlastnost říká JCS, jak přetrvávat data, když je mezipaměť paměti plná. Výchozí hodnota je SWAP, který zařazuje položky na disk, pouze když je mezipaměť paměti plná. Druhou možností je AKTUALIZACE, který přetrvává všechna data na disk, ale pouze při aktualizaci dat. Pokud byl pomocný program JDBC definován jako disková mezipaměť, všechny objekty zůstanou v paměti (dokud není paměť plná) a jsou také uchovány do databáze, která zajišťuje dobrý výkon i spolehlivost.

A tady jsou možnosti atributu prvku:

  • Je věčný: Pokud je prvek věčný, nelze jej z mezipaměti odebrat, protože překračuje maximální životnost. Tato možnost je výchozí skutečný.
  • MaxLifeSeconds: Pokud prvky nejsou věčné, tato možnost definuje maximální životnost každého objektu před jeho odstraněním. Pokud je zmenšovač paměti spuštěn, objekty jsou zmenšovačem odstraněny; pokud ne, jsou při přístupu odstraněny. Tato možnost je výchozí -1, která tuto možnost zakáže.
  • IsSpool: Tato možnost definuje, zda lze prvek zařadit na disk. Výchozí hodnota je skutečný.
  • IsLateral: Tato možnost definuje, zda lze prvek odeslat do boční mezipaměti. Výchozí hodnota je skutečný.
  • IsRemote: Tato možnost definuje, zda lze prvek odeslat do vzdálené mezipaměti. Výchozí nastavení pro skutečný.

V seznamu 1 jsem vytvořil oblast s názvem musicCache který pojme až 1 000 položek v paměti. Jeho správce paměti používá algoritmus LRU: když je mezipaměť plná a JCS potřebuje uvolnit místo pro nové položky, odstraní položky, které nebyly nedávno zpřístupněny. Má povolený zmenšovač paměti a zmenšovač se spustí každých 60 sekund. Bude vyřazovat položky, které zůstanou nečinné déle než 60 minut (3 600 sekund.) Jeho položky nejsou věčné a lze je zapsat na disk, do boční mezipaměti nebo do vzdálené mezipaměti.

Všimněte si, že IsSpool, IsLateral, a IsRemote nastavení se dědí z výchozího nastavení. Protože jcs.region.musicCache prvek je nastaven na DC, je definováno nejen udržovat mezipaměť v paměti, ale také používat indexovanou mezipaměť disku jako pomocnou. (Vlastnost lze nastavit na seznam více pomocných zařízení oddělených čárkami.) Mezipaměť disku je nakonfigurována pro ukládání položek do c: / tepl adresář. (JCS dává přednost lomítkům před zpětnými lomítky.) Zbývající atributy konfigurují mezipaměť disku pomocí IndexedDiskCacheAttribute objekt; o těchto atributech si můžete přečíst v JCS Javadoc.

Vytváření ukázkové aplikace pro ukládání do mezipaměti

Jakmile pochopíte, jak konfigurovat JCS, je vytvoření aplikace pro ukládání do mezipaměti jednoduché. Aplikace musí být schopna:

  • Inicializujte mezipaměť ze svého konfiguračního souboru
  • Přístup k oblasti v mezipaměti
  • Načtěte objekty do mezipaměti
  • Načíst objekty z mezipaměti
  • Odeberte objekty z mezipaměti

Mezipaměť lze inicializovat automaticky nebo ručně. Pokud pojmenujete svůj konfigurační soubor cache.ccf a vložte jej přímo do svého CLASSPATH (například váš kořenový adresář pro sestavení), pak při prvním vyvolání JCS najde soubor a odpovídajícím způsobem se inicializuje. Pokud potřebujete uložit konfigurační soubor jinde nebo jej pojmenovat jinak, můžete použít org.apache.jcs.utils.props.PropertyLoader's loadProperties () metoda načtení vlastností JCS z libovolného souboru vlastností.

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