Guide til Hazelcast med Java

1. Oversikt

Dette er en innledende artikkel om Hazelcast hvor vi får se hvordan vi lager et klyngemedlem, distribuert Kart for å dele data mellom klyngenodene, og opprette en Java-klient for å koble til og spørre om data i klyngen.

2. Hva er Hazelcast?

Hazelcast er en distribuert In-Memory Data Grid-plattform for Java. Arkitekturen støtter høy skalerbarhet og datadistribusjon i et klynget miljø. Den støtter automatisk oppdagelse av noder og intelligent synkronisering.

Hazelcast er tilgjengelig i forskjellige utgaver. For å se funksjonene for alle Hazelcast-utgaver kan vi henvise til følgende lenke. I denne veiledningen bruker vi open source-utgaven.

På samme måte tilbyr Hazelcast forskjellige funksjoner som distribuert datastruktur, distribuert beregning, distribuert spørring osv. For formålet med denne artikkelen vil vi fokusere på en distribuert Kart.

3. Maven avhengighet

Hazelcast tilbyr mange forskjellige biblioteker for å håndtere ulike krav. Vi finner dem under com.hazelcast-gruppen i Maven Central.

I denne artikkelen bruker vi imidlertid bare kjerneavhengigheten som trengs for å opprette et frittstående Hazelcast-klyngemedlem og Hazelcast Java Client:

 com.hazelcast hazelcast 4.0.2 

Den nåværende versjonen er tilgjengelig i Maven Central Repository.

4. En første Hazelcast-applikasjon

4.1. Opprett et Hazelcast-medlem

Medlemmer (også kalt noder) blir automatisk sammen for å danne en klynge. Denne automatiske sammenføyningen finner sted med forskjellige oppdagelsesmekanismer som medlemmene bruker for å finne hverandre.

La oss opprette et medlem som lagrer data på et Hazelcast-distribuert kart:

offentlig klasse ServerNode {HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance (); ...}

Når vi starter ServerNode applikasjon, kan vi se den flytende teksten i konsollen, noe som betyr at vi oppretter en ny Hazelcast-node i vår JVM som må bli med i klyngen.

Medlemmer [1] {Medlem [192.168.1.105]: 5701 - 899898be-b8aa-49aa-8d28-40917ccba56c dette} 

For å opprette flere noder kan vi starte flere forekomster av ServerNode applikasjon. Som et resultat vil Hazelcast automatisk opprette og legge til et nytt medlem i klyngen.

For eksempel hvis vi kjører ServerNode applikasjonen igjen, ser vi følgende logg i konsollen som sier at det er to medlemmer i klyngen.

Medlemmer [2] {Medlem [192.168.1.105]: 5701 - 899898be-b8aa-49aa-8d28-40917ccba56c Medlem [192.168.1.105]: 5702 - d6b81800-2c78-4055-8a5f-7f5b65d49f30 dette}

4.2. Lag en distribuert Kart

La oss deretter lage en distribuert Kart. Vi trenger forekomsten av HazelcastInstance opprettet tidligere for å konstruere en distribuert Kart som strekker seg java.util.concurrent.ConcurrentMap grensesnitt.

Kartkart = hazelcastInstance.getMap ("data"); ...

Til slutt, la oss legge til noen oppføringer i kart:

FlakeIdGenerator idGenerator = hazelcastInstance.getFlakeIdGenerator ("newid"); for (int i = 0; i <10; i ++) {map.put (idGenerator.newId (), "melding" + i); }

Som vi kan se ovenfor, har vi lagt til 10 oppføringer i kart. Vi brukte FlakeIdGenerator for å sikre at vi får den unike nøkkelen til kartet. For mer informasjon om FlakeIdGenerator, kan vi sjekke ut følgende lenke.

Selv om dette kanskje ikke er et eksempel fra den virkelige verden, brukte vi det bare til å demonstrere en av de mange operasjonene vi kan bruke på det distribuerte kartet. Senere vil vi se hvordan du kan hente oppføringene som er lagt til av klyngemedlemmet fra Hazelcast Java-klienten.

Internt skiller Hazelcast partiene kart oppføringer og distribuerer og replikerer oppføringene blant klyngemedlemmene. For mer informasjon om Hazelcast Kart, kan vi sjekke ut følgende lenke.

