explorando protocolos de serialização de alto desempenho
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.”
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
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)