Wydajne skalowanie aplikacji Java Enterprise

Transkrypt

Wydajne skalowanie aplikacji Java Enterprise
Wydajne skalowanie aplikacji
Java Enterprise
Warszawa, 21 listopad 2011
Skalowanie aplikacij JEE
www.worlditsystems.com
Cele prezentacji
•
•
•
•
Zwiększenie świadomości dotyczącej jakości
aplikacji
Łatwiejsze określenie potencjalnych problemów
z wydajnością/jakością
Możliwość przewidzenia problemów przed ich
wystąpieniem
Możliwość wykorzystania sprawdzonych
rozwiązań
Slajd 2
Skalowanie aplikacij JEE
www.worlditsystems.com
Agenda
•
•
•
•
•
•
•
Jak monitorować aplikację
Po co nam testy?
Domain Driven Development
Interakcja z klientem
Skalowanie komponentów aplikacyjnych
Cloud Computng i okolice
Rozwiązywanie problemów z aplikacja
Slajd 3
Skalowanie aplikacij JEE
Kiedy aplikacja działa
wolno?
Slajd 4
www.worlditsystems.com
Skalowanie aplikacij JEE
•
www.worlditsystems.com
2 metody, które (już nie) działają
–
–
•
Jak sobie radzić z
problemami z wydajnością
aplikacji?
BHW – Buy HardWare
BMHW – Buy More HardWare
Historia rozwoju CPU
–
–
–
CISC
Częstotliwość
Wielordzeniowość
Teraz trzeba pisać
lepsze aplikacje 
•
Slajd 5
Skalowanie aplikacij JEE
www.worlditsystems.com
Memory Wall
•
Problem przewidziany w połowie lat 90
–
•
Przyczyna
–
•
“Hitng the Memory Wall: Implicatons of the
Obvious” - Wm. A. Wolf, Sally A. McKey, Computer
Science Report No. CS-94-48, December 1994
Częstotliwość i moc procesorów rozwija się szybciej
niż przepustowość i latency pamięci
Efekt
–
–
„dobre lata 90” – aplikacja wykorzystuje ok. 50%
RAM
XXI wiek – aplikacja wykorzystuje ok. 10% RAM
Slajd 6
Skalowanie aplikacij JEE
www.worlditsystems.com
Testy, testy, testy…
•
Wymagania
niefunkcjonalne
dotyczące testów
–
Czas trwania: 180 min
•
–
–
Dodatkowo 60 minut na
warm-up
Liczba równoległych
użytkowników: 100
Średni czas odpowiedzi:
< 1 sek
Czas
odpowiedzi P ercentyl
0,1
6,94%
0,2
16,67%
0,3
27,78%
0,4
44,44%
0,5
58,33%
0,6
69,44%
0,7
77,78%
0,8
83,33%
0,9
87,50%
1
91,67%
1,1
94,44%
1,2
95,83%
1,3
97,22%
1,4
98,61%
1,5
99,83%
1,6
99,83%
1,7
99,83%
1,8
99,83%
1,9
99,83%
2
99,83%
Slajd 7
>2
100,00%
Skalowanie aplikacij JEE
www.worlditsystems.com
Co poszło nie tak?
•
Czasy odpowiedzi
–
Średnia – 0,75 sek
–
Mediana – 0,4 sek
Zachowanie systemu
•
Policzmy…
Czas odpowiedzi
1
120
•
–
–
Przez 60 minut, 100 wątków wykonywało
transakcję po 120 sekund
60/2*100  3000 transakcji
0
–
60
120
Czas
odpowiedzi
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2
>2
czas
180
Przez pierwsze 120 minut, 100 wątków
Slajd 8
L iczba
próbek
125000
175000
200000
300000
250000
200000
150000
100000
75000
75000
50000
25000
25000
25000
22000
0
0
0
0
0
3000
Skalowanie aplikacij JEE
www.worlditsystems.com
Test Driven Development
•
Ankieta…
–
–
Ilu z Was robi testy jednostkowe?
Jaki procent kodu pokryty jest testami
•
•
•
–
–
•
90%
75%
50%
Ilu z Was robi automatyczne testy GUI?
Ilu z Was używa ciągłej integracji?
Po co nam testy?
–
–
Umożliwiają wykrycie błędów
Umożliwiają weryfkację kontraktów API
Slajd 9
Skalowanie aplikacij JEE
•
O czym należy zapomnieć
–
–
–
•
Wstęp od Domain Driven
Architecture
www.worlditsystems.com
Projektowanie botom-up zaczynając od modelu
bazy danych
Umieszczanie logiki w oddzielnej warstwie (EJB)
Tworzenie prostych obiektów POJO
O czym należy jednak pamiętać
–
–
–
W końcu i tak użyjemy bazy danych
Wykorzystujmy jak najwięcej wzorców projektowych
Testy, testy, testy
Slajd 10
Skalowanie aplikacij JEE
www.worlditsystems.com
Domain Driven Design
API
–
–
•
SERVICES
EJB
SPRING
POJO
API
SEAM
Kod aplikacji
INTERFACES
SERVICES
Persystencja
–
–
•
Interfejsy obiektów
Interfejsy usług
Seam
Implementacja
–
•
GWT
Mapowania
Queries
„Spinacz”
–
Wystawia domenę na
DOMENA
•
GUI
JSF
Wicket
Repository
IMPLEMENTATION
Legacy
HERE BE DRAGONS
PERSISTENCE
Hibernate
JPA
Slajd 11
Skalowanie aplikacij JEE
•
Rekomendowane
–
–
–
–
–
–
•
Wzorce projektowe i
frameworki
Domain Object (DO)
Data Transfer Object (DTO)
DTO Assembler
Repository
Generic DAO
Command
Nierekomendowane
–
–
Anemic domain objects
Repettve DAO
Slajd 12
www.worlditsystems.com
Skalowanie aplikacij JEE
www.worlditsystems.com
Trochę przykładów
Domena 1
•
•
Jakie domeny można
wydzielić?
Mapowanie obiektów
–
–
•
Ile tabel zrobić?
Pliki XML czy anotacje?
Person
Domena 2
Company
Employee
Address
Room
City
Repozytoria
–
RoomRepository
•
•
–
getAllRooms(Company)
fndEmployeeRoom(Employee)
EmployeeRepository
•
Slajd 13
Skalowanie aplikacij JEE
www.worlditsystems.com
Duże projekty w DDD
•
Pamiętaj
–
–
–
–
•
GUI 1
GUI 2
SERWISY
Serwis 1
Serwis 2
DOMENY
Domena 1
Domena 2
Możliwość wymiany
Domena 3
Domena 4
Elementu domeny
Całej domeny
Domena 5
Domena 6
–
–
•
Odpowiednio podziel API
Wypracuj stabilne API na
początku projektu
Rób częste iteracje
Rób tyle testów ile się da
(trust no one  )
GUI
Slajd 14
Skalowanie aplikacij JEE
www.worlditsystems.com
Jak to wszystko podzielić?
•
Typowe problemy i
rozwiązania
–
Relacje dwukierunkowe
•
–
Zależności między obiektami
•
•
•
–
 Relacja jednokierunkowa i
