SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Apps assíncronos com
Tornado
Case: Buddy Rich, API de pagamentos
Quem somos
Arnaldo de Moraes Pereira
C, Python, Golang
Predicta, startups
Daniel Urbano
Ruby, Python
Bioritmo, Abril
LuizaLabs
P&D do Magazine Luiza
~70 pessoas
177 projetos no github
12 forks / projetos open
source
TI dos canais de venda
API de pagamentos
Buddy Rich
“Tipo um proxy, em até 2 semanas estará pronto”
Receita do Magazine em 2014: > R$ 12 BI
Apenas site: ~20%
Precisa ser PCI compliant (wtf?)
Como funciona?
Site -> Buddy -> Gateway
Gateway -> Adquirente -> Bandeira -> Emissor/Banco
Buddy -> Análise de Risco
Buddy -> Site
O que usar?
Java?
Ruby?
PHP?
O que usar?
É claro.
Stack
Simples
Eficiente, estável, escalável
Seguro
Transacional
Divertido
Web: Tornado
Eficiente, estável, escalável
Simples - se bem escrito!
Transição simples de sync
pra async
Django -> Tornado
Não faz mágica
Usamos há anos
O que é Tornado?
Web server e framework
Library assíncrona
Usa nonblocking
networking IO
Um dos primeiros web
frameworks assíncronos
twisted
Async http client: 1 request
class MyHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response = yield http_client.fetch("http://example.com")
Async http client: 1+n
requests
class MyHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response1, response2 = yield [http_client.fetch(url1),
http_client.fetch(url2)]
Buddy Rich
mais sobre a stack
Ansible: provisionamento de ambientes
AWS
EC2, DynamoDB, RDS, SQS, S3
SQLAlchemy
scoped session, criada no hook 'prepare' do
RequestHandler
Newrelic, logentries, notificações para o slack
Buddy Rich
problemas
Comunicação com o
Gateway de pagamento
a lib de integração
existente é síncrona
Buddy Rich
soluções
Fork da lib de integração
com o gateway
Melhorias
Async com
AsyncHTTPClient
logging PCI-compliant
Junto criamos o
asyncreplay
Buddy Rich
problemas
Muitos timeouts no
gateway de pagamento
Isso não pode impedir a
compra
Como receber sem
receber?
Buddy Rich
soluções
Fluxo de aceite do pagamento e
pós-processamento
Dados do cartão salvos de
forma segura
Worker async os consome e
adiciona ao início do fluxo
Buddy notifica resultado do pós-
processamento quando o tiver
Tipo um Future para pagamento
O que não foi legal
MUITAS regras de negócio no processo
Necessidade de sempre lidar com erros de terceiros
Buracos no fluxo foram descobertos apenas em
produção
O que foi legal
LuizaLabs agora usa frameworks assíncronos
(Tornado, Cyclone e Asyncio) com tanta naturalidade
quanto usa Django
Deployments sem qualquer downtime
Muitos testes unitários e de integração
Testes que fazem sentido
O que foi legal
Retentativa automática
de transações
anteriormente
"perdidas"
Aumento da conversão
no checkout do site! $_$
Obrigado!
arnaldo@luizalabs.com
urbano@luizalabs.com
http://luizalabs.com
http://github.com/
luizalabs
https://twitter.com/
luizalabs
http://99jobs.com/
luizalabs

Weitere ähnliche Inhalte

Ähnlich wie Apps assíncronos com Tornado - API de pagamentos

Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
David Robert Camargo de Campos
 

Ähnlich wie Apps assíncronos com Tornado - API de pagamentos (20)

Construção de APIs para apps móveis
Construção de APIs para apps móveisConstrução de APIs para apps móveis
Construção de APIs para apps móveis
 
Goldark@w3c - Web's got Talent 2014
Goldark@w3c - Web's got Talent 2014Goldark@w3c - Web's got Talent 2014
Goldark@w3c - Web's got Talent 2014
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
 
Programando em ruby para arduino
Programando em ruby para arduinoProgramando em ruby para arduino
Programando em ruby para arduino
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
TDC 2015 Florianopolis
TDC 2015 FlorianopolisTDC 2015 Florianopolis
TDC 2015 Florianopolis
 
Descobrindo APIs REST
Descobrindo APIs RESTDescobrindo APIs REST
Descobrindo APIs REST
 
SharePoint Framework - Uma plataforma aberta e conectada
SharePoint Framework - Uma plataforma aberta e conectadaSharePoint Framework - Uma plataforma aberta e conectada
SharePoint Framework - Uma plataforma aberta e conectada
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
 
Práticas De Um Engenheiro De Software Eficiente
Práticas De Um Engenheiro De Software EficientePráticas De Um Engenheiro De Software Eficiente
Práticas De Um Engenheiro De Software Eficiente
 
[Product Camp 2020] - Produtos Globais - Malu Cantadori | Stripe
[Product Camp 2020] - Produtos Globais - Malu Cantadori | Stripe[Product Camp 2020] - Produtos Globais - Malu Cantadori | Stripe
[Product Camp 2020] - Produtos Globais - Malu Cantadori | Stripe
 
Comunicação em tempo real com WebRTC
Comunicação em tempo real com WebRTCComunicação em tempo real com WebRTC
Comunicação em tempo real com WebRTC
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
 
Processamento Dados em Escala com Serverless: Um Estudo de Caso da Amazon.com...
Processamento Dados em Escala com Serverless: Um Estudo de Caso da Amazon.com...Processamento Dados em Escala com Serverless: Um Estudo de Caso da Amazon.com...
Processamento Dados em Escala com Serverless: Um Estudo de Caso da Amazon.com...
 
The twelve factor app - Princípios e boas práticas aplicados no mundo real
The twelve factor app - Princípios e boas práticas aplicados no mundo realThe twelve factor app - Princípios e boas práticas aplicados no mundo real
The twelve factor app - Princípios e boas práticas aplicados no mundo real
 
Cloud iot novos requisitos software
Cloud iot novos requisitos softwareCloud iot novos requisitos software
Cloud iot novos requisitos software
 

Apps assíncronos com Tornado - API de pagamentos