72
Ultra-Low Latency with Java and Terabytes of Data In Memory Computer Summit 2019 London

In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Ultra-Low Latency with Java and Terabytes of DataIn Memory Computer Summit 2019London

Page 2: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

About Me

Per Minborg● Alumni speaker: JavaOne, DevNexus and Oracle Code● Writer: Modern Java , Oracle Java Magazine, DZone, blog● Inventor, entrepreneur: Speedment● Silicon Valley, Gothenburg

Page 3: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

-1

Page 4: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs
Page 5: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs
Page 6: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

1. Slow Databases

2. Data on Several Nodes and no Affinity Across Data

3. Data is Remote

4. Unnecessary Object Creation / Garbage Collect Problem

5. Lack of Parallelism

Why Are Applications Slow?

Page 7: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Data grows exponentially, which clogs systems

Slow Databases

Stor

age

Capa

city

in E

xaby

tes

Page 8: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Low Latency Scale Out

Low Affinity

Several Nodes/no Affinity Across Data

Page 9: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Low Latency Scale Out

Low Affinity

Several Nodes/no Affinity Across Data

Page 10: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

N1 N2

Σ=10 Σ=20

Σ=30

Several Nodes/no Affinity Across Data

Page 11: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

N1 N2

Σ=10 Σ=20

Σ=30

Several Nodes/no Affinity Across Data

Page 12: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

N1 N2

Σ=10 Σ=20

Σ=30

Several Nodes/no Affinity Across Data

Page 13: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

N8

N4

N1 N2

N3

N5N6

N7

?

Several Object Types/Nodes/no Affinity Across Data

Page 14: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs
Page 15: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Low Latency

Several Nodes/no Affinity Across Data

Scale Out

Low Affinity

Page 16: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

45 ms

25 µs

100 µs

Data is Remote: Laws of Nature

Page 17: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

1-3 µs

Linux Kernel

ProcessProcess

Process

Process

Data is Remote: Operating System

Page 18: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Unnecessary Object Creation

Page 19: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Unnecessary Object Creation

Page 20: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Unnecessary Object Creationprivate Map<Integer, Film> createMap() { return LongStream.range(0, (int) 1E9) .mapToObj(Main::createFilm) .collect( toMap( Film::getFilmId, Function.identity() ) );}

Page 21: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Unnecessary Object Creation● Objects

○ Many extra objects such as Integer and Map.Entry are created○ Subject to overhead and byte alignment○ Long expected lifetime leads to repeated evaluation by GC ○ Difficult to retrieve objects (except for key/value), e.g. films longer than 60 s

● TreeMap for each field adds to the overhead

