SlideShare a Scribd company logo
C24
Architecting for a
Scalable Enterprise
C24
2
PROBLEMS DON’T CHANGE, THEY JUST GET BIGGER
I’ve been working for 30 years now and I just see the same
problems over and over again - History repeating itself
It’s true we have some new ones but they’re just
reincarnations of the old ones
You could argue that IoT, social media & eCommerce are all
new (since I started anyway) but the problems are the
same…
Massive volumes of data
It needs parsing, filtering, sorting, analysing, alerts, triggers, reporting,
compliance… Same ol’ same ol’.
C24
3
30-ISH YEARS AGO
I can remember in 1987 we re-wrote a trading system
in Objective-C
In those days there was a “war” between Objective-C and C++
History tells us C++ won but it wasn’t a clear victory as Apple shows
us today
Anyway, one of the problems we had was loading in all
of the exchange rates as the system started up
We used 80386s (the latest 32 bit CPU)
The big machines had 1MB (yes 1 mega bytes) of RAM
WAN was a 2400 baud modem (2.4k bits ber second)
Network was 1MB token-ring (40k/sec on a good day)
20MB hard-disk on the top machines (80ms access time)
C24
4
SOUND FAMILIAR?
Hundreds of currency pairs (USD/GBP) - remember pre-Euro so more
currencies
A dozen forward rates (spot, 1 week, 1 month etc.)
Several changes per second (coming down the modem @ 2400 baud)
These are some of the problems we faced…
When the machines started up in the morning it

took along time to get the current snap-shot to the trader’s machines
Each new rate (GBP/USD=1.68750) took a long time to update on the
clients machines, something do to the new Object Oriented model we’d
used
Querying the data was slow
Storing and querying the historic data presented serious issues
C24
5
HARDWARE TO THE RESCUE!
You could do in a few seconds on an iPhone what took a day
to do in those days but that’s thanks to the hardware changes
NOT THE SOFTWARE
The problems and architecture remain the same, we just have
a lot more data because we’re now global
We want every trade quoted on every exchange in every
country on every trader’s desk in every office in every country
Competition has just meant that as soon as one bank does it,
you have to do better otherwise you lose the deals and go
bankrupt
C24
6
IT’S NOT JUST THE CPU
Networks speeds
20 years ago we used wired modems 38k (bits) was

good, we now expect mobile networks to give us 50+MB,

that’s >1000X
Screens
My laptop (2 years old) is 2880x1800 and “full colour”, 20 years ago
1024x768 in 16 colours was good but the real change is 3D & OpenGL
etc.
Low res 3D pie charts needed a maths co-processor to display them in
under a second today we expect realistic 3D in real-time on full resolution
Today’s graphics cards are computers within computers
Memory
We used to have to page 1MB of RAM in and out (memory banks), today
we have 16GB or RAM in a laptop and 128GB of SSD on a keyring
C24
7
RAW POWER
Apollo 11’s guidance computer had just 2k

of memory and 32k of read-only storage

But it got it to the moon - and back!
Most of the time :-)
The backup was a slide rule
Today you can compress a full 1080p

movie into about 1GB and watch it on your

mobile phone
Why then do we have problems getting XML into memory?
C24
8
50 YEARS ON AND MOORE’S LAW IS STILL WITH US
His article “Cramming more components onto
integrated circuits” predicted the future of transistor
density based on a simple doubling every 2 years
Every few years we’re told this

has to end but someone comes

up with a new idea and it just

keeps going
Eventually it will flatten but it’s got a long way to go yet
so there are exciting time ahead
C24
9
50 YEARS ON AND MOORE’S LAW IS STILL WITH US
His article “Cramming more components onto
integrated circuits” predicted the future of transistor
density based on a simple doubling every 2 years
Every few years we’re told this has to

end but someone comes up with a new

idea and it just keeps going
Eventually it will flatten but it’s got a

long way to go yet so there are exciting

time ahead
C24
10
SOFTWARE IS SLOWING US DOWN
Programmers are lazy, I’m one, I gave all my demos to
someone

else to write while I write these slides (thanks Iain)
We’ve added layer upon layer of abstraction to hide the

complexity and hardware - Good but it slows things down
We simplified programming with drag-n-drop

now even kindergarten kids can program
Twenty years ago Java was introduced to the

world, it took away all the problems we had

with memory management and hardware architectures
It was cool then and I think it’s still cool now but it does

