SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Apps assíncronos com Tornado - API de pagamentos

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óveisSensedia
 
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 2014Leonardo Rossetti
 
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 SummitAmazon Web Services
 
Programando em ruby para arduino
Programando em ruby para arduinoProgramando em ruby para arduino
Programando em ruby para arduinoRicardo Ogliari
 
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 desempenhoDavid Robert Camargo de Campos
 
Descobrindo APIs REST
Descobrindo APIs RESTDescobrindo APIs REST
Descobrindo APIs RESTGuilherme
 
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 conectadaLambda3
 
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 SchnurleVictor Cunha
 
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 EficienteGiovanni Bassi
 
[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 | StripeProduct Camp Brasil
 
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 WebRTCAlberto Souza
 
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 LambdaAmazon Web Services LATAM
 
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 LambdaAmazon Web Services LATAM
 
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 ...tdc-globalcode
 
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 SchnurleVictor Cunha
 
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.jsCaio Ribeiro Pereira
 
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...Amazon Web Services
 
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 realJosé Filipe Lyra
 
Cloud iot novos requisitos software
Cloud iot novos requisitos softwareCloud iot novos requisitos software
Cloud iot novos requisitos softwareRoberto C. Mayer
 

Similaire à 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