● gcExecutionTime(#objects) is not linear

Page 22: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Unnecessary Object CreationCollection Time [s] vs. Heap Size [GB] 

Colle

ctio

n Ti

me

[s]

Heap Size [GB]

Page 23: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

To write a single Java object to main memory takes 200 ns

00 00 EA B6 08 E2 02 01 00 00 01 A9 AA FF FF FE 00 01 00 10

Unnecessary Object Creation

Page 24: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

$ nproc –all

32

$ top

PID USER %CPU %MEM 2105 java 100.0 5.4

1 root 0.5 0.4

Lack of Parallelism

Page 25: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

The Solution:

What is that...?

Page 26: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

In-Memory

Data is in RAM

The application is remotely connected to a grid, other machine, other process

In-JVM-Memory

Data is in RAM

The application and data resides in the sameJVM

In-Memory vs. In-JVM-Memory

Application

Page 27: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

CPU Cache Latencies

64-bit Main Memory Read

In-JVM-Memory Makes Ultra-Low Latency Possible

Page 28: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

In-Memory vs. In-JVM-Memory: Performance

Speedment In-JVM-Memory

Grid of 4 nodes

100

75

50

25

00.66%

100%

Page 29: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Is that even possible...?

Page 30: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Scaling up In-JVM-Memory

Page 31: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Today: Scale up to 12 TB (Intel® Xeon® Processor E7-8855 v4 * 4)

Soon: Scale up to 48 TB

Scaling up In-JVM-Memory

Page 32: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Scaling up In-JVM-Memory

Page 33: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

General Belief Fact AWS “x1e.Nxlarge”

Increase Memory in the Cloud as You Grow

Cost

[$/h

] Internal RAM [GiB]

Cost

[$/h

]

Internal RAM [GiB]

Page 34: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

In-JVM-Memory SolutionAdd-on for your current solution for part of your data

High Level ShardingPer year, region, segment 12 TB 12 TB 12 TB

America EMEA Asia

Memory Mapping (e.g. IMDT)

12 TB 24 TB

RAM SSD

12 TB

What if I Have More Than 12 TB?

RAM SSD

Page 35: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

What if My Data Grows?

Page 36: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Data with 75% correlation

In-JVM-Memory vs. In-Memory Performance

Size [GB]

Rela

tive

Perfo

rman

ce

Page 37: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Low Latency

Recap

Scale Out

Low Affinity

Page 38: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Low Latency

In-JVM-Memory Makes it Possible

Scale Up

Low Affinity

Page 39: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

In-JVM-Memory Solution:

Page 41: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

• Continuously creates data snapshots from a data source

• Places the copy within the JVM• Off-Heap Data

• Off-Heap Indexing

• Operations O(1) or O(log(N))

• No Impact on Garbage Collect

JVM

Speedment: In-JVM-Memory DataStore

Page 42: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Speedment: In-JVM-Memory DataStore

Heap Misc

Heap MiscOff-Heap

Page 43: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

java.util.stream.Stream

Speedment API: Java Stream ORM

Page 44: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Speedment API: Java Stream ORM

Page 45: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Declarative Constructs in SQL and Stream

SELECT * FROM FILM

WHERE RATING = ‘PG-13’

films.stream()

.filter(Film.RATING.equal("PG-13"))

Speedment API: Java Stream ORM

Page 46: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

films.stream() .filter(Film.RATING.equal("PG-13")) .count();

Process Data without Creating Intermediate Objects

Page 47: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Process Data without Creating Intermediate Objects

films.stream() .filter(Film.RATING.equal("PG-13")) .collect(toJsonLengthAndTitle());

Page 48: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

index film_id length rating year language title[0] 0 267 267 0 0 0

[1] 267 0 0 267 267 267

[2] 523 523 523 523 523 523

index film_id 0

length4

rating12

year16

language20

Title…

[0] 1 123 PG-13 2006 1 ACAD..

[267] 2 69 G 2006 1 ACE G…[523] 3 134 PG-13 2006 1 ADAP…

Speedment Can Process Data without Creating Intermediate Objects

films.stream() .filter(Film.RATING.equal("PG-13")) .collect(toJsonLengthAndTitle());

Page 49: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Speedment: Off-Heap Joins/Aggregations

var join = joinComponent.from(FilmManager.IDENTIFIER).innerJoinOn(Language.LANGUAGE_ID).equal(Film.LANGUAGE_ID).build(Tuples::of);

Page 50: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Speedment: Off-Heap Joins/Aggregations

var offHeapAggregator = Aggregator.builder(Result::new).on(Film.LANGUAGE_ID).key(Result::setLanguage).on(Film.RATING).key(Result::setRating).on(Film.LENGTH).average(Result::setAverage).build();

Page 51: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Speedment: Off-Heap Joins/Aggregations

var result = join.stream().collect(offHeapAggregator);

Page 52: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Speedment: Parallel Processing

join.stream().parallel().collect(offHeapAggregator);

Page 53: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

$ nproc –all

32

$ top

PID USER %CPU %MEM 2107 java 3170.0 5.4

1 root 0.5 0.4

Speedment: Parallel Processing

Page 54: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs
Page 55: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Demo: Download Sakila Example Database

Page 56: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

@Benchmarkpublic long filterAndCount() {

return films.stream().filter(RATING_EQUALS_PG_13).count();

}

1

2

JVM

Demo: Stream

Page 57: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Demo: Initialize the Project

www.speedment.com/initializer

Page 58: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Demo: Connect to the Sakila Database

Page 59: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Demo: Generate the Domain Model

Page 60: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Demo

Page 61: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Ultra-Low Latency (Lower is Better)Stream Latency vs. JDK

Stre

am L

aten

cy [

ns]

Java Runtime

Page 62: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs
Page 63: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Easy Integration: Any Data Source

Page 64: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Deploy Anywhere

Page 65: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

IDE Integration

Page 66: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Web Service Integration

Page 67: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

[email protected]

Free Trial:www.speedment.com/initializer

Page 68: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

• What if I have a transactional application?

• How to pin down my app to a specific CPU?

• How does memory management work off-heap?

• I have data in a no-SQL database or on file?

• How does the snapshot affect application startup?

• If I stream over a kazillion objects, won’t my heap overflow?

• Does Speedment rely on C, C++ libraries or native code?

But wait...

Page 69: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

index film_id length rating year language title[0] 0 267 267 0 0 0

[1] 267 0 0 267 267 267

[2] 523 523 523 523 523 523

index film_id 0

length4

rating12

year16

language20

Title…

[0] 1 123 PG-13 2006 1 ACAD..

[267] 2 69 G 2006 1 ACE G…[523] 3 134 PG-13 2006 1 ADAP…

Speedment Can Process Data without Creating Intermediate Objects

films.stream() .filter(Film.RATING.equal("PG-13")) .collect(toJsonLengthAndTitle());

Page 70: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

Outline

1. Objects on the Stack

2. Proper Performance Testing

3. Short-circuit Streams for Massive Performance Gain

4. Holding Terabytes of Data in the JVM with no GC impact

5. Create Large Aggregations of Data without Intermediate Objects

Page 71: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

CPU Cache Latencies

64-bit Main Memory Read

In-JVM-Memory Makes Ultra-Low Latency Possible

Page 72: In Memory Computer Summit 2019 London · In Memory Computer Summit 2019 London. About Me Per Minborg Alumni speaker: JavaOne, DevNexus and Oracle Code ... Collection Time [s] vs

films.stream() .filter(Film.RATING.equal("PG-13")) .count();

Process Data without Creating Intermediate Objects