Temat: Java & clustering
W klasycznym podejsciu (nie koniecznie java) wieze sie z szeregiem problemow:
1) nody powinny byc bezstanowe, nie mozemy na ogole nic na nich przechowywac, wiec potrzebne jest centralny data storage (np NAS) jak np kolejny klaster. Tu w zasadzie sie konczy wiekszosc "roznic programowych" w wielu aplikacjach, musisz zadbac, aby byla bezstanowa, nei zapisywala niczeo kokalnie.
2) kazdy node to dokladna kopia (w ramach danego klastra) - istotne jest pamietac, ze kazda zmiana musi byc wprowadzoan wszedzie
3) deployment na wszystkie nody - jesli sama Java to pewnie kontenery maja taka mozliwosc wbudowana, jesli dodatkowo technologie powiazane - dochodza problemy, ktore moze rozwiazac np capistrano.
4) Load balancing - musisz jakos dzielic ruch miedzy dostepne maszyny, sa rozne wersje load balancingu, od round-robin (w kolko) do bardziej wyrafinowanych metod, gdzie LB dokladnie wie co sie dzieje na maszynach i daje prace najmniej zajetej. Z ciekawostek, sa load balancery brzegowe i load balancery middle tier, czyli masz klastry swoich aplikacji uslugowych w architekturze SOA, gdzie jedna usluga rozmawia do drugiej jako do klastra przez load balancery proxy. Istnieja tez load balancery dzialajace jako service discovery, czyli nie przepuszczasz ruchu przez load balancer, a jest on jedynie informantem, z kim w danej sprawie rozmawiac w danym momencie (z ktorym nodem, ktorej uslugi itd) - zobacz sobie Netfllix Eureka
5) centralizacja zbierania logow (rozwiazan jest sporo, ja uzywam logstash + elasticsearch na AWS), od rozwiazan on premise, do aplikacji typu new relic czy appdynamic (obie dosc drogie, ale jednoczesnie profiluja wydajnosc)
6) zarzadzanie konfiguracja serwerow - tu wchodza dosc popularne rozwiazania dla malych/srednich (ale i wiekszi
korzystaja) jak Puppet czy Chef (facebook uzywac chefa, ja osobiscie wole idee Puppeta)
7) sesja - no java ma swoje mechanizmy do kopiowania sesji miedzy serwerami, mi sie to jednak zawsze wydawalo dosc ciezkie. Nie-javowe podejscie to klaster memcached/redis/elasticache i serializacja i deserialiacja. Dostep jest o 2 rzedy wielkosci szybszy niz do bazy danych (aczkolwiek najwieksze firmy, uzywaja baz, jak np Amazon).
W Jave dochodza rozwiazania typu quartz/terracotta ktore sztucznie niejakoby tworza jedna duza przestrzen (wirtualny klaster) w razie, gdy twoja aplikacja jest raczej OLAP'owa niz OLTP,powa.