have a lot of issues, many of which we can work around
C24
11
MY SLIDE FROM 2012
Today my optimisation target is Java itself
C24
12
JAVA IS VERBOSE AND SLOW
OK, don’t get offended, Java is a great language and small
applications are often as fast as C/C++, the JIT compiler is
seriously powerful
BUT
For data high volume processing, distributed computing and
analytics Java performance sucks
BUT
It is still the best we have so we just need to improve the way it
works
C24
13
GARBAGE COLLECTION
Programmers make mistakes, in the days of C/C++ it
crashed or hung the machine today it just kills the hangs
or crashes the JVM
Memory management was supposed to help but you can
bring your entire machine to a grinding halt with ease…
Concatenating Strings in a loop
Adding to a collection and forgetting to clear it
Processing too much data
The JVM and Garbage Collection doesn’t fix your bad
programming it just limits the damage is can cause
This comes at a cost too
C24
14
SERIALISATION
Java Serialisation sucks - full stop!
It’s so bad there are over 2 dozen open source frameworks to replace it
Almost all of the In-Memory Data Grids (IMDGs) have alternatives to
native serialisation
A serialised Java object is usually larger in size than its XML equivalent
Even the process of serialisation and de-serialisation is slow, extremely
slow
We’ll come back to this later
C24
15
ANALYTICS & BIG DATA
There are essentially 4 options
Do it in memory on one machine - fast but limited size
Do it off disk on one machine - slow due to disk I/O and limited CPU
Use distributed memory - faster but not linearly faster than one
machine
Use distributed disk - fast due to more CPU but limited by disk I/O
If we could somehow improve GC, network serialisation
and disk I/O we could vastly improve on the latency
(time for results) and throughput (complexity of results)
Heard of Hadoop and Spark?
C24
16
HADOOP
To run a Hadoop query…
First understand the data you’re analysing so that you can extract it
Write some code to extract, transform and load the data into HBase/
HDFS
This can take days or weeks to code
And can take hours or days to run
Now fire up Hadoop to get your answer - more time because it’s on
disk and distributed - It’s SLOW
Make one small change and you’re back to square one
Query to result can take weeks
C24
17
SPARK
Spark is faster because it runs in memory but it still has the
overhead of Java Serialisation for distribution
There are two modes, cached and un-cached
As the name would suggest un-cached is off disk so we’re back to
serialisation costs again
Spark can use Kryo to improve serialisation, this is good but
means writing code and it’s not practical for complex data
models
Spark is an improvement on Hadoop but still limited by Java
C24
18
LET’S PARK BIG DATA FOR NOW…
We’ll come back to Spark later…
C24
19
IN THE MORE RECENT PAST…
At JAX Finance earlier this year I introduced the idea of
using binary instead of classic Java objects
This is really bringing the skills we used 20 years ago in
C and C++ back into the Java world
As long as your getter() returns the Object you
expected why should you care if it was stored in binary
or as a Java object?
This is after all the beauty of abstraction
Let’s just see what this does again…
C24
20
SAME API, JUST BINARY
Classic getter and setter vs. binary implementation
Identical API
C24
21
JUST AN EXAMPLE…
Classic getter and setter vs. binary implementation
Identical API
C24
22
TIME TO ACCESS DATA…
I scaled by 1 million times simply because that’s roughly the ratio between an modern airplane and the
speed of light
Event Latency (approx.) Scaled x 1
million1 CPU cycle 0.3 ns (3.5 GHz) 0.3 ms (3.5 KHz)
Level 1 cache access 0.9 ns 0.9 ms
Level 2 cache access 2.8 ns 2.8 ms
Level 3 cache access 12.9 ns 12.9 ms
Main memory access (DRAM) 120 ns 120ms (1/8th sec)
Solid-state disk I/O (SSD) 50-150 µs 50 - 150 seconds
Read 1MB sequentially from SSD 1 ms 17 minutes
Rotational Disk I/0 1-10 ms 17 mins-2.8 hours
Read 1MB sequentially from Disk 20 ms 5.6 hours
Network SF to NY (round trip) 40 ms 11 hours
Network London to Tokyo (round trip) 81 ms 1 day
Network SF to Oz (round trip) 183 ms 2 days
TCP packet retransmit 1-3 s 2-6 weeks
C24
23
COMPARING…
These two graphs show the GC pause time during
message creation and serialisation
Left is “classic” Java
Right is the binary version
The top of the right hand graph is lower than the first rung of the left
(50ms)
C24
24
COMPARING…
These two graphs show the GC pause time during
message creation and serialisation
Left is “classic” Java
Right is the binary version
The top of the right hand graph is lower than the first
rung of the left (50ms)
C24
25
SERIALISATION
Serialisation was compared (by a client) to several dozen
serialisation frameworks
The test framework can be found here:
https://github.com/eishay/jvm-serializers/
Preon was either at the top or within 5%

of the top
However the use-case was very

simple, SDOs work better with more

