Concorrência,
baixa latência e
alta disponibilidade
HELLO! Guilherme Roveri
Arquiteto de Software – Grupo Netshoes
@gbroveri
2
Eder Magalhães
Arquiteto de Software – Grupo Netshoes
@edermag
Agenda ▫  Realidade de um e-commerce
▫  Alguns desafios
▫  Caso de uso: Inventário
▫  Arquitetura LMAX
▫  Solução Proposta
▫  Conclusões
▫  Referências
3
Realidade ▫  Negócio dinâmico
▫  Marketing digital agressivo
▫  Oferecer ótima experiência de compra
▫  Evolução contínua nos bastidores
▫  Sazonalidade: Blackfriday
4
Concorrência
Disputa frenética ao acesso a recursos
partilhados…
5
Latência
Intervalo de tempo entre a ação e o
efeito…
6
Disponibilidade
Percentual de tempo em que o sistema
está no ar…
7
Caso de
uso
COMO um provedor e-commerce
PRECISO de um mecanismo robusto
para gerenciar o inventário
PARA evitar perdas
E garantir satisfação dos clientes
8
LMAX ▫  Plataforma para comercialização de
produtos do mercado financeiro para
varejo
▫  Eliminar concorrência
▫  Regras de negócio usando memória
e event sourcing
▫  Alto throughput c/ baixa latência
▫  Ex: 6 milhões de transações por seg
9
LMAX Composto por 3 segmentos:
10
Business
Logic
Processor
▫  Fluxo de negócio
▫  Single thread
▫  Sem acesso a banco de dados
▫  Sem controle transacional
▫  Manipulação em memória
11
Arquitetura
12
Fila + NoSQLProposta de arquitetura c/ Fila e NoSQL p/
solução de controle de inventário
13
Inventário ▫  Operações crédito e débito;
▫  Particionamento de Produtos;
▫  Single thread p/ Consumidor;
14
Inventário
15
Business
Debit / Credit
NoSQL Persistence
REST Endpoint
Message Broker
Inventário
16
Business
Debit / Credit
NoSQL Persistence
Request
REST Endpoint
Message Broker
Inventário
17
Business
Debit / Credit
NoSQL Persistence
Request
Partition
REST Endpoint
Message Broker
Request Queues
Inventário
18
Business
Debit / Credit
NoSQL Persistence
Consumer
Partition
Request
Partition
REST Endpoint
Message Broker
Request Queues
Inventário
19
Business
Debit / Credit
NoSQL Persistence
Consumer
Partition
Request
Partition
REST Endpoint
Message Broker
Request Queues
Inventário
20
Business
Debit / Credit
NoSQL Persistence
Consumer
Partition
Partition
Request
Partition
REST Endpoint
Message Broker
Request Queues
Inventário
21
Business
Debit / Credit
Reply Queues
Consumer
Partition
Partition
NoSQL Persistence
Request
Partition
REST Endpoint
Message Broker
Request Queues
Inventário
22
Request
Business
Debit / Credit
Response
Reply Queues
Partition
Consumer
Partition
Request Queues
Message Broker
Partition
NoSQL Persistence
REST Endpoint
Inventário
Tecnologias
23
Request
Business
Debit / Credit
Response
Reply Queues
Partition
Consumer
Partition
Partition
ü  Spring Java;
ü  Spring Cloud;
ü  RabbitMQ
ü  Cassandra
REST Endpoint
Message Broker
NoSQL Persistence
Request Queues
Conclusão ▫  O drive é o negócio
▫  Experimentar tecnologias
▫  Clean code: testes + testes + testes
24
Referências ▫  https://www.infoq.com/presentations/LMAX
▫  https://github.com/LMAX-Exchange
▫  http://martinfowler.com/articles/lmax.html
▫  http://www.datastax.com/dev/blog/scalable-
inventory
▫  http://henryr.github.io/cap-faq/
▫  http://www.slideshare.net/edermag
25
26
Obrigado Questões?
▫  gbroveri@gmail.com
▫  edermag@gmail.com

DevCommerce Conference 2016: Concorrência em aplicações que exigem baixa latência e alta disponibilidade