geen vertraging meer dankzij hazelcast?

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

Upload: roelandvanbeek

Post on 17-Feb-2017

398 views

Category:

Software


0 download

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