complex models
0 500 1000 1500 2000 2500 3000 3500
c24(sdo
wobly
wobly(compact
protostuff
protobuf/protostuff
fst(flat(pre
protobuf/protostuff(runtime
kryo(opt
protobuf
protostuff(graph
protostuff(graph(runtime
thrift
json/dsl(platform
fst(flat
smile/jackson/manual
json/fastjson/databind
cbor/jackson/manual
jboss(marshalling(river(ct(manual
msgpack/manual
scala/sbinary
Serialise
Deserialise
0 5000 10000 15000 20000 25000 30000 35000 40000
c24(sdo
wobly
wobly(compact
protostuff
protobuf/protostuff
fst(flat(pre
protobuf/protostuff(runtime
kryo(opt
protobuf
protostuff(graph
protostuff(graph(runtime
thrift
json/dsl(platform
fst(flat
smile/jackson/manual
json/fastjson/databind
cbor/jackson/manual
jboss(marshalling(river(ct(manual
msgpack/manual
scala/sbinary
msgpack/databind
smile/jackson+afterburner/databind
avro(specific
json(col/jackson/databind
cbor/jackson+afterburner/databind
fst
smile/jackson/databind
json/jackson/manual
json/protostuff(manual
jboss(marshalling(river(ct
json/jackson(jr/databind
xml/aalto(manual
json/json(smart/manual(tree
xml/woodstox(manual
json/gson/manual
xml/jackson/databind
hessian
json/gson/manual(tree
xml/javolution/manual
xml/xstream+c(fastinfo
xml/xstream+c(aalto
json/org.json/manual(tree
xml/xstream+c(woodstox
bson/mongodb/manual
xml/exi(manual
xml/xstream+c
jboss(marshalling(river
java(built(in
java(built(in(serializer
Serialise
Deserialise
C24
26
SERIALISATION
Serialisation was compared (by a client) to several dozen
serialisation frameworks
The test framework can be found here:
https://github.com/eishay/jvm-serializers/
C24 is either at the top or within 5%

of the top
However the use-case was very

simple, SDOs work better with more

complex models
0 5000 10000 15000 20000 25000 30000 35000 40000
c24(sdo
wobly
wobly(compact
protostuff
protobuf/protostuff
fst(flat(pre
protobuf/protostuff(runtime
kryo(opt
protobuf
protostuff(graph
protostuff(graph(runtime
thrift
json/dsl(platform
fst(flat
smile/jackson/manual
json/fastjson/databind
cbor/jackson/manual
jboss(marshalling(river(ct(manual
msgpack/manual
scala/sbinary
msgpack/databind
smile/jackson+afterburner/databind
avro(specific
json(col/jackson/databind
cbor/jackson+afterburner/databind
fst
smile/jackson/databind
json/jackson/manual
json/protostuff(manual
jboss(marshalling(river(ct
json/jackson(jr/databind
xml/aalto(manual
json/json(smart/manual(tree
xml/woodstox(manual
json/gson/manual
xml/jackson/databind
hessian
json/gson/manual(tree
xml/javolution/manual
xml/xstream+c(fastinfo
xml/xstream+c(aalto
json/org.json/manual(tree
xml/xstream+c(woodstox
bson/mongodb/manual
xml/exi(manual
xml/xstream+c
jboss(marshalling(river
java(built(in
java(built(in(serializer
Serialise
Deserialise
0 500 1000 1500 2000 2500 3000 3500
c24(sdo
wobly
wobly(compact
protostuff
protobuf/protostuff
fst(flat(pre
protobuf/protostuff(runtime
kryo(opt
protobuf
protostuff(graph
protostuff(graph(runtime
thrift
json/dsl(platform
fst(flat
smile/jackson/manual
json/fastjson/databind
cbor/jackson/manual
jboss(marshalling(river(ct(manual
msgpack/manual
scala/sbinary
Serialise
Deserialise
C24
27
SDOS & IMDGS
Performance and memory gain can be very significant
The following demonstrates different storage capacity of XML,
standard Java vs binary for storing XML (in this case FpML and
ISO-20022)
The IMDG in this specific case is Coherence but others are similar
C24
28
BINARY WITH SPARK
Compare the red (cached memory) and there’s no
difference but compare cached disk
Since binary serialisation to/from disk is almost cost-
free we see almost no degradation from disk to memory
Using binary with disk

is about 20 times faster

than the best alternative

and less than half the

speed of cached

memory
Using binary on disk with Spark offers the volumes of
Hadoop and performance of Spark
C24
29
WHAT’S LEFT TO TALK ABOUT?
Spring, Groovy, C#, Go, Scala, Clojure, Swift
MicroServices, Docker, CloudFoundry
ESBs, SOA, JEE
Databases, RDBMS and NoSQL
In-Memory Data Grids (IMDGs)
Cloud
IoT
PaaS / SaaS / IaaS / YaSaaS
Virtualisation
C24
30
NO MORE TIME SADLY
Spring, Groovy, C#, Go, Scala, Clojure, Swift
MicroServices, Docker, CloudFoundry
ESBs, SOA, JEE
Databases, RDBMS and NoSQL
In-Memory Data Grids (IMDGs)
Cloud
IoT
PaaS / SaaS / IaaS / YaSaaS
Virtualisation
C24
31
SPRING BOOT
Spring Boot is becoming the de facto framework for Java-
based applications
With very little else a Spring Boot application can be deployed
on a local machine, onto a server, a data centre (private cloud)
or the cloud (a data centre where you don’t know the addrsss)
Unless you’re going enterprise scale with configurable
workflow, high availability, automated scalability then it’s
difficult to justify MicroServices
Given the option we use Spring Boot with our clients and they
seem to get hooked on the simplicity and power
C24
32
MICROSERVICES
There are two types of MicroService or two main “needs”
To be able to package the entire application and deploy it in one go
To be able to manage deployment and life-cycle of large scale systems
The Java Virtual Machine with Spring Boot and Maven
(cough splutter) goes a long way to providing all the
functionality of the first need
At enterprise scale then we need more than a packaged
application - Cloud Foundry / BlueMix etc.
This is usually in the realm of the Dev Ops guys (and gals) not the Java/
Spring programmer
In a perfect world programmers need an abstraction from MicroServices
implementations, Spring Boot goes a long way to providing this
C24
33
TIME IS SHORT…
… but hopefully time for a few questions…
@jtdavies
THANK YOU!
@jtdavies

More Related Content

Viewers also liked

Events on the outside, on the inside and at the core - Chris Richardson
Events on the outside, on the inside and at the core - Chris RichardsonEvents on the outside, on the inside and at the core - Chris Richardson
Events on the outside, on the inside and at the core - Chris Richardson
JAXLondon_Conference
 
A pattern language for microservices - Chris Richardson
A pattern language for microservices - Chris RichardsonA pattern language for microservices - Chris Richardson
A pattern language for microservices - Chris Richardson
JAXLondon_Conference
 
3c experimenting and interpreting data
3c experimenting and interpreting data3c experimenting and interpreting data
3c experimenting and interpreting data
majumalon
 
DevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve Poole
DevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve PooleDevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve Poole
DevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve Poole
JAXLondon_Conference
 
Siete dolores ang pitong hapis ng mahal
Siete dolores   ang pitong hapis ng mahalSiete dolores   ang pitong hapis ng mahal
Siete dolores ang pitong hapis ng mahal
majumalon
 
Design & Implementation of Microservices - James Lewis
Design & Implementation of Microservices - James LewisDesign & Implementation of Microservices - James Lewis
Design & Implementation of Microservices - James Lewis
JAXLondon_Conference
 
Disaster Risk reduction
Disaster Risk reductionDisaster Risk reduction
Disaster Risk reduction
majumalon
 
Define operationally final
Define operationally finalDefine operationally final
Define operationally final
majumalon
 
Analyzing and interpreting power point
Analyzing and interpreting power pointAnalyzing and interpreting power point
Analyzing and interpreting power point
majumalon
 
Experiment powerpoint
Experiment powerpointExperiment powerpoint
Experiment powerpoint
majumalon
 
Nutri quiz ppt
Nutri quiz pptNutri quiz ppt
Nutri quiz ppt
majumalon
 
Drug awareness
Drug awarenessDrug awareness
Drug awareness
majumalon
 
Science Teaching Approaches and Strategies
Science Teaching Approaches and  Strategies Science Teaching Approaches and  Strategies
Science Teaching Approaches and Strategies
majumalon
 

Viewers also liked (13)

Events on the outside, on the inside and at the core - Chris Richardson
Events on the outside, on the inside and at the core - Chris RichardsonEvents on the outside, on the inside and at the core - Chris Richardson
Events on the outside, on the inside and at the core - Chris Richardson
 
A pattern language for microservices - Chris Richardson
A pattern language for microservices - Chris RichardsonA pattern language for microservices - Chris Richardson
A pattern language for microservices - Chris Richardson
 
3c experimenting and interpreting data
3c experimenting and interpreting data3c experimenting and interpreting data
3c experimenting and interpreting data
 
DevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve Poole
DevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve PooleDevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve Poole
DevOps and the cloud: all hail the (developer) king - Daniel Bryant, Steve Poole
 
Siete dolores ang pitong hapis ng mahal
Siete dolores   ang pitong hapis ng mahalSiete dolores   ang pitong hapis ng mahal
Siete dolores ang pitong hapis ng mahal
 
Design & Implementation of Microservices - James Lewis
Design & Implementation of Microservices - James LewisDesign & Implementation of Microservices - James Lewis
Design & Implementation of Microservices - James Lewis
 
Disaster Risk reduction
Disaster Risk reductionDisaster Risk reduction
Disaster Risk reduction
 
Define operationally final
Define operationally finalDefine operationally final
Define operationally final
 
Analyzing and interpreting power point
Analyzing and interpreting power pointAnalyzing and interpreting power point
Analyzing and interpreting power point
 
Experiment powerpoint
Experiment powerpointExperiment powerpoint
Experiment powerpoint
 
Nutri quiz ppt
Nutri quiz pptNutri quiz ppt
Nutri quiz ppt
 
Drug awareness
Drug awarenessDrug awareness
Drug awareness
 
Science Teaching Approaches and Strategies
Science Teaching Approaches and  Strategies Science Teaching Approaches and  Strategies
Science Teaching Approaches and Strategies
 

Similar to Architecting for a scalable enterprise - John Davies

JAX London 2015 - Architecting a Highly Scalable Enterprise
JAX London 2015 - Architecting a Highly Scalable EnterpriseJAX London 2015 - Architecting a Highly Scalable Enterprise
JAX London 2015 - Architecting a Highly Scalable Enterprise
C24 Technologies
 
Visualizing Messages in Apache Kafka
Visualizing Messages in Apache KafkaVisualizing Messages in Apache Kafka
Visualizing Messages in Apache Kafka
confluent
 
Future Of Databases (1st Version)
Future Of Databases (1st Version)Future Of Databases (1st Version)
Future Of Databases (1st Version)
Javeed Hussain
 
Jun Union Clac Strom
Jun Union Clac StromJun Union Clac Strom
Jun Union Clac Strom
David Strom
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
Anne Nicolas
 
Web TCard - Speed optimization
Web TCard - Speed optimizationWeb TCard - Speed optimization
Web TCard - Speed optimization
Eric Guo
 
The Architect's Two Hats
The Architect's Two HatsThe Architect's Two Hats
The Architect's Two Hats
Ben Stopford
 
Technology Disruption
Technology DisruptionTechnology Disruption
Technology Disruption
Inside Analysis
 
Introduction to Big Data
Introduction to Big DataIntroduction to Big Data
Introduction to Big Data
Albert Bifet
 
Sql server 2016 it just runs faster sql bits 2017 edition
Sql server 2016 it just runs faster   sql bits 2017 editionSql server 2016 it just runs faster   sql bits 2017 edition
Sql server 2016 it just runs faster sql bits 2017 edition
Bob Ward
 
Inoreader OpenNebula + StorPool migration
Inoreader OpenNebula + StorPool migrationInoreader OpenNebula + StorPool migration
Inoreader OpenNebula + StorPool migration
OpenNebula Project
 
Exascale Capabl
Exascale CapablExascale Capabl
Exascale Capabl
Sagar Dolas
 
Bandwidth, Throughput, Iops, And Flops
Bandwidth, Throughput, Iops, And FlopsBandwidth, Throughput, Iops, And Flops
Bandwidth, Throughput, Iops, And Flops
billmenger
 
Making the Most of In-Memory: More than Speed
Making the Most of In-Memory: More than SpeedMaking the Most of In-Memory: More than Speed
Making the Most of In-Memory: More than Speed
Inside Analysis
 
SQL Server It Just Runs Faster
SQL Server It Just Runs FasterSQL Server It Just Runs Faster
SQL Server It Just Runs Faster
Bob Ward
 
Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)
Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)
Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)
Spark Summit
 
Vectorization whitepaper
Vectorization whitepaperVectorization whitepaper
Vectorization whitepaper
VIVEKSINGH634333
 
19th Session.pptx
19th Session.pptx19th Session.pptx
19th Session.pptx
IkhwaniSaputra
 
Spanner : Google' s Globally Distributed Database
Spanner : Google' s Globally Distributed DatabaseSpanner : Google' s Globally Distributed Database
Spanner : Google' s Globally Distributed Database
Ahmedmchayaa
 
Basic course
Basic courseBasic course
Basic course
Rabin Debnath
 

Similar to Architecting for a scalable enterprise - John Davies (20)

JAX London 2015 - Architecting a Highly Scalable Enterprise
JAX London 2015 - Architecting a Highly Scalable EnterpriseJAX London 2015 - Architecting a Highly Scalable Enterprise
JAX London 2015 - Architecting a Highly Scalable Enterprise
 
Visualizing Messages in Apache Kafka
Visualizing Messages in Apache KafkaVisualizing Messages in Apache Kafka
Visualizing Messages in Apache Kafka
 
Future Of Databases (1st Version)
Future Of Databases (1st Version)Future Of Databases (1st Version)
Future Of Databases (1st Version)
 
Jun Union Clac Strom
Jun Union Clac StromJun Union Clac Strom
Jun Union Clac Strom
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Web TCard - Speed optimization
Web TCard - Speed optimizationWeb TCard - Speed optimization
Web TCard - Speed optimization
 
The Architect's Two Hats
The Architect's Two HatsThe Architect's Two Hats
The Architect's Two Hats
 
Technology Disruption
Technology DisruptionTechnology Disruption
Technology Disruption
 
Introduction to Big Data
Introduction to Big DataIntroduction to Big Data
Introduction to Big Data
 
Sql server 2016 it just runs faster sql bits 2017 edition
Sql server 2016 it just runs faster   sql bits 2017 editionSql server 2016 it just runs faster   sql bits 2017 edition
Sql server 2016 it just runs faster sql bits 2017 edition
 
Inoreader OpenNebula + StorPool migration
Inoreader OpenNebula + StorPool migrationInoreader OpenNebula + StorPool migration
Inoreader OpenNebula + StorPool migration
 
Exascale Capabl
Exascale CapablExascale Capabl
Exascale Capabl
 
Bandwidth, Throughput, Iops, And Flops
Bandwidth, Throughput, Iops, And FlopsBandwidth, Throughput, Iops, And Flops
Bandwidth, Throughput, Iops, And Flops
 
Making the Most of In-Memory: More than Speed
Making the Most of In-Memory: More than SpeedMaking the Most of In-Memory: More than Speed
Making the Most of In-Memory: More than Speed
 
SQL Server It Just Runs Faster
SQL Server It Just Runs FasterSQL Server It Just Runs Faster
SQL Server It Just Runs Faster
 
Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)
Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)
Making Sense of Spark Performance-(Kay Ousterhout, UC Berkeley)
 
Vectorization whitepaper
Vectorization whitepaperVectorization whitepaper
Vectorization whitepaper
 
19th Session.pptx
19th Session.pptx19th Session.pptx
19th Session.pptx
 
Spanner : Google' s Globally Distributed Database
Spanner : Google' s Globally Distributed DatabaseSpanner : Google' s Globally Distributed Database
Spanner : Google' s Globally Distributed Database
 
Basic course
Basic courseBasic course
Basic course
 

More from JAXLondon_Conference

The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursThe Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
JAXLondon_Conference
 
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerStop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
JAXLondon_Conference
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
JAXLondon_Conference
 
VC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerVC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian Colyer
JAXLondon_Conference
 
Use your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarUse your type system; write less code - Samir Talwar
Use your type system; write less code - Samir Talwar
JAXLondon_Conference
 
Thinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantThinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel Bryant
JAXLondon_Conference
 
The java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenThe java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie Allen
JAXLondon_Conference
 
Spring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerSpring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave Syer
JAXLondon_Conference
 
Microservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsMicroservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly Cummins
JAXLondon_Conference
 
Love your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzLove your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von Zitzewitz
JAXLondon_Conference
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
JAXLondon_Conference
 
Java vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris BaileyJava vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris Bailey
JAXLondon_Conference
 
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJava generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
JAXLondon_Conference
 
Java 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJava 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen Colebourne
JAXLondon_Conference
 
Intuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordIntuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin Stopford
JAXLondon_Conference
 
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos ErotocritouHybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
JAXLondon_Conference
 
How to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia MrowcaHow to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia Mrowca
JAXLondon_Conference
 
Getting started with Spring Cloud - Dave Syer
Getting started with Spring Cloud - Dave SyerGetting started with Spring Cloud - Dave Syer
Getting started with Spring Cloud - Dave Syer
JAXLondon_Conference
 
Garbage Collection Pause Times - Angelika Langer
Garbage Collection Pause Times - Angelika LangerGarbage Collection Pause Times - Angelika Langer
Garbage Collection Pause Times - Angelika Langer
JAXLondon_Conference
 
From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...
From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...
From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...
JAXLondon_Conference
 

More from JAXLondon_Conference (20)

The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursThe Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
 
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerStop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
 
VC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerVC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian Colyer
 
Use your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarUse your type system; write less code - Samir Talwar
Use your type system; write less code - Samir Talwar
 
Thinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantThinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel Bryant
 
The java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenThe java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie Allen
 
Spring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerSpring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave Syer
 
Microservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsMicroservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly Cummins
 
Love your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzLove your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von Zitzewitz
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Java vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris BaileyJava vs. Java Script for enterprise web applications - Chris Bailey
Java vs. Java Script for enterprise web applications - Chris Bailey
 
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJava generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
 
Java 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJava 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen Colebourne
 
Intuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordIntuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin Stopford
 
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos ErotocritouHybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
 
How to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia MrowcaHow to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia Mrowca
 
Getting started with Spring Cloud - Dave Syer
Getting started with Spring Cloud - Dave SyerGetting started with Spring Cloud - Dave Syer
Getting started with Spring Cloud - Dave Syer
 
Garbage Collection Pause Times - Angelika Langer
Garbage Collection Pause Times - Angelika LangerGarbage Collection Pause Times - Angelika Langer
Garbage Collection Pause Times - Angelika Langer
 
From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...
From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...
From 1 RPM to 1,000 RPM - succeeding in a software-defined economy - Sacha La...
 

Recently uploaded

Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Undress Baby
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
Yara Milbes
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 

Recently uploaded (20)

Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 

Architecting for a scalable enterprise - John Davies

  • 2. C24 2 PROBLEMS DON’T CHANGE, THEY JUST GET BIGGER I’ve been working for 30 years now and I just see the same problems over and over again - History repeating itself It’s true we have some new ones but they’re just reincarnations of the old ones You could argue that IoT, social media & eCommerce are all new (since I started anyway) but the problems are the same… Massive volumes of data It needs parsing, filtering, sorting, analysing, alerts, triggers, reporting, compliance… Same ol’ same ol’.
  • 3. C24 3 30-ISH YEARS AGO I can remember in 1987 we re-wrote a trading system in Objective-C In those days there was a “war” between Objective-C and C++ History tells us C++ won but it wasn’t a clear victory as Apple shows us today Anyway, one of the problems we had was loading in all of the exchange rates as the system started up We used 80386s (the latest 32 bit CPU) The big machines had 1MB (yes 1 mega bytes) of RAM WAN was a 2400 baud modem (2.4k bits ber second) Network was 1MB token-ring (40k/sec on a good day) 20MB hard-disk on the top machines (80ms access time)
  • 4. C24 4 SOUND FAMILIAR? Hundreds of currency pairs (USD/GBP) - remember pre-Euro so more currencies A dozen forward rates (spot, 1 week, 1 month etc.) Several changes per second (coming down the modem @ 2400 baud) These are some of the problems we faced… When the machines started up in the morning it
 took along time to get the current snap-shot to the trader’s machines Each new rate (GBP/USD=1.68750) took a long time to update on the clients machines, something do to the new Object Oriented model we’d used Querying the data was slow Storing and querying the historic data presented serious issues
  • 5. C24 5 HARDWARE TO THE RESCUE! You could do in a few seconds on an iPhone what took a day to do in those days but that’s thanks to the hardware changes NOT THE SOFTWARE The problems and architecture remain the same, we just have a lot more data because we’re now global We want every trade quoted on every exchange in every country on every trader’s desk in every office in every country Competition has just meant that as soon as one bank does it, you have to do better otherwise you lose the deals and go bankrupt
  • 6. C24 6 IT’S NOT JUST THE CPU Networks speeds 20 years ago we used wired modems 38k (bits) was
 good, we now expect mobile networks to give us 50+MB,
 that’s >1000X Screens My laptop (2 years old) is 2880x1800 and “full colour”, 20 years ago 1024x768 in 16 colours was good but the real change is 3D & OpenGL etc. Low res 3D pie charts needed a maths co-processor to display them in under a second today we expect realistic 3D in real-time on full resolution Today’s graphics cards are computers within computers Memory We used to have to page 1MB of RAM in and out (memory banks), today we have 16GB or RAM in a laptop and 128GB of SSD on a keyring
  • 7. C24 7 RAW POWER Apollo 11’s guidance computer had just 2k
 of memory and 32k of read-only storage
 But it got it to the moon - and back! Most of the time :-) The backup was a slide rule Today you can compress a full 1080p
 movie into about 1GB and watch it on your
 mobile phone Why then do we have problems getting XML into memory?
  • 8. C24 8 50 YEARS ON AND MOORE’S LAW IS STILL WITH US His article “Cramming more components onto integrated circuits” predicted the future of transistor density based on a simple doubling every 2 years Every few years we’re told this
 has to end but someone comes
 up with a new idea and it just
 keeps going Eventually it will flatten but it’s got a long way to go yet so there are exciting time ahead
  • 9. C24 9 50 YEARS ON AND MOORE’S LAW IS STILL WITH US His article “Cramming more components onto integrated circuits” predicted the future of transistor density based on a simple doubling every 2 years Every few years we’re told this has to
 end but someone comes up with a new
 idea and it just keeps going Eventually it will flatten but it’s got a
 long way to go yet so there are exciting
 time ahead
  • 10. C24 10 SOFTWARE IS SLOWING US DOWN Programmers are lazy, I’m one, I gave all my demos to someone
 else to write while I write these slides (thanks Iain) We’ve added layer upon layer of abstraction to hide the
 complexity and hardware - Good but it slows things down We simplified programming with drag-n-drop
 now even kindergarten kids can program Twenty years ago Java was introduced to the
 world, it took away all the problems we had
 with memory management and hardware architectures It was cool then and I think it’s still cool now but it does
 have a lot of issues, many of which we can work around
  • 11. C24 11 MY SLIDE FROM 2012 Today my optimisation target is Java itself
  • 12. C24 12 JAVA IS VERBOSE AND SLOW OK, don’t get offended, Java is a great language and small applications are often as fast as C/C++, the JIT compiler is seriously powerful BUT For data high volume processing, distributed computing and analytics Java performance sucks BUT It is still the best we have so we just need to improve the way it works
  • 13. C24 13 GARBAGE COLLECTION Programmers make mistakes, in the days of C/C++ it crashed or hung the machine today it just kills the hangs or crashes the JVM Memory management was supposed to help but you can bring your entire machine to a grinding halt with ease… Concatenating Strings in a loop Adding to a collection and forgetting to clear it Processing too much data The JVM and Garbage Collection doesn’t fix your bad programming it just limits the damage is can cause This comes at a cost too
  • 14. C24 14 SERIALISATION Java Serialisation sucks - full stop! It’s so bad there are over 2 dozen open source frameworks to replace it Almost all of the In-Memory Data Grids (IMDGs) have alternatives to native serialisation A serialised Java object is usually larger in size than its XML equivalent Even the process of serialisation and de-serialisation is slow, extremely slow We’ll come back to this later
  • 15. C24 15 ANALYTICS & BIG DATA There are essentially 4 options Do it in memory on one machine - fast but limited size Do it off disk on one machine - slow due to disk I/O and limited CPU Use distributed memory - faster but not linearly faster than one machine Use distributed disk - fast due to more CPU but limited by disk I/O If we could somehow improve GC, network serialisation and disk I/O we could vastly improve on the latency (time for results) and throughput (complexity of results) Heard of Hadoop and Spark?
  • 16. C24 16 HADOOP To run a Hadoop query… First understand the data you’re analysing so that you can extract it Write some code to extract, transform and load the data into HBase/ HDFS This can take days or weeks to code And can take hours or days to run Now fire up Hadoop to get your answer - more time because it’s on disk and distributed - It’s SLOW Make one small change and you’re back to square one Query to result can take weeks
  • 17. C24 17 SPARK Spark is faster because it runs in memory but it still has the overhead of Java Serialisation for distribution There are two modes, cached and un-cached As the name would suggest un-cached is off disk so we’re back to serialisation costs again Spark can use Kryo to improve serialisation, this is good but means writing code and it’s not practical for complex data models Spark is an improvement on Hadoop but still limited by Java
  • 18. C24 18 LET’S PARK BIG DATA FOR NOW… We’ll come back to Spark later…
  • 19. C24 19 IN THE MORE RECENT PAST… At JAX Finance earlier this year I introduced the idea of using binary instead of classic Java objects This is really bringing the skills we used 20 years ago in C and C++ back into the Java world As long as your getter() returns the Object you expected why should you care if it was stored in binary or as a Java object? This is after all the beauty of abstraction Let’s just see what this does again…
  • 20. C24 20 SAME API, JUST BINARY Classic getter and setter vs. binary implementation Identical API
  • 21. C24 21 JUST AN EXAMPLE… Classic getter and setter vs. binary implementation Identical API
  • 22. C24 22 TIME TO ACCESS DATA… I scaled by 1 million times simply because that’s roughly the ratio between an modern airplane and the speed of light Event Latency (approx.) Scaled x 1 million1 CPU cycle 0.3 ns (3.5 GHz) 0.3 ms (3.5 KHz) Level 1 cache access 0.9 ns 0.9 ms Level 2 cache access 2.8 ns 2.8 ms Level 3 cache access 12.9 ns 12.9 ms Main memory access (DRAM) 120 ns 120ms (1/8th sec) Solid-state disk I/O (SSD) 50-150 µs 50 - 150 seconds Read 1MB sequentially from SSD 1 ms 17 minutes Rotational Disk I/0 1-10 ms 17 mins-2.8 hours Read 1MB sequentially from Disk 20 ms 5.6 hours Network SF to NY (round trip) 40 ms 11 hours Network London to Tokyo (round trip) 81 ms 1 day Network SF to Oz (round trip) 183 ms 2 days TCP packet retransmit 1-3 s 2-6 weeks
  • 23. C24 23 COMPARING… These two graphs show the GC pause time during message creation and serialisation Left is “classic” Java Right is the binary version The top of the right hand graph is lower than the first rung of the left (50ms)
  • 24. C24 24 COMPARING… These two graphs show the GC pause time during message creation and serialisation Left is “classic” Java Right is the binary version The top of the right hand graph is lower than the first rung of the left (50ms)
  • 25. C24 25 SERIALISATION Serialisation was compared (by a client) to several dozen serialisation frameworks The test framework can be found here: https://github.com/eishay/jvm-serializers/ Preon was either at the top or within 5%
 of the top However the use-case was very
 simple, SDOs work better with more
 complex models 0 500 1000 1500 2000 2500 3000 3500 c24(sdo wobly wobly(compact protostuff protobuf/protostuff fst(flat(pre protobuf/protostuff(runtime kryo(opt protobuf protostuff(graph protostuff(graph(runtime thrift json/dsl(platform fst(flat smile/jackson/manual json/fastjson/databind cbor/jackson/manual jboss(marshalling(river(ct(manual msgpack/manual scala/sbinary Serialise Deserialise 0 5000 10000 15000 20000 25000 30000 35000 40000 c24(sdo wobly wobly(compact protostuff protobuf/protostuff fst(flat(pre protobuf/protostuff(runtime kryo(opt protobuf protostuff(graph protostuff(graph(runtime thrift json/dsl(platform fst(flat smile/jackson/manual json/fastjson/databind cbor/jackson/manual jboss(marshalling(river(ct(manual msgpack/manual scala/sbinary msgpack/databind smile/jackson+afterburner/databind avro(specific json(col/jackson/databind cbor/jackson+afterburner/databind fst smile/jackson/databind json/jackson/manual json/protostuff(manual jboss(marshalling(river(ct json/jackson(jr/databind xml/aalto(manual json/json(smart/manual(tree xml/woodstox(manual json/gson/manual xml/jackson/databind hessian json/gson/manual(tree xml/javolution/manual xml/xstream+c(fastinfo xml/xstream+c(aalto json/org.json/manual(tree xml/xstream+c(woodstox bson/mongodb/manual xml/exi(manual xml/xstream+c jboss(marshalling(river java(built(in java(built(in(serializer Serialise Deserialise
  • 26. C24 26 SERIALISATION Serialisation was compared (by a client) to several dozen serialisation frameworks The test framework can be found here: https://github.com/eishay/jvm-serializers/ C24 is either at the top or within 5%
 of the top However the use-case was very
 simple, SDOs work better with more
 complex models 0 5000 10000 15000 20000 25000 30000 35000 40000 c24(sdo wobly wobly(compact protostuff protobuf/protostuff fst(flat(pre protobuf/protostuff(runtime kryo(opt protobuf protostuff(graph protostuff(graph(runtime thrift json/dsl(platform fst(flat smile/jackson/manual json/fastjson/databind cbor/jackson/manual jboss(marshalling(river(ct(manual msgpack/manual scala/sbinary msgpack/databind smile/jackson+afterburner/databind avro(specific json(col/jackson/databind cbor/jackson+afterburner/databind fst smile/jackson/databind json/jackson/manual json/protostuff(manual jboss(marshalling(river(ct json/jackson(jr/databind xml/aalto(manual json/json(smart/manual(tree xml/woodstox(manual json/gson/manual xml/jackson/databind hessian json/gson/manual(tree xml/javolution/manual xml/xstream+c(fastinfo xml/xstream+c(aalto json/org.json/manual(tree xml/xstream+c(woodstox bson/mongodb/manual xml/exi(manual xml/xstream+c jboss(marshalling(river java(built(in java(built(in(serializer Serialise Deserialise 0 500 1000 1500 2000 2500 3000 3500 c24(sdo wobly wobly(compact protostuff protobuf/protostuff fst(flat(pre protobuf/protostuff(runtime kryo(opt protobuf protostuff(graph protostuff(graph(runtime thrift json/dsl(platform fst(flat smile/jackson/manual json/fastjson/databind cbor/jackson/manual jboss(marshalling(river(ct(manual msgpack/manual scala/sbinary Serialise Deserialise
  • 27. C24 27 SDOS & IMDGS Performance and memory gain can be very significant The following demonstrates different storage capacity of XML, standard Java vs binary for storing XML (in this case FpML and ISO-20022) The IMDG in this specific case is Coherence but others are similar
  • 28. C24 28 BINARY WITH SPARK Compare the red (cached memory) and there’s no difference but compare cached disk Since binary serialisation to/from disk is almost cost- free we see almost no degradation from disk to memory Using binary with disk
 is about 20 times faster
 than the best alternative
 and less than half the
 speed of cached
 memory Using binary on disk with Spark offers the volumes of Hadoop and performance of Spark
  • 29. C24 29 WHAT’S LEFT TO TALK ABOUT? Spring, Groovy, C#, Go, Scala, Clojure, Swift MicroServices, Docker, CloudFoundry ESBs, SOA, JEE Databases, RDBMS and NoSQL In-Memory Data Grids (IMDGs) Cloud IoT PaaS / SaaS / IaaS / YaSaaS Virtualisation
  • 30. C24 30 NO MORE TIME SADLY Spring, Groovy, C#, Go, Scala, Clojure, Swift MicroServices, Docker, CloudFoundry ESBs, SOA, JEE Databases, RDBMS and NoSQL In-Memory Data Grids (IMDGs) Cloud IoT PaaS / SaaS / IaaS / YaSaaS Virtualisation
  • 31. C24 31 SPRING BOOT Spring Boot is becoming the de facto framework for Java- based applications With very little else a Spring Boot application can be deployed on a local machine, onto a server, a data centre (private cloud) or the cloud (a data centre where you don’t know the addrsss) Unless you’re going enterprise scale with configurable workflow, high availability, automated scalability then it’s difficult to justify MicroServices Given the option we use Spring Boot with our clients and they seem to get hooked on the simplicity and power
  • 32. C24 32 MICROSERVICES There are two types of MicroService or two main “needs” To be able to package the entire application and deploy it in one go To be able to manage deployment and life-cycle of large scale systems The Java Virtual Machine with Spring Boot and Maven (cough splutter) goes a long way to providing all the functionality of the first need At enterprise scale then we need more than a packaged application - Cloud Foundry / BlueMix etc. This is usually in the realm of the Dev Ops guys (and gals) not the Java/ Spring programmer In a perfect world programmers need an abstraction from MicroServices implementations, Spring Boot goes a long way to providing this
  • 33. C24 33 TIME IS SHORT… … but hopefully time for a few questions… @jtdavies