Przejdź do głównej zawartości

Terracotta - Big Memmory


Trochę teorii - Maksymalne wykorzystanie pamięci i szybkość aplikacji z BigMemmory.

BigMemmory umożliwia aplikacjom tworzonym w języku Java natychmiastowy i łatwy dostęp do dużych ilości pamięci nie ograniczając się przy tym działaniem dotyczącym usuwania śmieci, które standardowo wykonuje "garbage collector". BigMemmory jest kompatybilny ze starszym sprzętem oraz wszystkimi popularnymi virtualnymi maszynami java (JVM's) takimi jak JDK (Java Development Kit), JRockit, IBM, oraz HotSpot.

Narzędzie jakim jest BigMemmory oparte jest o rozwiązanie open-source Ehcache, a swoim działaniem rozszerza jego możliwości. Podłączenie do ehcache polega na wprowadzeniu kilku prostych zmian w konfiguracji.

Zastosowanie BigMemmory umożliwia utworzenie bardzo dużego buforu (cache). Bufor ten pomimo dużego rozmiaru jest buforem innego typu w porównaniu ze standardowym (object heap) i przechowywany jest w pamięci poza standardową stertą, przez co nie podlega procesowi odśmiecania przez garbage collector. Efektem takiego podejścia jest 100 krotne przyspieszenie w porównaniu do cachu przechowywanego na dysku oraz możliwość tworzenia bardzo dużych pamięci podręcznych. Tak naprawdę jedynym ograniczeniem jest ilość pamięci RAM w danym sprzęcie. Wykorzystując BigMemmory można efektywniej wykorzystywać dostępną pamięć i pozbyć się niedogodności i opóźniań związanych z odśmiecaniem przez garbage collector.

W jaki sposób to pomaga?

Ogólnie rzecz biorąc chodzi o oszczędzanie czasu jaki potrzebny jest na działania odśmiecające czyli garbage collector. W momencie odśmiecania mogą występować nieprzewidywalne przerwy w działaniu aplikacji, które stają się dłuższe i występują częściej w momencie wykorzystywania stosu (heap used). W BigMemmory w cachu'u umieszczonym poza stertą możliwy staje się dostęp do dużych ilości danych, a to wszystko zamyka się w jednym JVM oraz wszystko dzieje się poza obszarem objętym przez garbage collector bez żadnych przerw na odśmiecanie.

Podsumowując dzięki temu rozwiązaniu można :

  • Maksymalnie wykorzystać pamięć dostępną na urządzeniu
  • Poprawić szybkość działania i szybkość odpowiedzi aplikacji
  • Wyeliminować czas potrzebny na konfigurowanie GC i inne nieefektowne rozwiązania
  • Podnieść wydajność przetwarzania cięgle rosnącej ilości danych

Wyeliminowanie skomplikowanego i wyczerpującego konfigurowania GC.

By faktycznie odczuć poprawę wydajności aplikacji poprzez prawidłowe skonfigurowanie działają GC trzeba włożyć w to dużo pracy, czasu i testów by dojść lub nie do choć minimalnych wyników. Niejednokrotnie administratorzy spędzają długie godziny nad strojeniem GC tylko po to by po tym czasie cofnąć wszystkie wprowadzone zmiany i zacząć od nowa. Stosując BigMemmory czasochłonne konfigurowanie GC odchodzi w niepamięć. W rzeczywistości okazało się że wystarczyły 3 godziny na skonfigurowanie BigMemmory by osiągnąć rezultaty wydajnościowe jakie wymagały ponad trzymiesięcznych konfiguracji i testów istniejących środowisk w których standardowo działał GC.

Zaleceniem w zastosowaniu BigMemmory jest unikanie działania GC, który potrafi "przytkać, zamrozić" działanie aplikacji niezależnie od rozmiaru pamięci podręcznej (Cache Size). Użycie BigMemmory działa prewencyjnie przeciw spadkom wydajności i wstrzymaniem działania aplikacji spowodowanych przez działanie GC. Dla potwierdzenia przeprowadzono testy wydajnościowe gdzie pracując na dostępnej pamięci podręcznej skutkowały coraz dłuższymi pałazami wynikającymi  z działania GC, a wraz ze wzrostem rozmiaru bufora aż do maxymalnej wartość GC praca aplikacji została "zamrożona" na czas liczony w minutach.

Zmniejszenie kosztów i złożoności wdrożenia.

W wielu systemach stosuję się politykę przydzielania od 1 do 4 GB pamięci przeznaczonych na jeden JVM na danej maszynie co ma zminimalizować trudności związane z niewyrabianiem się Garbage Collect'ora. Tego rodzaju polityka z czasem utrudnia zarządzanie i robi się kosztowne w skali przedsięwzięcia.

Stosując BigMemmory zwiększamy gęstość uruchamiania aplikacji wykorzystując mniejszą ilość (ale o większych rozmiarach) pamięci przeznaczonych dla pojedynczego JVM co skutkuje oszczędnością czasu. Tego rodzaju rozwiązanie zapewni bardziej zrównoważone i wydajniejsze działanie zakładając również, że ilość danych jakie będą do przerobienia i tak nieuchronnie wzrośnie.

Przydatne informacje :

http://terracotta.org/products/bigmemory



http://www.infoq.com/news/2010/09/bigmemory

http://adtmag.com/articles/2011/09/28/terracotta-beta-released.aspx

http://drdobbs.com/blogs/jvm/228700760


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