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
Apena...
Como funciona?
Site -> Buddy -> Gateway
Gateway -> Adquirente -> Bandeira -> Emissor/Banco
Buddy -> Análise de Risco
Buddy...
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
...
O que é Tornado?
Web server e framework
Library assíncrona
Usa nonblocking
networking IO
Um dos primeiros web
frameworks a...
Async http client: 1 request
class MyHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient(...
Async http client: 1+n
requests
class MyHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClie...
Buddy Rich
mais sobre a stack
Ansible: provisionamento de ambientes
AWS
EC2, DynamoDB, RDS, SQS, S3
SQLAlchemy
scoped sess...
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
Junt...
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 o...
O que não foi legal
MUITAS regras de negócio no processo
Necessidade de sempre lidar com erros de terceiros
Buracos no flux...
O que foi legal
LuizaLabs agora usa frameworks assíncronos
(Tornado, Cyclone e Asyncio) com tanta naturalidade
quanto usa ...
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...
Apps assíncronos com Tornado - API de pagamentos
Apps assíncronos com Tornado - API de pagamentos
Próximos SlideShares
Carregando em…5
×

Apps assíncronos com Tornado - API de pagamentos

559 visualizações

Publicada em

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.

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
559
No SlideShare
0
A partir de incorporações
0
Número de incorporações
14
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Apps assíncronos com Tornado - API de pagamentos

  1. 1. Apps assíncronos com Tornado Case: Buddy Rich, API de pagamentos
  2. 2. Quem somos Arnaldo de Moraes Pereira C, Python, Golang Predicta, startups Daniel Urbano Ruby, Python Bioritmo, Abril
  3. 3. LuizaLabs P&D do Magazine Luiza ~70 pessoas 177 projetos no github 12 forks / projetos open source TI dos canais de venda
  4. 4. 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?)
  5. 5. Como funciona? Site -> Buddy -> Gateway Gateway -> Adquirente -> Bandeira -> Emissor/Banco Buddy -> Análise de Risco Buddy -> Site
  6. 6. O que usar? Java? Ruby? PHP?
  7. 7. O que usar? É claro.
  8. 8. Stack Simples Eficiente, estável, escalável Seguro Transacional Divertido
  9. 9. 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
  10. 10. O que é Tornado? Web server e framework Library assíncrona Usa nonblocking networking IO Um dos primeiros web frameworks assíncronos twisted
  11. 11. Async http client: 1 request class MyHandler(RequestHandler): @gen.coroutine def get(self): http_client = AsyncHTTPClient() response = yield http_client.fetch("http://example.com")
  12. 12. 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)]
  13. 13. 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
  14. 14. Buddy Rich problemas Comunicação com o Gateway de pagamento a lib de integração existente é síncrona
  15. 15. Buddy Rich soluções Fork da lib de integração com o gateway Melhorias Async com AsyncHTTPClient logging PCI-compliant Junto criamos o asyncreplay
  16. 16. Buddy Rich problemas Muitos timeouts no gateway de pagamento Isso não pode impedir a compra Como receber sem receber?
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. O que foi legal Retentativa automática de transações anteriormente "perdidas" Aumento da conversão no checkout do site! $_$
  21. 21. Obrigado! arnaldo@luizalabs.com urbano@luizalabs.com http://luizalabs.com http://github.com/ luizalabs https://twitter.com/ luizalabs http://99jobs.com/ luizalabs

×