Cuma, Eylül 08, 2006

Java Caching Solutions

Bildiğiniz gibi çok bazı projelerde zaman içinde uygulamanın işlemesi gereken data çok miktarda artabiliyor. Data miktarı arttıkça veritabanında çalışan sql'lerin performansı ve/veya uygulama sunucusu ile veritabanı arasındaki trafik ciddi derecede düşebiliyor. Veritabanında yapılabilecek performans arttırıcı önlemler (hardware upgrade, data shrinking, vs.) uygulama katmanındaki kadar kolay ve rahat olamıyor.

Bu yüzden son yıllarda Second Level Caching uygulamalarda çok kullanılan ve aranılan bir özellik olmaya başladı. Bu yüzden Hibernate gibi populer O/R Mapping araçları Second Level Caching'i default olarak destekliyor. Eğer zaten Hibernate kullanıyorsanız sadece düşünmeniz gereken Hibernate'in altında hangi Cache implemantasyonunu kullanacağınıza karar vermeniz. Hibernate bu konuda oldukça esnek.

Eğer Hibernate kullanmıyorsanız dahi mevcut POJO aracınıza kendiniz de bir Second Level Cache tool'u entegre edebilirsiniz. Bu konuda en yaygın kullanılan 4 Cache Tool'u mevcut.

1) JBossCache : Cache araçları içindeki en yetenekli olanı. En önemli özelliği cluster (senkron/asenkron) desteğinin olması ve transactional çalışması. Cluster nodları arasındaki iletişim için JGroups kullandığı için oldukça performanslı. Cache datası konfigürasyonunuza göre memory'de veya disk'te saklanabiliyor. Uygulamanız cluster bir mimari üzerinde ise ve transaction bütünlüğü çok önemliyse JBossCache'ten şaşmayın. JBoss Application Server altyapısında da kullanıldığı için güvenilirliği oldukça yüksek.

2) EHCache : Cache araçları içerisindeki en hızlı ve en kolay uygulanabilir olanı. EHCache'in de memory ve disk tabanlı caching desteği mevcut. EHCache bir çok open-source ve lisanlı uygulama tarafından kullanılmakta. EHCache'in de cluster desteği mevcut.

3) OSCache : Quartz, Webwork(Strus ile birleşti yakın zamanda), XWork, SiteMesh, OSWorkflow gibi meşhur open-source toolları geliştiren www.opensyphony.com topluluğu tarafından geliştirildi. JBossCache kadar yetenekli olmasa da cluster (OSCache de JGroups kullanıyor) desteği mevcut. OSCache de gayet başarılı ve çok tutulan bir Cache çözümü.

4) SwarmCache : Basit, hızlı ama cluster desteği olan diğer güzel bir caching tool?u. SwarmCache de altyapısında JGroups kullanıyor.

Caching Strategies
  • Read-only: This strategy is useful for data that is read frequently but never updated. This is by far the simplest and best-performing cache strategy.
  • Read/write: Read/write caches may be appropriate if your data needs to be updated. They carry more overhead than read-only caches. In non-JTA environments, each transaction should be completed when Session.close() or Session.disconnect() is called.
  • Nonstrict read/write: This strategy does not guarantee that two transactions won't simultaneously modify the same data. Therefore, it may be most appropriate for data that is read often but only occasionally modified.
  • Transactional: This is a fully transactional cache that may be used only in a JTA environment.

Support for these strategies is not identical for every cache implementation. Table 1 shows the options available for the different cache implementations.

Cache

Read-only

Nonstrict Read/write

Read/write

Transactional

EHCache

Yes

Yes

Yes

No

OSCache

Yes

Yes

Yes

No

SwarmCache

Yes

Yes

No

No

JBoss TreeCache

Yes

No

No

Yes

http://www.devx.com/dbzone/Article/29685/

5 Yorum:

Blogger Uysal KARA dedi ki...

O makale biraz eski kalmış..

25 April 2006: ehcache-1.2 released.

After 10 months of development, ehcache-1.2 is released.

The 1.2 release of ehcache has many new features including:

* Flexible, extensible, high performance distributed caching. The default implementation supports cache discovery via multicast or manual configuration. Updates are delivered either asynchronously or synchronously via custom RMI connections. Additional discovery or delivery schemes can be plugged in by third parties.

11:24 ÖS  
Blogger Mustafa Tan dedi ki...

Teşekkürler Uysal, gerekli düzeltmeyi yaptım. Sen hangisini tercih ederdin ?

11:16 ÖÖ  
Blogger Uysal KARA dedi ki...

Bırakın bir tanesini seçmeyi,
Bu alandaki son gelişmelerle alternatifler artmaya başladı.

1- ehcache version=1.3
license=apache

2- jcs version=1.3 license=apache
ehcahce ve jcs aynı koddan türemiş. benzer özellikleri var..

3- oscache version=2.4 license=apache

4- jboss cache version=2.0 license=LGPL

5- terracotta
version=2.3 license=modified MPL

hepsi son bir ay içinde yeni sürüm çıkartmışlar, ya da çıkarmak üzereler.. Özellik bakımından hepsi birbirne yakınlaşmış.

Bir tek terracotta yeni open source olduğu için farklı bir şeyler var..

Hibernate için lisansı LGPL de dahil (1-2-3-4) kullanılabilir.

Ancak LGPL apache lisansına göre daha kısıtlayıcıdır. (Hibernate de LGPL)

Hiç bir apache projesi LGPL ürün dağıtamaz mesela, bu yüzden Apache Roller gibi projeler hibernate'i bırakıp openJPA gibi apache lisanslı ürünlere geçiyorlar.. (dağıtamadıkları için kullanıcıların parçaları ayrı ayrı indirmeleri gerekiyor, bu da kurulumu zorlaştırıyor)

GPL 3 lisansının çıkmasıyla işler daha da karışacak.. Patentler konusunda düzenlemeler getiriyor GPL 3, (SUN patentlerini open source bir ürüne karşı kullanmayacağını taahhüt etti)

OpenSolaris'i tam olarak serbest bırakması için SUN'in GPL 3'ün finalize olmasını beklediği söyleniyor.

İşte böyle tercihler teknik değil, politik yapılır oluyor.

ehcache ve oscache kullandım, spring modules kullanınca birinin yerini diğerini koymak problem değil, her ikisinden de memnun kaldım.

1:59 ÖÖ  
Anonymous Adsız dedi ki...

Bu konuda yazmis oldugum bir makale

http://www.kurumsaljava.com/2008/11/28/web-aplikasyonlarinda-yuksek-performans-icin-caching-mekanizmalari/

4:18 ÖS  
Anonymous para kazanmak istiyorum dedi ki...

Bloğunuz ve içerikleriniz harika...

9:59 ÖÖ  

Yorum Gönder

Kaydol: Kayıt Yorumları [Atom]

<< Ana Sayfa