explorando protocolos de serialização de alto desempenho

31
Explorando protocolos de serialização de alto desempenho Rafael Monteiro e Pereira Software Engineer @ BM&F Bovespa

Upload: rafael-monteiro-e-pereira

Post on 18-Aug-2015

116 views

Category:

Software


0 download

TRANSCRIPT

Explorando protocolos de serialização de alto

desempenhoRafael Monteiro e PereiraSoftware Engineer @ BM&F Bovespa

“Opiniões contidas aqui são exclusivamente minhas e não necessariamente refletem as opiniões do meu empregador.”

99,9% de mensagens processadas com tempo de no máximo alguns milissegundos

Problemas!

Rede!BackPressure!

Performance!

“Cara, não tá dando. Precisa melhorar esse treco”Cara de operações

TestesProfilingPeer Review

não apontaram melhorias evidentes

“Vamos fazer o fácil”“Não temos prazo para isso!”“Essa solução custa caro”Chefe

“Nem sonhe em reescrever 80% da aplicação!”Cara de QA

FFFFFFFF

Google, help me !

Serialização...

XML

JSON

Human Readable BinaryNative ( Java, c++ etc )

Google Protocol Buffers

Google FlatBuffers

Simple Binary Encoding

Muitos outros....

(Mais rápido)

Muito verboso

Human Readable

Schema(XSD, DTD etc)

Typed

Lento….

XML JSONMenos verboso…

Human Readable

Não tem Schema

Browser Friendly

Simples

Typed

Incluso na linguagem

NativeHuman Readable

Browser Friendly

Schema

Interop

Languages: Java, C++, Python

Code Generation

Interop

Typed

Schema

Backward Compatibility

Protocol BuffersHuman Readable

Browser Friendly

Languages: Java, C++, C#, Go, Python

Code Generation

Interop

Typed

Schema

Backward Compatibility

Positional Access

Table Based

FlatBuffersHuman Readable

Browser Friendly

Languagues: C++, Java , C#

Code Generation

Interop

Typed

Schema

Backward Compatibility

Positional Access

Simple Binary Encoding

Human Readable

Browser Friendly

Complexo na utilização de Strings

Focado em Mercado Financeiro

(Menção Honrosa)

Mais alguns dados...

GPB SBE FlatBuffers

Versionamento do Schema

Sim Problemas Sim

Zero-copy Não Sim Sim

Leitura Random-access Não Não Sim

Schema language Proprietário XML Proprietário

Mensagens mutáveis Sim Não Sim

Deserialization1 10 100 1,000 10,000 100,000

Native Java

16,854 ns

JSON578 ns

GPB65 ns

Flat-Buffers

9 ns

1 mensagem

± 902,67

± 7,91

± 0,13

± 0,05

Serialization

1 mensagem

100 1,000 10,000

Native Java

2,923 ns

JSON425 ns

GPB109 ns

Flat-Buffers315 ns

± 32,27

± 13,42

± 1,04

± 12,49

Deserialization

1.000.000 mensagens

1 10 100 1,000 10,000 100,000

Native Java

15,177 ms

JSON408 ms

GPB67 ms

Flat-Buffers7 ms

± 32,27

± 13,42

± 1,04

± 12,49

Serialization

1.000.000 mensagens

100 1,000 10,000

Native Java

2,728 ms

JSON563 ms

GPB110 ms

Flat-Buffers280 ms

± 32,27

± 13,42

± 1,04

± 12,49

Tamanho das Mensagens

1 Mensagem em bytes

0 50 100 150 200 250 300 350 400 450

Native Java

425.00

JSON117.00

GPB56.00

Flat-Buffers104.00

HardwareIntel Core i7 4770K

16GB RAM DDR3 – 2400 mhz

SSD 256 GB

Windows 8.1 x64

Algumas informações...

Software

JDK 1.8 x64 – Update 51

JMH – Warmup e Bencharking

Google Protocol Buffers

FlatBuffers

Jackson(JSON)

Show me the CODE ! Available on: https://github.com/rafamonteiro/SerializationProtocolsBenchMark

Garbage Collector

Stop the World!

Freeze!

Alguma ideias...

MicroServices

ServiceBUS

ZeroMQ

Redis

Obrigado!!!!Feedback ? Contato?

Código ?

E-mail: [email protected]