SlideShare uma empresa Scribd logo
Apis Rest Autoescaláveis
Padrões de design para
QCONSP 2016
Fernando Ultremare
SEM COMPLICAÇÃO
About me
• Full-stack developer desde 1998
• Gerente geral de projetos na
Dextra Sistemas
• Criador do YAWP! Framework
@feroult
Padrões de design para APIs REST autoescaláveis sem complicação
Agenda
• Introdução
• Padrões de design
• Automação de ambientes
• Na prática com o Google Cloud
• Projetos reais & referências
Introdução
APIs everywhere
• Web, mobile, microservices
• Grande número de usuários
• Grande volume de dados
• Novos requisitos de escalabilidade
Exemplos de aplicações
• Global Apps
Facebook, Twitter, Gmail
• Apps para consumidores
Pedidos on-line, banking,

e-commerce
Escalabilidade vertical
• Instâncias mais caras
• Dados em memória
• Ponto único de gargalo
• Menor complexidade
Escalabilidade horizontal
• Instâncias mais baratas
• Dados distribuídos
• Gargalo distribuído
• Maior complexidade
Pode ser bem difícil
• Sistemas distribuídos
• Consistência eventual
• “Ausência” de Joins
• Automação de ambientes
Padrões de design
Aplicação de exemplo
Order City State
Item
* 1* 1
1
n
Aggregation
order count
count by status
status:
created

prepared
delivered
Aplicação de exemplo
• Código fonte
bit.ly/qconsp2016
Roteamento
• Stateless requests ➝ No client affinity
• Baixa latência ➝
Evite grandes sequências server-side
Chamadas assíncronas (outros serviços)
Use cache intensivamente
• Evite locks ➝ 1 doc = 1 transação
Roteamento
Client Side Server Side
Security





Validation





Regras





Order

Item
Item
Create
1 doc = 1 tx
Roteamento
Client Side
Add
Server Side
Security Validation RegrasOrderCreate
Item
Add Item
Security Validation Regras
Security Validation Regras
1 doc = 1 tx
Sharding
• High-throughput para escrita
• Múltiplas instâncias de persistência
• Shard Key
• Replicação
• Dificuldade para Joins
Sharding
POST /orders
Routing
Create
Shard
Key
replicação

entre shards
bye bye joins
grupo de

shards
Consultas e consistência eventual
• High-throughput para leitura
• Shard Groups com menos carga
• Nós podem estar desatualizados
Eventual ➝ Possível mas incerto
Eventually ➝ At an unspecified future time
Consultas e consistência eventual
Consultas e consistência eventual
GET /orders?city=sao-paulo
nós quentes
replicação futura
Consultas e consistência forte
• Consultas por chave
• Grupos de documentos por chave pai
• Alterações até o momento ➝ Locks
• Mantenha grupos “User Sized”
• ~ 1 write / sec
Consultas e consistência forte
Consultas e consistência forte
GET /orders?city=sao-paulo
nós quentes
espera transações
Pipelines assíncronas
• “Joins” ➝ Views materializadas
• Sums, counts, avgs
• Baixo impacto na latência
• 1 write / sec ➝ Agregadores
• Consistência futura
Pipelines assíncronas
Order City State
POST /orders
status = 200
GET /cities GET /states
Fluxo Assíncrono
Pipelines assíncronas
Order City State
POST /orders GET /cities GET /states
status = 200
Fluxo Assíncrono
Pipelines assíncronas
POST /orders
acumuladores

evitam contenção

de escrita
Order
status = 200
City
GET /cities
sequenciamento
1 write / sec
Pipelines assíncronas
City
Daily
Report
Monthly
Report
Múltiplas pipelines

em paralelo
GET /cities
GET /daily
GET /monthly
POST /orders
Order
Pipelines assíncronas
Order
Price
Stock
POST /orders
POST /prices
POST /stock
Sales

Report
GET /sales
Pipelines convergentes
(Joins)
Automação de ambientes
Automação
• Cloud intensive
• Todas as camadas
Front / back-end instances, BD, filas, cache
• Scale Up, Scale Down (elástico)
Scale up and down
tempo
infraestrutura
manhã
tarde
noite
• Evita capacidade ociosa
• Menor custo de saída
• Menor custo médio
• Picos inesperados
Soluções e ferramentas
Na prática com o Google Cloud
Aplicação de exemplo
Order City State
Item
* 1* 1
1
n
Aggregation
order count
count by status
status:
created

prepared
delivered
Padrões de design para APIs REST autoescaláveis sem complicação
Projetos reais & referências
Projetos reais
• Pense duas vezes…
• High-throughput
• Dados >> memória
• Simples o suficiente (why not?)
Projetos reais
• Vendas / CRM organização de eventos
• Delivery de comida
Referências
• Design for Scale (Appengine)

