Beruflich Dokumente
Kultur Dokumente
WASHINGTON, DC
U n l e s s ot h erwi se i ndi cat ed , t hese sl id es ar e 201 3-2 01 5 P ivo tal So ftwa re, In c. and lic e nse d u nd e r a C re ativ e C ommons Attrib u tion-N onC omme rc ial li c e ns e : h tt p: / / c r ea t i vec o m m o n s .o r g/ l i c en s es / by- n c / 3 .0 /
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
It Depends
https://spring.io/blog/2015/06/17/spring-xd-benchmarks-part-1
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Hardware
Hardware: Network
1 Gb Ethernet
Msg Size
Msgs/Sec
10 Gb Ethernet
Msg Size
Msgs/Sec
100
1,250,000
1,000
125,000
1,000
1,250,000
10,000
12,500
10,000
125,000
100,000
1,250
100,000
12,500
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
100 12,500,000
Hardware: Disk
https://romanrm.net/dd-benchmark
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Message Size
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Message Size
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
10
Transports
Rabbit
perftest
https://www.rabbitmq.com/java-tools.html
Kafka
ProducerPerformance
kafka-consumer-perf-test.sh
https://engineering.linkedin.com/kafka/benchmarking-apachekafka-2-million-writes-second-three-cheap-machines
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
11
Configuration
Kafka
BatchSize
o Default is 16384
o .0.8.2.1 vs .0.8.1.1
Rabbit
prefetch
o Default for XD is 1
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
12
Testing Tools
Spring XD
load-generator-source
throughput
https://github.com/spring-projects/spring-xd-modules
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
13
Batching
Spring AMQP
Batch
Size
Msgs
Per Sec
1
https://github.com/cppwfs/rabbitmqsink
https://github.com/cppwfs/rabbitmqsource
18,465
10 158,564
100 453,926
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
14
Network Hops
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
15
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
16
Object Serialization
POJO
remote processes
XD uses Kryo except when the payload type is
byte[] or String
XD supports optimizing Kryo for known payload
types
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
17
Serialization Benchmarks
An excellent comparative JVM serializers benchmark:
https://github.com/eishay/jvm-serializers/wiki
18
Serialization Benchmarks
Domain Object (as JSON):
{"media":
{"uri": "http://javaone.com/keynote.ogg", "title":"Javaone Keynote", "width":640,
"height":480,
"format":"video/mpg4","duration":18000000,"size":58982400,"bitrate":
262144,"persons":["Bill Gates", "Steven Jobs"],
"player":"JAVA","copyright":"" },
"images":[
{"uri": "http://javaone.com/keynote_large.jpg","title":"Javaone Keynote","width":
1024,"height":768,"size":"LARGE"},
{ "uri": "http://javaone.com/keynote_small.jpg", "title":"Javaone
Keynote","width": 320,"height":240, "size":"SMALL"}]
}
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
19
Object Serialization
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
20
Optimizing Kryo in XD
xd/lib.
21
Custom Serializers in XD
package spring.xd.bus.ext;
...
XD scans this
package for beans of
type KryoRegistrar
@Configuration
Each Registration associates
public class CustomKryoRegistrarConfig {
a type to a serializer and a
@Bean
unique ID
public KryoRegistrar myCustomRegistration() {
List<Registration> registrations = new ArrayList<>();
registrations.add(new Registration(MyObject.class, new MySerializer(),62));
return new KryoRegistrationRegistrar(registrations);
}
public PojoCodec(java.util.List<KryoRegistrar> kryoRegistrars, boolean useReferences)
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
22
Custom Serializers in XD
public class AddressSerializer extends Serializer<Address> {
@Override
public void write(Kryo kryo, Output output, Address address) {
output.writeString(address.getStreet());
output.writeString(address.getCity());
output.writeString(address.getCountry());
}
@Override
public Address read(Kryo kryo, Input input, Class<Address> type) {
return new Address(input.readString(),input.readString(),input.readString());
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
23
@Override
public void write(Kryo kryo, Output output) {
output.writeString(this.street);
output.writeString(this.city);
output.writeString(this.country);
}
@Override
public void read(Kryo kryo, Input input) {
this.street = input.readString();
this.city = input.readString();
this.country = input.readString();
}
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
24
Ser (ns)
Desr (ns)
Baseline
2710.5
4590.9
Serializable Domain
Object
1663.3
2579.1
Custom Serializers
1126.1
2873.8
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
25
26
Mitigating Cost of IO
Negative impact ?
Scale Out ?
o Works up to a point
o Network cost
Scale Up ?
o Message passing Overhead
o More In-Flight Data
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
27
Blocking IO
request A
P
r
o
c
e
s
s
o
r
request B
request C
R
e
m
o
t
e
Request Latency
Network Latency
Sink
Rate Degradation = -(A + B + C) ms
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
28
Asynchronous Boundary
R
e
m
o
t
e
P
r
o
c
e
s
s
o
r
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Request Latency
Network Latency
Sink
29
Asynchronous IO
Mitigate temporarily slow processors/sink
Back to degraded mode when queue full
Async Hand-Off generates Garbage
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
30
31
Ring What?
Event Loop
Thread
read published slot
execute Message<?>
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
32
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
33
@Override
public
Stream<Message>
process(Stream<Message>
inputStream)
{
return
inputStream.map(message
->
new
GenericMessage<String>(message.getPayload()
+
"-pojopong")
);
}
}
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
34
R
e
m
o
t
e
P
r
o
c
e
s
s
o
r
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
Request Latency
Network Latency
Sink
35
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
36
Scatter Gather
public
class
AsyncNetworkProcessor
implements
Processor<Message,
String>
{
@Override
public
Observable<String>
process(Observable<Message>
inputStream)
{
return
inputStream.flatMap(message
->
Observable.zip(
postHttp(/userProfile/
+
message.getHeader(user_id)),
postHttp(/userLocation/
+
message.getHeader(user_id)),
(respA,
respB)
->
respA
+
,
+
respB
)
);
}
public
Observable<String>
postHttp(String
endpoint){
//
An
asynchronous
HTTP
call
to
forward
response
as
CSV
}
}
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
37
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
38
MicroBashing
public
class
AsyncNetworkProcessor
implements
Processor<String,
String>
{
@Override
public
Stream<String>
process(Stream<String>
inputStream)
{
return
inputStream.window(1000,
1,
TimeUnit.SECONDS)
.flatMap(messages
->
messages.reduce(,
(prev,
next)
->
prev
+
,
+
next
)
);
}
}
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
39
Questions
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
40
Spring.io/video
Un l ess otherwi s e indi cate d, t he se sl i des ar e 201 3 - 201 5 P ivo t al So ft war e, Inc . and lic e nse d u nd e r a
C reat iv e Co mmons At tr i butio n-No nComme r cial lic e ns e : ht t p:// cr e at iv ec o mmo n s.o rg /lic e nse s/b y -nc /3 .0/
41