SlideShare a Scribd company logo
1 of 32
Explorando protocolos
de serialização de alto
desempenho
Rafael Monteiro e Pereira
Software 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!
Garbage Collector
Stop the World!
Freeze!
“Cara, não tá dando.
Precisa melhorar esse
treco”
Cara de operações
Testes
Profiling
Peer 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 Binary
Native ( 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 JSON
Menos verboso…
Human Readable
Não tem Schema
Browser Friendly
Simples
Typed
Incluso na linguagem
Native
Human Readable
Browser Friendly
Schema
Interop
Languages: Java, C++,
Python
Code Generation
Interop
Typed
Schema
Backward Compatibility
Protocol Buffers
Human Readable
Browser Friendly
Languages: Java, C++, C#, Go,
Python
Code Generation
Interop
Typed
Schema
Backward Compatibility
Positional Access
Table Based
FlatBuffers
Human 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 (FIX)
(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
Available on:
https://github.com/rafamonteiro/SerializationProtocolsBenchMark
Hardware
Intel Core i7 4770K
16GB RAM DDR3 – 2400 mhz
SSD 256 GB
Ubuntu 15.04 x64
Algumas informações
sobre o benchmark...
Software
JDK 1.8 x64 – Update 51
JMH – Warmup e Bencharking
Google Protocol Buffers
FlatBuffers
Jackson(JSON)
Deserialization
Native Java
16,854 ns
JSON
578 ns
GPB
65 ns
FlatBuffers
9 ns
1 10 100 1,000 10,000 100,000
1 mensagem
± 902,67
± 7,91
± 0,13
± 0,05
Deserialization
Native Java
16,854 ns
JSON
578 ns
GPB
65 ns
FlatBuffers
9 ns
1 10 100 1,000 10,000 100,000
1 mensagem
± 902,67
± 7,91
± 0,13
± 0,05
Deserialization
1.000.000 mensagens
Native Java
15,177 ms
JSON
408 ms
GPB
67 ms
FlatBuffers
7 ms
1 10 100 1,000 10,000 100,000
± 32,27
± 13,42
± 1,04
± 12,49
Serialization
1 mensagem
Native Java
2,923 ns
JSON
425 ns
GPB
109 ns
FlatBuffers
315 ns
1 10 100 1,000 10,000
± 32,27
± 13,42
± 1,04
± 12,49
Serialization
1.000.000 mensagens
Native Java
2,728 ms
JSON
563 ms
GPB
110 ms
FlatBuffers
280 ms
1 10 100 1,000 10,000
± 32,27
± 13,42
± 1,04
± 12,49
Tamanho das Mensagens
1 Mensagem em bytes
Native Java
425.00
JSON
117.00
GPB
56.00
FlatBuffers
104.00
0 50 100 150 200 250 300 350 400 450
Alguma ideias...
MicroServices
ServiceBUS
ZeroMQ
Redis
Obrigado!!!!
Feedback ? Contato ?
Blog: rafamonteiro.io (soon)
E-mail: rafael@rafamonteiro.io
Github: github.com/rafamonteiro
Twitter: @RafaMonteiro_Io

More Related Content

What's hot (6)

Trabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQLTrabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQL
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website Cacheavel
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
Introducão ao Grok - PyConBrasil 3
Introducão ao Grok - PyConBrasil 3Introducão ao Grok - PyConBrasil 3
Introducão ao Grok - PyConBrasil 3
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Lua em transmissões ao vivo
Lua em transmissões ao vivoLua em transmissões ao vivo
Lua em transmissões ao vivo
 

Viewers also liked

Viewers also liked (8)

Unum Computing: An Energy Efficient and Massively Parallel Approach to Valid ...
Unum Computing: An Energy Efficient and Massively Parallel Approach to Valid ...Unum Computing: An Energy Efficient and Massively Parallel Approach to Valid ...
Unum Computing: An Energy Efficient and Massively Parallel Approach to Valid ...
 
Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013Workers of the web - BrazilJS 2013
Workers of the web - BrazilJS 2013
 
University of arizona mobile matters - technology, a means to an end
University of arizona   mobile matters - technology, a means to an endUniversity of arizona   mobile matters - technology, a means to an end
University of arizona mobile matters - technology, a means to an end
 
Real Time Recommendations Using WebSockets and Redis - Ninad Divadkar, Inuit
Real Time Recommendations Using WebSockets and Redis - Ninad Divadkar, InuitReal Time Recommendations Using WebSockets and Redis - Ninad Divadkar, Inuit
Real Time Recommendations Using WebSockets and Redis - Ninad Divadkar, Inuit
 
Introducing AWS IoT - Interfacing with the Physical World - Technical 101
Introducing AWS IoT - Interfacing with the Physical World - Technical 101Introducing AWS IoT - Interfacing with the Physical World - Technical 101
Introducing AWS IoT - Interfacing with the Physical World - Technical 101
 
Leveraging Kafka for Big Data in Real Time Bidding, Analytics, ML & Campaign ...
Leveraging Kafka for Big Data in Real Time Bidding, Analytics, ML & Campaign ...Leveraging Kafka for Big Data in Real Time Bidding, Analytics, ML & Campaign ...
Leveraging Kafka for Big Data in Real Time Bidding, Analytics, ML & Campaign ...
 
Blockchain and Bitcoin: Why You Should Care
Blockchain and Bitcoin: Why You Should CareBlockchain and Bitcoin: Why You Should Care
Blockchain and Bitcoin: Why You Should Care
 
Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...
Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...
Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...
 

Similar to Explorando protocolos de serialização de alto desempenho

Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Vinicius Reis
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
elliando dias
 

Similar to Explorando protocolos de serialização de alto desempenho (20)

PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
 
Performance em Java
Performance em JavaPerformance em Java
Performance em Java
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
 
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
Dicas e Truques de Performance: Como obter o maximo do Windows Server 2008 R2...
 
Programação Eficaz - Agile Trends Floripa 2016
Programação Eficaz -  Agile Trends Floripa 2016Programação Eficaz -  Agile Trends Floripa 2016
Programação Eficaz - Agile Trends Floripa 2016
 
Como se tornar um viciado em performance em 5 passos
Como se tornar um viciado em performance em 5 passosComo se tornar um viciado em performance em 5 passos
Como se tornar um viciado em performance em 5 passos
 
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Primeiros passos com Nerves (Elixir para dispositivos embarcados)Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Performance mobile: eleições 2014
Performance mobile: eleições 2014Performance mobile: eleições 2014
Performance mobile: eleições 2014
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e feature
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
Case Kinghost + Elasticsearch
Case Kinghost + ElasticsearchCase Kinghost + Elasticsearch
Case Kinghost + Elasticsearch
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 

More from Rafael Monteiro e Pereira

More from Rafael Monteiro e Pereira (6)

Kubeflow - a caixa de ferramentas para tirar seus modelos do notebook e coloc...
Kubeflow - a caixa de ferramentas para tirar seus modelos do notebook e coloc...Kubeflow - a caixa de ferramentas para tirar seus modelos do notebook e coloc...
Kubeflow - a caixa de ferramentas para tirar seus modelos do notebook e coloc...
 
Microservices: Patterns & Practices
Microservices: Patterns & PracticesMicroservices: Patterns & Practices
Microservices: Patterns & Practices
 
Inside the JVM - Performance & Garbage Collector Tuning in JAVA
Inside the JVM - Performance & Garbage Collector Tuning in JAVA Inside the JVM - Performance & Garbage Collector Tuning in JAVA
Inside the JVM - Performance & Garbage Collector Tuning in JAVA
 
Do mainframe para java, microservices e big data
Do mainframe para java, microservices e big dataDo mainframe para java, microservices e big data
Do mainframe para java, microservices e big data
 
Cassandra o que nao te contaram
Cassandra   o que nao te contaramCassandra   o que nao te contaram
Cassandra o que nao te contaram
 
Java for ultra low latency applications
Java for ultra low latency applicationsJava for ultra low latency applications
Java for ultra low latency applications
 

Explorando protocolos de serialização de alto desempenho