https://cloud.google.com/appengine/articles/scalability
• Shard or not shard

https://dzone.com/articles/shard-or-not-shard
• Appengine data pipelines

https://dl.google.com/googleio/2010/app-engine-data-
pipelines.pdf
Referências
• Código fonte

bit.ly/qconsp2016
• YAWP! Framework

yawp.io
Obrigado!
@feroult
feroult@gmail.com

Mais conteúdo relacionado

Semelhante a Padrões de design para APIs REST autoescaláveis sem complicação

BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
Alvaro Viebrantz
 
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Rafael Schettino
 
Tendências de Big Data
Tendências de Big DataTendências de Big Data
Tendências de Big Data
Amazon Web Services LATAM
 
Tendências de Big Data
Tendências de Big DataTendências de Big Data
Tendências de Big Data
Amazon Web Services LATAM
 
Webinar: Introdução a Big data
Webinar: Introdução a Big dataWebinar: Introdução a Big data
Webinar: Introdução a Big data
Amazon Web Services LATAM
 
Windows Phone 7 & Windows Azure
Windows Phone 7 & Windows AzureWindows Phone 7 & Windows Azure
Windows Phone 7 & Windows Azure
Vinicius Quaiato
 
AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?
Pedro Pisa
 
Tuning de performance_qmeeting2018
Tuning de performance_qmeeting2018Tuning de performance_qmeeting2018
Tuning de performance_qmeeting2018
Roberto Oliveira
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvem
Cloves Moreira Junior
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
Eiti Kimura
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
DataStax Academy
 
Aws summit arquitetura big data-v1.2
Aws summit arquitetura big data-v1.2Aws summit arquitetura big data-v1.2
Aws summit arquitetura big data-v1.2
Amazon Web Services LATAM
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
Andre Baltieri
 
Path to the Future #1 - Tendências de Big Data
Path to the Future #1 - Tendências de Big DataPath to the Future #1 - Tendências de Big Data
Path to the Future #1 - Tendências de Big Data
Amazon Web Services LATAM
 
Arquitetura para uma nova geração de aplicativos no Windows Azure
Arquitetura para uma nova geração de aplicativos no Windows AzureArquitetura para uma nova geração de aplicativos no Windows Azure
Arquitetura para uma nova geração de aplicativos no Windows Azure
Fernando Correia
 
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
Renato Groff
 
Encontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de TrabalhoEncontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de Trabalho
Amazon Web Services LATAM
 
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
Tiago Marchetti Dolphine
 
Introducao+ao+amazon+ec2+ +ricardo+geh
Introducao+ao+amazon+ec2+ +ricardo+gehIntroducao+ao+amazon+ec2+ +ricardo+geh
Introducao+ao+amazon+ec2+ +ricardo+geh
Amazon Web Services LATAM
 
Fisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila DiasFisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila Dias
Camila Dias
 

Semelhante a Padrões de design para APIs REST autoescaláveis sem complicação (20)

BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
 
Tendências de Big Data
Tendências de Big DataTendências de Big Data
Tendências de Big Data
 
Tendências de Big Data
Tendências de Big DataTendências de Big Data
Tendências de Big Data
 
Webinar: Introdução a Big data
Webinar: Introdução a Big dataWebinar: Introdução a Big data
Webinar: Introdução a Big data
 
Windows Phone 7 & Windows Azure
Windows Phone 7 & Windows AzureWindows Phone 7 & Windows Azure
Windows Phone 7 & Windows Azure
 
AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?
 
Tuning de performance_qmeeting2018
Tuning de performance_qmeeting2018Tuning de performance_qmeeting2018
Tuning de performance_qmeeting2018
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvem
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
Aws summit arquitetura big data-v1.2
Aws summit arquitetura big data-v1.2Aws summit arquitetura big data-v1.2
Aws summit arquitetura big data-v1.2
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Path to the Future #1 - Tendências de Big Data
Path to the Future #1 - Tendências de Big DataPath to the Future #1 - Tendências de Big Data
Path to the Future #1 - Tendências de Big Data
 
Arquitetura para uma nova geração de aplicativos no Windows Azure
Arquitetura para uma nova geração de aplicativos no Windows AzureArquitetura para uma nova geração de aplicativos no Windows Azure
Arquitetura para uma nova geração de aplicativos no Windows Azure
 
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
 
Encontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de TrabalhoEncontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de Trabalho
 
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
 
Introducao+ao+amazon+ec2+ +ricardo+geh
Introducao+ao+amazon+ec2+ +ricardo+gehIntroducao+ao+amazon+ec2+ +ricardo+geh
Introducao+ao+amazon+ec2+ +ricardo+geh
 
Fisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila DiasFisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila Dias
 

Padrões de design para APIs REST autoescaláveis sem complicação