Um pouco sobre como desenvolvemos o Buddy Rich, API de pagamentos escrita no Luiza Labs e utilizada pelos canais de venda do Magazine Luiza.
Tornado, técnicas assíncronas e 2 pessoas desenvolvendo para transacionar R$ bilhões por ano, de forma segura.
Apresentada com o Daniel Urbano no TDC 2015.
2. Quem somos
Arnaldo de Moraes Pereira
C, Python, Golang
Predicta, startups
Daniel Urbano
Ruby, Python
Bioritmo, Abril
3. LuizaLabs
P&D do Magazine Luiza
~70 pessoas
177 projetos no github
12 forks / projetos open
source
TI dos canais de venda
4.
5.
6. 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?)
7. Como funciona?
Site -> Buddy -> Gateway
Gateway -> Adquirente -> Bandeira -> Emissor/Banco
Buddy -> Análise de Risco
Buddy -> Site
11. 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
12. O que é Tornado?
Web server e framework
Library assíncrona
Usa nonblocking
networking IO
Um dos primeiros web
frameworks assíncronos
twisted
15. 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
19. 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
20. 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
21. 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
22. O que foi legal
Retentativa automática
de transações
anteriormente
"perdidas"
Aumento da conversão
no checkout do site! $_$