Przejdź do głównej zawartości

Ehcache - topologie cache - replikacja i redystrybucja danych buforowych.

EHCACHE - TOPOLOGIE CACHE

Ehcache może być używany w następujących topologiach :

  • Samodzielna pojedyncza instancja (ang. standalone) - Buforowane dane przechowywane są w węźle aplikacyjnym. Wszystkie inne instancję aplikacyjne działają niezależnie i nie są ze sobą powiązane. Jeżeli w środowisku istnieje wiele instancji, na których działa ta sama aplikacja nie będziemy mieli w tym przypadku jednolitego buforowania pomiędzy nimi.  

  • Buforowanie rozproszone (ang. Distributed Ehcache) - Dane przechowywane są w tablicy serwera Terracotta. Dane podzielone są na podzbiory ostatnio używanych danych na każdej instancji serwera. Buforowanie rozproszone obsługuje bardzo bogaty zestaw trybów zgodności. 

  • Replikacja bufora (ang. replicated) - Dane bufora przechowywane są w każdej instancji aplikacji oraz  dane te są rozdystrybuowane pomiędzy instancjami bez blokowania ich. Dystrybucja danych bufora może się odbywać synchronicznie lub asynchronicznie. Konsekwencją stosowania tej topologii może być mała spójność.  

Dużo aplikacji znajdujących się w środowiskach produkcyjnych osadzona jest zazwyczaj na klastrach oraz wielu instancjach jednocześnie zapewniając tym samych lepszą wydajność i skalowalność. Jeżeli jednak nie zapewnimy dobrej dystrybucji mającej na celu synchronizację bufora aplikacje mogą wykazywać nieporządane reakcję takie jak : 

  • Drift cache - Każda instancja aplikacji otrzymuję własny niezależny bufor danych. Aktualizacja jaka pojawi się na jednej z instancji nie będzie dostępna dla innej. Efekt ten wystąpi również dla danych sesji internetowych.  Dystrybucja danych pomiędzy instancjami zapewnia spójne jednolite działanie bez występowanie powyższych trudności. 

  • Baza danych jako "wąskie gardło" - Pojedyncze wystąpienie danych aplikacji w buforze skutecznie chroni bazę danych przed natłokiem zbędnych zapytań i konieczności ich wykonywania z poziomu samej bazy. Jednak w środowisku rozproszonym gdy występowanie danych aplikacji znajduje się na każdej instancji i do tego konieczne jest zapewnienie należytej synchronizacji może wywoływać pewne obciążenie. Koszt zapisu i odczytu informacji jakie muszą być odświeżone i zsynchronizowane dla każdej instancji z bazy danych prowadzi do wystąpienia wąskiego gardła szczególnie w przypadku gdy dodawane są nowe instancję serwera powielające aplikację. Replikacja i redystrybucja danych bufora eliminuje występowanie tego problemu. Poniżej omówienie kilku sposobów replikacji danych buforowych. 

DYSTRYBUCJA DANYCH BUFOROWYCH

Ehcache zapewnia dystrybucję danych buforowych za pomocą tablicy serwera Terracotta, umożliwiając wymianę danych pomiędzy wieloma "cacheMenager'ami" zawierającym również informacje dotyczące JVM. Łącząc moc jaką daję użycie tablicy serwera Terracotta z łatwym do zastosowania buforem danych Ehcache można osiągnąć  : 
  • liniowe skalowanie aplikacji wraz ze wzrostem wymagań
  • wykorzystanie danych, które są spójne dla całego klastra i wszystkich instancji 
  • zmniejszenie obciążenie baz danych eliminując zbędne zapytania 
  • zwiększenie wydajność aplikacji poprzez wykorzystanie spójnych danych znajdujących się w pamięci  
  • dostęp do zaawansowanego API dającego większe możliwości

Zastosowanie buforowania rozproszonego jest opcją zalecaną przez twórców Ehcache do stosowania w środowiskach klastrowych i wielo-węzłowych. Zapewnia najwyższy poziom dostępności , wydajności i skalowalności. 

Uruchomienie rozproszonego buforowania Ehcache wymaga jedynie skonfigurowania dwóch linii kodu. Temat ten zostanie omówiony w innym poście. Po którego napisaniu w tym miejscu pojawi się link do niego prowadzący ;-) 

REPLIKACJA DANYCH BUFOROWYCH 

Poza tworzeniem buforowania rozproszonego w Ehcache istnieje możliwość rozszerzenia jego możliwości przy użyciu dodatkowej wtyczki o funkcje replikacji pamięci podręcznej. Rozszerzenie wprowadza następujące dodatkowe elementy jakie mogą zostać zreplikowane: 

  • RMI
  • JGroups
  • JMS
  • Cache serwera

Każda z nich stanowi odrębny rozdział. Jednym z rozwiązań jest replikowanie danych z zachowaniem ich pełnej spójności. Typowe operacje obejmują:

  • Umieszczenie danych w buforze 
  • Aktualizacja (umieszczenie z zastąpieniem danych)
  • Usuwanie 

Aktualizacja obejmuję aktualizację z kopiowaniem oraz aktualizację z unieważnieniem. W drugim kroku wysyłana zostaje wiadomość o usunięcie danych do całego klastra pamięci podręcznej co skutkuje zachowaniem spójności danych. Jest też mniej kosztowna opcja niż kopiowanie. 


UŻYWANIE SERWERA CACHE

Wersja Ehcache 1.5 wspiera działanie serwera Ehcache. W celu pobrania danych do bufora wszystkie JVM  wszystkie dane są zaczytywane i zapisywane do serwera cache, a następnie udostępniane są w jego własnej JVM. W celu zapewnienia redundancji możliwe jest skonfigurowanie własnego klastra wewnątrz serwera Ehcache. Technologia ta została rozwinięta w wersji Ehcache 1.6


STRATEGIE PRACY Z BUFOREM DANYCH

Wybór najlepszej drogi dotyczącej informowania serwera o zaczytaniu danych lub ich aktualizacji zależny jest od rodzaju serwera buforującego. Jeżeli dany element jest dostępny tylko w jednej z instancji serwera powinno zostać rozgłoszone powiadomienie do innych instancji z informacją o istnieniu nowego elementu. Przykładem jest pamięć podręczna zastosowana w przypadku strony internetowej. Taka strategia powiadamiania nazwana została kopiowaniem. Jeżeli dane pamięci podręcznej są dostępne z bazy danych mamy dwie możliwości. Może nastąpić operacja kopiowania lub unieważnienia danych. Po unieważnieniu danych aplikacja znajdująca się na innej instancji zostanie zmuszona do ich odświeżenia z bazy danych co jednocześnie zapewni spójność danych. Jedynym kluczowym elementem, który musi bezwarunkowo sprawnie działać jest sieć. Ehcache umożliwia powiadamianie pomiędzy instancjami poprzez kopiowanie oraz unieważnianie zależnie od cache. 


Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości