Top Banner
© 2014 Hazelcast Inc. From Terracotta To Hazelcast Introduction on Hazelcast for Terracotta Users AUTUMN 2014
83
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: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

From Terracotta To HazelcastIntroduction on Hazelcast for Terracotta Users

AUTUMN 2014

Page 2: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

About me

Rahul Gupta @wildnez

!Senior Solutions Architect for Hazelcast

Worked with Terracotta and Coherence

Worked for Major Investment Banks

Java Programmer since 1996

Started programming in VHDL and later on 8048, 80286 CPU

2

Page 3: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

How this is going down

3

• Limitations of Terracotta

• What is Hazelcast

• Migration

• Important Features

Page 4: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Limitations of Terracotta!• Only an in-memory data store !

• Complex APIs to use distributed collections !

• No capabilities of processing data in memory !

• Data needs to be fetched by the application resulting in network hops !

• Inflexible - Only Client-Server architecture !

• Dedicated environment for backup, Extra Server Licenses (Passive/Mirror) !

• Requires dedicated environment !

• Requires downtime to scale

4

Page 5: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Hazelcast overcomes the limitations

• True IMDG space – In-Memory Distributed Data Caching

» Native Memory – In-Memory Parallel Data Processing

» Distributed ExecutorService » EntryProcessors

– In-Memory Map-Reduce !

• Distributed Pub-Sub Messaging Model !

• Simple Access to Distributed Collections

5

Page 6: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Hazelcast overcomes the limitations

• Highly Flexible Deployments – Client-Server

» Servers run in a separate tier in dedicated environment

» Does not require dedicated infrastructure for running backup

– Embedded

» Hazelcast node runs within the application JVM

» Application nodes made distributed by Hazelcast running within their JVM

» Does not require dedicated environment

6

Page 7: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Hazelcast overcomes the limitations

• Backups also serve as Main nodes !

• No extra licenses for backup !

• Scales on the fly !

• No downtime required to add/remove nodes

7

Page 8: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Configuring & forming a cluster

8

Page 9: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Forming a Cluster

• Hazelcast Clusters run on JVM

• Hazelcast discovers other instances via Multicast (Default)

• Use TCP/IP lists when Multicast not possible

• Segregate Clusters on same network via configuration

• Hazelcast can form clusters on Amazon EC2.

9

Page 10: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Hazelcast Configuration - Server

• Only one jar - look for hazelcast-all-x.x.x.jar !

• Hazelcast searches for hazelcast.xml on class path !

• Will use hazelcast-default.xml for everything else. !

• Hazelcast can be configured via XML,API or Spring !

• Configure Networks, Data Structures, Indexes,Compute

10

Page 11: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Form a cluster

1. Sample hazelcast.xml looks like this

11

Page 12: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

TOP TIP

• The <group> configuration element is your friend. !

• It will help you isolate your cluster on the multicast network. !

• Don’t make the mistake of joining another developers cluster or worse still a Production Cluster!

12

Page 13: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Configuration via API

1. Add GroupConfig to the Config instance.

13

Page 14: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

TOP TIP

• You can run multiple Hazelcast instances in one JVM. !

• Handy for unit testing. !

14

Page 15: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Configure Cluster to use TCP/IP

1. Edit multicast enabled = false 2. Add tcp-ip element with your ip address

15

Page 16: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Client Configuration

16

Page 17: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Hazelcast Configuration - Client

• Hazelcast searches for hazelcast-client.xml on class path • Full API stack - Client API same as Server API • Clients in Java, C#, C++, Memcache, REST

17

Page 18: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Starting as a Client or Cluster JVM

18

Notice Client and Cluster return same HazelcastInstance reference.

Page 19: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Code Migration

19

Page 20: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Migration - Terracotta to Hazelcast

• Terracotta implementation of cache puts/gets: !!!!

• Replace Terracotta implementation by Hazelcast code:

20

Page 21: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Migration - Terracotta to Hazelcast

• Terracotta implementation of Blocking Queue(notice the complex APIs): !!!!

• Replace Terracotta by Hazelcast Queue (notice the simplicity):

21

Page 22: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Topologies

22

Page 23: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Hazelcast Topologies

• Traditional Client -> Server (Client -> Cluster) !

• Clients do not take part in standard cluster coms. !

• Consider Client -> Cluster topology to segregate service from storage. !

• Smart Clients connect to all Clusters nodes. Operations go directly to node holding data. !

• Embedded model, for example in a J2EE container. service and storage within one JVM.

23

Page 24: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Terracotta Cluster

24

Page 25: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Embedded Hazelcast

25

Page 26: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Client Server -> (Client -> Cluster)

26

Page 27: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Distributed Collections

27

Page 28: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Maps

28

Page 29: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Distributed Maps - IMap

• Conforms to the java.util.Map interface !

• Conforms to the java.util.ConcurrentMap interface !

• Hazelcast IMap interface provides extra featuresEntryListenersAggregatorsPredicate QueriesLocking Eviction

29

Page 30: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Wildcard Configuration

• Hazelcast support wildcards for config.

30

• Beware of ambiguous config though. • Hazelcast doesn’t pick best match and what it picks is

random not in the order it appears in config.

Page 31: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Properties

• Hazelcast supports property replacement in XML config

31

• Uses System Properties by default • A Properties Loader can be configured

Page 32: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Near Cache

• Terracotta L1 Cache -> Hazelcast Near Cache !

• Highly recommended for read-mostly maps

32

Page 33: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Replicated Map

33

• Does not partition data.

• Copies Map Entry to every Cluster JVM. !• Consider for immutable slow moving data like config.

!• ReplicatedMap interface supports EntryListeners.

!

Page 34: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Data Distribution and Resource Management

34

Page 35: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Data Distribution

• Data (primary + backup) is distributed in cluster using partitions !

• 271 default partitions !

• Partitions are divided among running cluster JVMs. !

• Discovery of resident partition performed by the client before sending out update/get calls !

• In smart-client setup, requests go directly to the host node !

• Hazelcast places a backup of the Map Entry on another partition as part of the Map.put

35

Page 36: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Data Distribution

• The backup operation can be sync (default) or async to the Map.put !

• Each node acts as Primary and Backup compare to Active-Passive on dedicated resources setup in Terracotta - efficient use of resources !

• When cluster JVM enters or leaves, cluster partitions are rebalanced !

• In event of a node failure - – Primary data is retrieved from backup and distributed across

remaining nodes in cluster – New backup is created on good nodes

36

Page 37: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Data Distribution

37

Fixed number of partitions (default 271)Each key falls into a partitionpartitionId = hash(keyData)%PARTITION_COUNT Partition ownerships are reassigned upon membership

A B C

Page 38: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

New Node Added

DA B C

Page 39: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration

DA B C

Page 40: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration

DA B C

Page 41: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration

DA B C

Page 42: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration

DA B C

Page 43: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration

DA B C

Page 44: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration

DA B C

Page 45: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Migration Complete

DA B C

Crash

Page 46: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Fault Tolerance & Recovery

46

Page 47: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Node Crashes

DA B C

Crash

Page 48: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backups are Restored

DA B C

Crash

Page 49: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backups are Restored

DA B C

Crash

Page 50: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backups are Restored

DA B C

Crash

Page 51: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backups are Restored

DA B C

Crash

Page 52: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Data is Recovered from backup

DA B C

Crash

Page 53: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Data is Recovered from backup

DA B C

Crash

Page 54: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backup for Recovered Data

DA B C

Crash

Page 55: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backup for Recovered Data

DA B C

Crash

Page 56: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Backup for Recovered Data

DA B C

Crash

Page 57: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

All Safe

DA C

Page 58: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

In Memory Format & Serialization

58

Page 59: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

In Memory Format

59

• Flexibility in data store format compared to Terracotta’s binary only

• By default, data in memory is binary (serialised) format. • Local Processing on a node has to keep deserialising. • Use OBJECT if local processing (entry processor,executors) • Use BINARY if get(ing) data over the network

Page 60: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Serialization

60

• Custom Serialization as against “Serializable” only option in Terracotta – DataSerializable

• Fine grained control over serialization • Uses Reflection to create class instance • “implements DataSerializable”

– public void writeData(ObjectDataOutput out) – public void readData(ObjectDataInput in)

– IdentifiedDataSerializable • Better version of DataSerializable • Avoids Reflection - faster serialization • extends DataSerializable • Two new methods -

– int getId() - used instead of classname – int getFactoryId() - used to load the class given to Id

Page 61: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Distributed Compute

61

Page 62: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Distributed Executor Service

62

Page 63: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Distributed Executor

63

• IExectorService extends java.util.concurrent.ExecutorService

• Send a Runnable or Callable into the Cluster

• Targetable Execution All MembersMemberMemberSelectorKeyOwner

• sync/async blocking based on Futures

• Or ExecutionCallback notifies onResponse !

!

Page 64: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Distributed Executor

64

• If System Resources permit you can scale up the number of threads the ExecutorService uses.

!!

!!

Page 65: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Distributed Executor

65

!!

• Each Member creates its own work queue.

• Tasks are not partitioned or load balanced.

• If member dies while task is enqueue on member it is lost.

• You need to lock any data you access, but beware of Deadlocks! !

Page 66: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

EntryProcessor

66

Page 67: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

EntryProcessor

67

• A Distributed Map Entry Processor Function

• Provides locking guarantees

• Work directly on the Entry object in a node

• Executed on the Partition Thread rather than the Executor

• Submitted via the IMap

• Best to apply delta updates without moving the object across the network

Page 68: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

EntryProcessor

68

• EntryProcessor also mutates the Backup copy

• Use the AbstractEntryProcesssor for default backup behaviour

• Implement EntryProcessor directly to provide your own Backup behaviour, for example sending delta only

!• Only alternative to Terracotta DSO

Page 69: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

EntryProcessor

69

Page 70: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

EntryProcessor

70

• Other tasks run on Partition Thread (Puts, Gets)

• It is important to yield the EntryProcessor

• hazelcast.entryprocessor.batch.max.size: Defaults to 10.000

• Hazelcast will not interrupt a running operation it onlyyields when the current Key has been processed.

Page 71: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

In-memory Map Reduce

71

Page 72: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

MAP Reduce

72

• In-memory Map/Reduce compared to disk bound M/R • Similar paradigm to Hadoop Map/Reduce • Familiar nomenclature for ease of understanding and

use – JobTracker – Job – Mapper – CombinerFactory – Reducer – Collator

Page 73: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Distributed Aggregation

73

Page 74: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Aggregators

74

• Ready-to-use in-memory data aggregation algorithms • Implemented on top of Hazelcast MapReduce framework • More convenient than MR for large set of standard operations • Work on both - IMap and MultiMap • Types of aggregation: – Average, Sum, Min, Max, DistinctValues, Count

Page 75: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Querying

75

Page 76: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Querying with Predicates

76

• Rich Predicate API that can be run against IMap, similar to criterion based Terracotta Search Collection<V> IMap.values(Predicate p) Set<K> IMap.keySet(Predicate p) Set<Map.Entry<K,V>> IMap.entrySet(Predicate p)Set<K> IMap.localKeySet(Predicate p)

!!

Page 77: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Querying with Predicates

77

notEqual instanceOf like (%,_) greaterThan

greaterEqual lessThan lessEqual between

in isNot regex

Page 78: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Querying with Predicates

78

• Create your own Predicates !!

Page 79: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

SQL like queries

79

• SQLPredicate class. • Runs only on Values. • Converts the String to a set of concrete Predicates.

!!

Page 80: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Indexes

80

• Prevent full Map scans. • Indexes can be ordered or unordered. • Indexes can work along the Object Graph (x.y.z). • When indexing non primitives they must implement

Comparable. • Indexes can be created at runtime.

!!

Page 81: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Conclusion

81

Page 82: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.

Conclusion

• Hazelcast is easy to use !

• Easy to migrate from Terracotta !

• Familiar naming convention !

• Lot more features and use cases than just a data store !

• On the fly scale !

• Zero downtime !

• No single point of failure

82

Page 83: Hazelcast for Terracotta Users

© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.© 2014 Hazelcast Inc.

Thank You !

@wildnez !

[email protected]

83