apps assíncronos com tornado - api de pagamentos

23
Apps assíncronos com Tornado Case: Buddy Rich, API de pagamentos

Upload: arnaldo-pereira

Post on 17-Aug-2015

175 views

Category:

Presentations & Public Speaking


3 download

TRANSCRIPT

Page 1: Apps assíncronos com Tornado - API de pagamentos

Apps assíncronos com TornadoCase: Buddy Rich, API de pagamentos

Page 2: Apps assíncronos com Tornado - API de pagamentos

Quem somosArnaldo de Moraes Pereira

C, Python, Golang

Predicta, startups

Daniel Urbano

Ruby, Python

Bioritmo, Abril

Page 3: Apps assíncronos com Tornado - API de pagamentos

LuizaLabs

P&D do Magazine Luiza

~70 pessoas

177 projetos no github

12 forks / projetos open source

TI dos canais de venda

Page 4: Apps assíncronos com Tornado - API de pagamentos
Page 5: Apps assíncronos com Tornado - API de pagamentos
Page 6: Apps assíncronos com Tornado - API de pagamentos

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?)

Page 7: Apps assíncronos com Tornado - API de pagamentos

Como funciona?

Site -> Buddy -> Gateway

Gateway -> Adquirente -> Bandeira -> Emissor/Banco

Buddy -> Análise de Risco

Buddy -> Site

Page 8: Apps assíncronos com Tornado - API de pagamentos

O que usar?

Java?

Ruby?

PHP?

Page 9: Apps assíncronos com Tornado - API de pagamentos

O que usar?É claro.

Page 10: Apps assíncronos com Tornado - API de pagamentos

Stack

Simples

Eficiente, estável, escalável

Seguro

Transacional

Divertido

Page 11: Apps assíncronos com Tornado - API de pagamentos

Web: TornadoEficiente, 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

Page 12: Apps assíncronos com Tornado - API de pagamentos

O que é Tornado?Web server e framework

Library assíncrona

Usa nonblocking networking IO

Um dos primeiros web frameworks assíncronos

twisted

Page 13: Apps assíncronos com Tornado - API de pagamentos

Async http client: 1 request

class MyHandler(RequestHandler): @gen.coroutine def get(self): http_client = AsyncHTTPClient() response = yield http_client.fetch("http://example.com")

Page 14: Apps assíncronos com Tornado - API de pagamentos

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)]

Page 15: Apps assíncronos com Tornado - API de pagamentos

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

Page 16: Apps assíncronos com Tornado - API de pagamentos

Buddy Rich problemas

Comunicação com o Gateway de pagamento

a lib de integração existente é síncrona

Page 17: Apps assíncronos com Tornado - API de pagamentos

Buddy Rich soluções

Fork da lib de integração com o gateway

Melhorias

Async com AsyncHTTPClient

logging PCI-compliant

Junto criamos o asyncreplay

Page 18: Apps assíncronos com Tornado - API de pagamentos

Buddy Rich problemas

Muitos timeouts no gateway de pagamento

Isso não pode impedir a compra

Como receber sem receber?

Page 19: Apps assíncronos com Tornado - API de pagamentos

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

Page 20: Apps assíncronos com Tornado - API de pagamentos

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

Page 21: Apps assíncronos com Tornado - API de pagamentos

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

Page 22: Apps assíncronos com Tornado - API de pagamentos

O que foi legal

Retentativa automática de transações anteriormente "perdidas"

Aumento da conversão no checkout do site! $_$

Page 23: Apps assíncronos com Tornado - API de pagamentos

Obrigado! [email protected] [email protected]

http://luizalabs.com

http://github.com/luizalabs

https://twitter.com/luizalabs

http://99jobs.com/luizalabs