repozytorium
 Używanie Mock’ów
 Enkapsulacja logiki
wewnątrz domeny
 Zaślepianie zależności
Transakcje pomiędzy
domenami
Slajd 15
Wpływ błędów w zależności
od warstwy
Skalowanie aplikacij JEE
•
www.worlditsystems.com
API
–
–
–
Bardzo bolesne i pracochłonne
Analogiczny problem jak zły projekt w modelu
wodospadowym
Jak minimalizować skutki
•
•
•
Upewnij się, że jest dobra komunikacja z klientem
Tworzyć testy jednostkowe w innych warstwach
Implementacja
–
–
Relatywnie łatwe do wykrycia i naprawienia
Jak minimalizować skutki
•
Testy, testy, testy
Slajd 16
Skalowanie aplikacij JEE
www.worlditsystems.com
Najsłabsze ogniwo… klient 
•
Wymagania zawsze będą się zmieniać
–
•
Pracuj z klientem na prototypach
–
–
•
Przeważnie można to przewidzieć
Wizualnych
Programistycznych
Rób częste iteracje (2-4 tygodnie)
–
–
–
Szybko odkryjesz nieścisłości
Wymusisz dostarczanie „deliverables”
Klient będzie miał wrażenie, że coś się dzieje
Slajd 17
Skalowanie aplikacij JEE
www.worlditsystems.com
Gdzie szukać problemów
Tuning,
monitoring i
konfguracja
Narzędzia do
optymalizacji
Przykładowe
Produkty
Aplikacji
Applicaton Performance
Monitoring
CA Wily,
dynaTrace,
JenniferSof
Framework
Serwera aplikacji
Infrastructure Monitoring
IBM Tivoli, HP
OpenView
SQL DML
Zapytań SQL,
indeksów
Database Performance
Monitoring
Quest
DBMS
SQL DDL, DCL
Serwera bazy
danych
Database Monitoring
Oracle Resource
Manager
System operacyjny
Procesy, zasoby
Systemu
operacyjnego
Real tme Optmizaton
MoreVRP
Sprzęt
Rozbudowa
sprzętu
Hardware Monitoring
HP SIM, IBM
Director
Architektura
rozwiązania
Infrastruktura
Aplikacja
Obiekty
Serwer aplikacyjny
DB
DB
CPU
DB
DB
I/O
Slajd 18
Skalowanie aplikacij JEE
www.worlditsystems.com
Jak rozwiązywać problemy
•
•
•
Testy wydajnościowe powinny zidentyfkować
ok. 75% problemów przed wdrożeniem
Dodanie warstwy cache powinno być możliwe
na każdym poziomie
Implementacja nie powinna zależeć od
technologii
Slajd 19
Skalowanie aplikacij JEE
www.worlditsystems.com
Cloud i Grid - defnicje
•
Compute Grid
–
•
Data Grid
–
•
Compute Grid + Data Grid
Cloud
–
•
Równoległy i rozproszony storage
Grid Computng
–
•
Równoległe i rozproszone przetwarzanie
Zestaw API dostarczający „pewną” funkcjonalność
Cloud Computng
–
Datacenter + API (Cloud)
Slajd 20
Skalowanie aplikacij JEE
•
Data Grid
–
–
•
Terracota (Sofware AG)
Oracle Coherence
Grid Computng
–
–
•
Grid Computng rozwiązania
GridGain
JBOSS Infnispan
Cloud Computng
–
–
–
Amazon EC2
Google AppEngine
Microsof Azure
Slajd 21
www.worlditsystems.com
Skalowanie aplikacij JEE
•
Amazon oferuje
–
–
–
–
–
–
•
Cloud na przykładzie
Amazon EC2
Infrastrukturę dla aplikacji
Bazy danych
Kolejki
Storage
Dedykowane obrazy
…. I wiele więcej
Możliwe wykorzystanie
–
–
Skalowane środowisko
produkcyjne
Simple
Queue
Service
(SQS)
www.worlditsystems.com
Simple DB
Elastc Compute Cloud
(EC2)
Simple
Storage
Service (S3)
Elastc Block
Store (EBS)
CloudFront
Slajd 22
Wykorzystanie Grid
Computng
Skalowanie aplikacij JEE
•
GUI
–
–
•
Przechowywanie sesji użytkownika
Przechowywanie obiektów współdzielonych
Implementacja
–
–
Duże obszary danych dla obiektów (100+GB)
Niezawodne i koherentne kontenery danych
•
–
Frameworki do przetwarzania
•
•
•
Przeważnie dostępne jako java.utl.Map
MapReduce
Job Scheduler
Persystencja
Slajd 23
www.worlditsystems.com
Skalowanie aplikacij JEE
•
Natywne narzędzia JDK
–
–
–
–
•
–
•
JVisualVM (wcześniej JConsole)
Jstat
Jmap
Jinfo…
Logi Garbage Collectora
–
•
A co jeżeli jednak musimy
znaleźć problem?
www.worlditsystems.com
-Xloggc:<PLIK>
GCViewer (htp://www.tagtraum.com/)
Memory Analyzer (Eclipse)
Sporo komercyjnych rozwiązań
Slajd 24
Skalowanie aplikacij JEE
Narzędzia do diagnozy
problemów
Slajd 25
www.worlditsystems.com
Skalowanie aplikacij JEE
www.worlditsystems.com
Garbage Collector
•
•
•
Obiekty alokowane są w
przestrzeni „young”
Jeżeli przetrwają „X
czasu” są przenoszone do
obszaru „survivor”
Często są 2 równoległe
procesy GC
–
–
Young – przeważnie nie
powodujący przestoju
aplikacji
What compacton?
Compacton?
Slajd 26
Garbage Collector – tryby
pracy
Skalowanie aplikacij JEE
•
www.worlditsystems.com
Sposoby działania GC
–
Serial Collector
•
•
•
–
Gdy brak wymagań na małe przestoje
Dobry jako „client side”
Używa tylko 1 rdzenia
Parrallel Collector
•
•
Maksymalizuje przepustowość
Nadal wstrzymuje aplikację
–
•
–
Nie gwarantuje krótkich pauz
Dobry dla batch processing
Mostly-Concurrent Collector
•
Minimalizuje latency (przestoje)
Slajd 27
Skalowanie aplikacij JEE
www.worlditsystems.com
Tuning GC
•
Opcja nr 2
Opcja nr 1
–
•
-XX:+UseSerialGC
-XX:
+UseConcMarkSweepG
C
•
•
•
•
XX:ParallelGCThreads=2
0
-XX:+UseParNewGC
-XX:SurvivorRato=8
XX:TargetSurvivorRato=
•
Usprawnienia
zwiększające
przepustowość
•
Duże rozmiary
sterty
•
Do 500 GB na
JVM/instancja
aplikacji
64 bitowa
architektura JVM
•
Możliwośc
Slajd 28
Skończona ilość dolarów 
–
Nieskończona liczba roboczogodzin 
Tryby pracy GC
Skalowanie aplikacij JEE
www.worlditsystems.com
Find a bug…
•
Klient mówi
–
–
•
Wszyscy użytkownicy muszą długo czekać na
odpowiedź
Wykorzystanie CPU na maszynach jest na poziomie
10%
Developer mówi
–
–
U mnie się skaluje rewelacyjnie
Przy testach obciążenie CPU jest >75%
Slajd 29
Skalowanie aplikacij JEE
www.worlditsystems.com
Dziękuję
Slajd 30