Slide 1

Slide 1 text

Frete vs Black Friday Jéssica Bonson Principal Engineer no Olist TDC São Paulo 2020, Trilha Go

Slide 2

Slide 2 text

Jéssica Pauli de C Bonson ● +-8 anos de exp em pesquisa/desenvolvimento ● graduação/mestrado em Ciências da Computação ● foco em dev backend, machine learning e big data Jogar RPG Praticar Canto Ler Lovecraft Hobbies:

Slide 3

Slide 3 text

Maior loja nos principais marketplaces do Brasil. Arquitetura em microsserviços e serverless. Python. Go. PostgreSQL. AWS. Heroku. 20+ APIs 120+ serviços 3m+ produtos 30k+ logistas 10m+ anúncios 200k+ pedidos por mês

Slide 4

Slide 4 text

Cálculo de Frete

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Desafios ● Prazo e preço competitivos ● Prazo e preço corretos ● Tempo de resposta rápido ● Quantidade de requisições ● Quantidade de rotas

Slide 8

Slide 8 text

API de Frete

Slide 9

Slide 9 text

Techstack ● Python ● DRF (Django Rest Framework) ● Heroku

Slide 10

Slide 10 text

Problemas ● Tempo médio de resposta da API: ~200ms ● Cálculo baseado nos Correios ● Performance de entrega: ~78% ● Mais de 40 milhões de rotas

Slide 11

Slide 11 text

Desafios de Frete na Black Friday

Slide 12

Slide 12 text

Desafios ● Prazo e preço competitivos ● Prazo e preço corretos ● Tempo de resposta rápido ● Quantidade de requisições ● Quantidade de rotas

Slide 13

Slide 13 text

Desafios na Black Friday ● Prazo e preço competitivos ● Prazo e preço corretos ● Tempo de resposta rápido ● Quantidade de requisições ● Quantidade de rotas

Slide 14

Slide 14 text

Desafios na Black Friday ● Prazo e preço competitivos ● Prazo e preço corretos ● Tempo de resposta rápido: < 100ms ● Quantidade de requisições: 10~15x maior ● Quantidade de rotas

Slide 15

Slide 15 text

Desafios na Black Friday ● Prazo e preço competitivos ● Prazo e preço corretos ● Tempo de resposta rápido: < 100ms ● Quantidade de requisições: 10~15x maior ● Quantidade de rotas Sendo que… ...dia normal ...só B2W ~60k RPM

Slide 16

Slide 16 text

Nova API de Frete!

Slide 17

Slide 17 text

Nova Techstack ● Golang ● Serverless ● AWS ○ Lambda ○ API Gateway ○ RDS

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Por que serverless?

Slide 20

Slide 20 text

Por que serverless? Escalabilidade Gerenciamento & Disponibilidade AWS Lambda + API Gateway

Slide 21

Slide 21 text

Por que serverless? Escalabilidade Gerenciamento & Disponibilidade AWS Lambda + API Gateway AWS Serverless Application Model (SAM)

Slide 22

Slide 22 text

Lambda + Go

Slide 23

Slide 23 text

template.yaml

Slide 24

Slide 24 text

api.yaml

Slide 25

Slide 25 text

helloworld/main.go

Slide 26

Slide 26 text

helloworld/utils.go

Slide 27

Slide 27 text

helloworld/handler.go

Slide 28

Slide 28 text

Organização de Código ● Package ○ Regras de negócio ○ Model / Repository / Service ● API ○ Enxuta ○ Trata o evento e repassa para o recurso no package ○ Sem regras de negócio ○ Cria a conexão com o BD e repassa para o package ○ Validações

Slide 29

Slide 29 text

Resultado Final

Slide 30

Slide 30 text

Resultado Final Tempo médio de resposta: ~45ms

Slide 31

Slide 31 text

Resultado Final Tempo médio de resposta: ~45ms Obs.: Sem goroutines, ainda dá para melhorar!

Slide 32

Slide 32 text

Valeu! @jpbonson

Slide 33

Slide 33 text

Referências https://docs.aws.amazon.com/lambda/latest/dg/lambda-golang.html https://docs.aws.amazon.com/lambda/latest/dg/golang-handler.html https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway-template.html https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-pro xy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format https://github.com/awslabs/serverless-application-model/blob/master/HOWTO.md https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f https://runbook.cloud/blog/posts/how-we-massively-reduced-our-aws-lambda-bill-wi th-go/