Backend de extrema performance
Alexandre Gamalinkedin: br.linkedin.com/in/alexandregamatwitter: @alexandregamma
Envie sua dúvida no Twitter!#elo7tech
Agenda
1. Decisões Arquiteturais
Agenda
1. Decisões Arquiteturais2. Arquitetura Real Time
Agenda
1. Decisões Arquiteturais2. Arquitetura Real Time3. Resiliência entre Sistemas
Conversa - Envio da Mensagem
Conversa - Notificação
Conversa - Notificação
Conversa - Leitura da Mensagem
Qual escolher? HTTP HTTP/2 SPDY WebSocket
1. HTTP2. HTTP/23. TCP4. UDP5. WebSocket6. XMPP
HTTP
1. Request / Response
HTTP
1. Request / Response2. Document-centric
HTTP
1. Request / Response2. Document-centric3. Overhead de Headers
HTTP
1. Request / Response2. Document-centric3. Overhead de Headers4. Complexo
HTTP
1. Request / Response2. Document-centric3. Overhead de Headers4. Complexo5. Half-duplex
Como receber a notificação?
Client ficar pedindo?
DDoS Em nós mesmos!
DDoS Em nós mesmos!
HTTP/2
1. Não somente Request/Response
HTTP/2
1. Não somente Request/Response2. Server Push
HTTP/2
1. Não somente Request/Response2. Server Push3. Mulplexing
HTTP/2
1. Não somente Request/Response2. Server Push3. Mulplexing4. Streaming
HTTP/2
1. Não somente Request/Response2. Server Push3. Mulplexing4. Streaming5. Full-duplex
HTTP/2
1. Overhead de Headers
HTTP/2
1. Overhead de Headers2. Document-centric
HTTP/2
1. Overhead de Headers2. Document-centric3. Complexo
HTTP/2
1. Overhead de Headers2. Document-centric3. Complexo4. Amazon não tem suporte :(
WebSockets
1. Protocolo de Transporte
WebSockets
1. Protocolo de Transporte2. Full-duplex
WebSockets
1. Protocolo de Transporte2. Full-duplex3. Streaming
WebSockets
1. Protocolo de Transporte2. Full-duplex3. Streaming4. WebSockets + protocolos = s2
WebSockets
1. Protocolo de Transporte2. Full-duplex3. Streaming4. WebSockets + protocolos = s25. Suporte pelos browsers
WebSockets
1. Protocolo de Transporte2. Full-duplex3. Streaming4. WebSockets + protocolos = s25. Suporte pelos browsers6. Awesome :)
WebSockets = Transporte
Protocolo de Comunicacão
MQTT
1. Protocolo de Comunicação
MQTT
1. Protocolo de Comunicação2. Baixo Overhead
MQTT
1. Protocolo de Comunicação2. Baixo Overhead3. Garantia de Entrega (QoS)
MQTT
1. Protocolo de Comunicação2. Baixo Overhead3. Garantia de Entrega (QoS)4. Simples
MQTT
1. Protocolo de Comunicação2. Baixo Overhead3. Garantia de Entrega (QoS)4. Simples5. Publish/Subscribe
Quality of Service
MQTT - At most once
QoS 0: Fire and Forget
PUBLISH
MQTT - At Least Once
QoS 1: Confirma pra mim que recebeu?
PUBLISH
QoS 1: Confirma pra mim que recebeu?
PUBLISH
PUBACK
MQTT - Exactly Once
QoS 2: Confirma a confirmação que recebeu?
PUBLISH
QoS 2: Confirma a confirmação que recebeu?
PUBLISH
PUBREC
QoS 2: Confirma a confirmação que recebeu?
PUBLISH
PUBREC
PUBREL
QoS 2: Confirma a confirmação que recebeu?
PUBLISH
PUBREC
PUBREL
PUBCOMP
MQTT é um Protocolo
Brokers malandros de MQTT
Brokers malandros de MQTT
Brokers malandros de MQTT
Brokers malandros de MQTT
Brokers malandros de MQTT
Mosquitto - Marotagens
1. Implementação do MQTT 3.0 e 3.1
Mosquitto - Marotagens
1. Implementação do MQTT 3.0 e 3.12. Suporte a WebSockets
Mosquitto - Marotagens
1. Implementação do MQTT 3.0 e 3.12. Suporte a WebSockets3. Baixo consumo de recursos
Mosquitto - Marotagens
1. Implementação do MQTT 3.0 e 3.12. Suporte a WebSockets3. Baixo consumo de recursos4. Implementado em C
Mosquitto - Marotagens
1. Implementação do MQTT 3.0 e 3.12. Suporte a WebSockets3. Baixo consumo de recursos4. Implementado em C5. Leve
WebSockets + MQTT = s2
Protocolo
1. WebSockets
Protocolo
1. WebSockets2. MQTT
Protocolo
1. WebSockets2. MQTT3. Mosquitto
Frances quer a mensagem!
Arquitetura Real Time
Real Time - Envio de Msg
MQTT - Publishmqtt-publisher
MQTT - Publishmqtt-publisher
MQTT - Publishmqtt-publisher
Discovery
MQTT - Publishmqtt-publisher
MQTT - Publish
QoS 0
mqtt-publisher
Pusblish
MQTT - Publish
QoS 0
WebSocket
mqtt-publisher
Pusblish
MQTT - Publish
QoS 0
WebSocket
mqtt-publisher
MQTT
Pusblish
MQTT - Publish
QoS 0
WebSocket
Pusblish
mqtt-publisher
MQTT
Pusblish
MQTT - Publish
QoS 0
WebSocket
Pusblish
mqtt-publisher
QoS 1
MQTT
Pusblish
Real Time - Autenticação
Autenticação
Token
Autenticação
Token
Connect
Autenticação
Token
Connect (Token)
Autenticação
Token
Connect (Token)
Autenticação
Token
Connect (Token)
Token
Autenticação
Token
Connect (Token)
ConnAck
Token
Autenticação
SUBSCRIBE
Autenticação
SUBACK
Autenticação
WebSocket
Real Time - Push
1. Mensagem para o SNS
Real Time - Push
1. Mensagem para o SNS2. Mensagem para o SQS
Real Time - Push
1. Mensagem para o SNS2. Mensagem para o SQS3. MQTT Publisher
Real Time - Push
1. Mensagem para o SNS2. Mensagem para o SQS3. MQTT Publisher4. Mosquitto Discovery
Real Time - Push
1. Mensagem para o SNS2. Mensagem para o SQS3. MQTT Publisher4. Mosquitto Discovery5. Broadcast para Mosquittos
Real Time - Autenticação
1. Frances usa Autenticador
Real Time - Autenticação
1. Frances usa Autenticador2. Token é gerado
Real Time - Autenticação
1. Frances usa Autenticador2. Token é gerado3. Frances -> MQTT Connect
Real Time - Autenticação
1. Frances usa Autenticador2. Token é gerado3. Frances -> MQTT Connect4. Frances -> MQTT Subscription
Real Time - Autenticação
1. Frances usa Autenticador2. Token é gerado3. Frances -> MQTT Connect4. Frances -> MQTT Subscription5. Channel aberto para Push
Real Time - Autenticação
1. Frances usa Autenticador2. Token é gerado3. Frances -> MQTT Connect4. Frances -> MQTT Subscription5. Channel aberto para Push6. Msg é recebida :)
E se der tudo errado?
Fallbacks
1. Timeouts em sequência
Fallbacks
1. Timeouts em sequência2. Objetos no Thread Pool
Fallbacks
1. Timeouts em sequência2. Objetos no Thread Pool3. Chance de recovery
Fallbacks
1. Timeouts em sequência2. Objetos no Thread Pool3. Chance de recovery4. Métricas de fallbacks
Circuit Break State
Hystrix - Marotagens
1. Circuit Break
Hystrix - Marotagens
1. Circuit Break2. Latency and Fault Tolerance
Hystrix - Marotagens
1. Circuit Break2. Latency and Fault Tolerance3. Stop cascading failures
Hystrix - Marotagens
1. Circuit Break2. Latency and Fault Tolerance3. Stop cascading failures4. Resilience Engineering
Hystrix - Marotagens
1. Circuit Break2. Latency and Fault Tolerance3. Stop cascading failures4. Resilience Engineering5. Métricas em Real Time animais! :)
Hystrix - Dashboard Real Time
É isso pessoal! :)
Envie sua dúvida no Twitter!#elo7tech
Wifi: cubo-eventos Senha: cubo2016
Obrigado!
Alexandre Gamalinkedin: br.linkedin.com/in/alexandregamatwitter: @alexandregamma