Top Banner
Geen vertraging meer dankzij Hazelcast? Peter Rademaker (Info Support) Roeland van Beek (Nederlandse Spoorwegen)
25

Geen vertraging meer dankzij Hazelcast?

Feb 17, 2017

Download

Software

roelandvanbeek
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Geen vertraging meer dankzij Hazelcast?

Geen vertraging meer dankzij Hazelcast?Peter Rademaker (Info Support)

Roeland van Beek (Nederlandse Spoorwegen)

Page 2: Geen vertraging meer dankzij Hazelcast?

Agenda• IT bij NS• Conflictsignalering• Onze uitdaging• Introductie Hazelcast• Conflictsignalering met Hazelcast • Evaluatie

Page 3: Geen vertraging meer dankzij Hazelcast?

IT bij NS• IT is overal • It is groot (er werken 1000 mensen)• IT is bij ons de business• (Wacht op slides van Move NS)

Page 4: Geen vertraging meer dankzij Hazelcast?

Bijsturing

Page 5: Geen vertraging meer dankzij Hazelcast?

Bijsturingsapplicatie Materieel (B@M)

Page 6: Geen vertraging meer dankzij Hazelcast?

Conflictsignalering• Glazen bol voor de bijstuurder • Evaluatie van het hele plan in één oogopslag• Vertragingen en wijzigingen continu verwerkt

Page 7: Geen vertraging meer dankzij Hazelcast?

Conflictsignalering

Heden Toekomst➔ 🔧 ➔ ⚠

Plan

Page 8: Geen vertraging meer dankzij Hazelcast?

Technische uitdaging• Snel: dag analyseren in 10 seconden• Robuust: 24x7 beschikbaar• Schaalbaar: piekbelasting en toekomst• Onafhankelijk: geen invloed op rest van applicatie• Onderhoudbaar: levensduur 20 jaar

Page 9: Geen vertraging meer dankzij Hazelcast?

De oplossing• Relationele database

Inzet in vergelijkbare systemen niet voldoende

• In-memory datagrid• Oracle Coherence• GridGain• Terracotta• Hazelcast

Page 10: Geen vertraging meer dankzij Hazelcast?

Meet Hazelcast“An open-source in-memory datagrid”

• Founded by Talip Ozturk in 2008• CEO: Greg Luck (EHCache, JCache - JSR107 )• Open source, Apache License• Enterprise edition beschikbaar• Andere gebruikers:

Page 11: Geen vertraging meer dankzij Hazelcast?

De sterke punten van Hazelcast• Gedistribueerde implementatie van standaard Java

API’s• Collections (b.v. Map, Queue) • java.util.concurrent (b.v. Lock, AtomicInteger,

Executor Service)

• Antwoord op klassieke in-memory nadelen:• Beschikbaar RAM• Data verlies

• Peer-to-peer, geen SPOF

Page 12: Geen vertraging meer dankzij Hazelcast?

Hazelcast - een cluster starten

HazelcastInstance instance = Hazelcast.newHazelcastInstance();HazelcastInstance instance2 = Hazelcast.newHazelcastInstance();HazelcastInstance instance3 = Hazelcast.newHazelcastInstance();

CONSOLE OUTPUT: Members [3] {    Member [127.0.0.1:5701]    Member [127.0.0.1:5702] Member [127.0.0.1:5703] this}

HazelcastInstance client = HazelcastClient.newHazelcastClient();

Client

Page 13: Geen vertraging meer dankzij Hazelcast?