4.3. Opprett en Hazelcast Java Client

Hazelcast-klienten lar oss utføre alle Hazelcast-operasjoner uten å være medlem av klyngen. Den kobles til et av klyngemedlemmene og delegerer all klyngedrift til den.

La oss opprette en innfødt klient:

ClientConfig config = ny ClientConfig (); config.setClusterName ("dev"); HazelcastInstance hazelcastInstanceClient = HazelcastClient.newHazelcastClient (config); 

Det er enkelt som det.

4.4. Tilgang distribuert Kart Fra Java Client

Deretter bruker vi forekomsten av HazelcastInstance opprettet tidligere for å få tilgang til distribuert Kart:

Map map = hazelcastInstanceClient.getMap ("data"); ...

Nå kan vi utføre operasjoner på en kart uten å være medlem av klyngen. La oss for eksempel prøve å gjenta over oppføringene:

for (Oppføringsoppføring: map.entrySet ()) {...}

5. Konfigurere Hazelcast

I denne delen vil vi fokusere på hvordan du konfigurerer Hazelcast-nettverket ved hjelp av declaratively (XML) og programmatically (API), og bruker Hazelcast management center til å overvåke og administrere noder som kjører.

Mens Hazelcast starter, ser det etter en hazelcast.config systemegenskap. Hvis den er angitt, brukes verdien som sti. Ellers søker Hazelcast etter en hazelcast.xml filen i arbeidskatalogen eller på klassestien.

Hvis ingen av de ovennevnte fungerer, laster Hazelcast standardkonfigurasjonen, dvs. hazelcast-default.xml som følger med hazelcast.jar.

5.1. Nettverkskonfigurasjon

Som standard bruker Hazelcast multicast for å oppdage andre medlemmer som kan danne en klynge. Hvis multicast ikke er en foretrukket måte å oppdage for miljøet vårt, kan vi konfigurere Hazelcast for en full TCP / IP-klynge.

La oss konfigurere TCP / IP-klyngen ved hjelp av deklarativ konfigurasjon:

Alternativt kan vi bruke Java config-tilnærmingen:

Config config = new Config (); NetworkConfig nettverk = config.getNetworkConfig (); network.setPort (5701) .setPortCount (20); network.setPortAutoIncrement (true); JoinConfig join = network.getJoin (); join.getMulticastConfig (). setEnabled (false); join.getTcpIpConfig () .addMember ("machine1") .addMember ("localhost"). setEnabled (true);

Som standard vil Hazelcast prøve 100 porter for å binde. I eksempelet ovenfor, hvis vi setter verdien til port som 5701 og begrenser porttellingen til 20, ettersom medlemmer blir med i klyngen, prøver Hazelcast å finne porter mellom 5701 og 5721.

Hvis vi vil velge å bare bruke en port, kan vi deaktivere funksjonen for automatisk økning ved å stille inn automatisk økning til falsk.

5.2. Management Center Configuration

Ledelsessenteret lar oss overvåke den samlede tilstanden til klyngene, vi kan også analysere og bla gjennom datastrukturene i detalj, oppdatere kartkonfigurasjoner og ta tråddumping fra noder.

For å bruke Hazelcast management center kan vi enten distribuere mancenter-versjon.krig applikasjonen til vår Java-applikasjonsserver / container, eller vi kan starte Hazelcast Management Center fra kommandolinjen. Vi kan laste ned den nyeste Hazelcast ZIP fra hazelcast.org. Postnummeret inneholder mancenter-versjon.krig fil.

Vi kan konfigurere Hazelcast-noder ved å legge til nettadressen til webapplikasjonen til hazelcast.xml og la Hazelcast-medlemmene kommunisere med ledelsessenteret.

Så la oss nå konfigurere styringssenteret ved hjelp av deklarativ konfigurasjon:

 // localhost: 8080 / mancenter 

På samme måte er her den programmatiske konfigurasjonen:

ManagementCenterConfig manCenterCfg = ny ManagementCenterConfig (); manCenterCfg.setEnabled (true) .setUrl ("// localhost: 8080 / mancenter");

6. Konklusjon

I denne artikkelen dekket vi innledende konsepter om Hazelcast. For mer informasjon kan vi ta en titt på referansehåndboken.

Som vanlig er all koden for denne artikkelen tilgjengelig på GitHub.