Hazelcast - datastructures Map<Integer, MaterieelEenheid> matEenheden = hzInstance.getMap(“matMap");matEenheden.put(1, new MaterieelEenheid(5281, “ICM-4"));matEenheden.put(2, new MaterieelEenheid(5615, “VIRM-4"));

List<Conflict> conflicten = hzInstance.getMap(”conflicten”);conflicten.add(new PlaatsConflict(“Ut“, “Ams”, 5615));conflicten.add(new PlaatsConflict(“Ensc“, “Sgc”, 5615));

Page 14: Geen vertraging meer dankzij Hazelcast?

Hazelcast – data replicatie• Voorbeeld 3 nodes, backup count 1:

• Backup count tot 6• Sync en async backup• Backup read

Map<Integer,MaterieelEenheid> matEenheden = hz.getMap(“matMap");matEenheden.put(1, new MaterieelEenheid(5281, “ICM-4"));matEenheden.put(2, new MaterieelEenheid(5615, “VIRM-4"));matEenheden.put(3, new MaterieelEenheid(2501, “ICM-3"));

1

2

3

1

2

3

Page 15: Geen vertraging meer dankzij Hazelcast?

Hazelcast Distributed queries• Zelf lokaal itereren en filteren is niet efficiënt…

• Criteria API:

• Distributed “SQL” query:SqlPredicate sqlPred = new SqlPredicate("actief AND plaatsen < 30");Collection<Employee> matEenheden = employeeMap.values(sqlPred);

EntryObject e = new PredicateBuilder().getEntryObject();Predicate pred = e.is("actief").and(e.get(“plaatsen").lessThan(30));

Collection<MaterieelEenheid> gevonden = matMap.values(pred);

Page 16: Geen vertraging meer dankzij Hazelcast?

Hazelcast Distributed queries• Hoe het werkt:• Predicate naar elk member• Filter lokale entries• Predicate aanvrager merget resultaten

• Voordelen• Schaalbaar: tijd op elke node wordt minder naarmate

meer nodes• Alleen gefilterde data over het netwerk

Page 17: Geen vertraging meer dankzij Hazelcast?

Hazelcast @ conflictsignalering: initialisatie

65

6598

98

9865

Page 18: Geen vertraging meer dankzij Hazelcast?

Hazelcast @ conflictsignalering: mutaties

5

598

98BC A

ABC

Page 19: Geen vertraging meer dankzij Hazelcast?

Distributed Executor Service• Gedistribueerd uitvoeren van Callable of Runnable• Op: willekeurige node, specifieke node, op key-

owner node, subset van cluster nodesHazelcastInstance instance = Hazelcast.newHazelcastInstance();IExecutorService execS = instance.getExecutorService("default");

Future<List<Conflict>> conflictenFuture = execS.submit( new MancoConflictDetector(input));List<Conflict> mancoConflicten = conflicteFuture.get();System.out.println(mancoConflicten);

Page 20: Geen vertraging meer dankzij Hazelcast?

Hazelcast @ cs: distributed execution

5

598

98C A

A C

Page 21: Geen vertraging meer dankzij Hazelcast?

Hazelcast en transacties

TransactionContext txContext = instance.newTransactionContext();txContext.beginTransaction();

TransactionalMap<String, String> map = txContext.getMap("mymap");TransactionalSet<Integer> set = txContext.getSet("myset");

try { map.put("1", "value1"); set.add(8); txContext.commitTransaction();} catch (Throwable t) { txContext.rollbackTransaction();}

• We willen consistentie van het datagrid garanderen en daarom het grid transactioneel muteren

Page 22: Geen vertraging meer dankzij Hazelcast?

Hazelcast Resource Adapter• Meedraaien in JEE transactions• Nog niet heel volwassen

@Resource(mappedName = "java:/HazelcastCF")protected HazelcastConnectionFactory connectionFactory;

HazelcastConnection c = connectionFactory.getConnection();

TransactionalMap<String, String> txMap =conn.getTransactionalMap("default");txMap.put("key", "value")

Page 23: Geen vertraging meer dankzij Hazelcast?

Hazelcast Community• Zeer actief• Issues binnen seconden/minuten in

behandeling

https://github.com/hazelcast/hazelcast/issues/....

Duur issue opgelost

#3350 4d

#3024 12d

#1415 1d

#2260 1d

#2089 18d

#3384 2d

#3385 pending

#2410 10d

#2570 25d

#2410 20d

Page 24: Geen vertraging meer dankzij Hazelcast?

EvaluatieVoordelen• Snel, robuust, schaalbaar• Eenvoudig in gebruik• Actieve community

Nadelen• Nog niet helemaal volwassen

Page 25: Geen vertraging meer dankzij Hazelcast?

Meer weten?www.ns.nl

www.infosupport.com