A apresentação descreve uma plataforma global na nuvem da Google para engajamento de usuários na Copa do Mundo de 2014, com as seguintes características essenciais: coleta de milhões de fotos de pessoas ao redor do mundo, escalabilidade para processar grandes volumes de dados, e integração com redes sociais para permitir interações. A arquitetura híbrida proposta utiliza serviços do Google App Engine e Google Compute Engine.
Criando uma plataforma mundial para engajamento de usuários para a Copa do Mundo 2014 na nuvem da Google (QCon SP 2014)
1. Criando uma plataforma
mundial para
engajamento de usuários
para a Copa do Mundo
2014 na nuvem da
Google
Daniel Viveiros - Head of Technology
Twitter: @dviveiros
Site: http://www.ciandt.com/u/viveiros
http://www.danielviveiros.com.br
5. Fans do
evento
Fotos com
interações
sociais
Diversos
canais
Uma plataforma… para todo um planeta!
Coletar uma
quantidade imensa de
imagens de pessoas do
mundo todo
Capturar
automaticament
e o
consentimento
dos usuários
Usar essas fotos
para montar um
grande mosaico
para a abertura do
evento
Plataforma de
Ativação Social
14. PaaS
- Ambiente de execução na nuvem
- Escalabilidade e alta disponibilidade
"sem esforço"
- Excelente para novas aplicações,
ruim para migrar aplicações existentes
- Java, Python, PHP or Go! (GAE)
- Mais fácil e rápido de construir /
manter
- É preciso jogar as "regras do jogo"
- Resumo: produtividade e abstração
IaaS
- Datacenter na nuvem
- Escalabilidade e alta disponibilidade
projetados
- Funciona bem para novas aplicações
ou para migrar aplicações existentes
- Qualquer linguagem
- Pode utilizar plataformas externas
como Drupal, Sharepoint etc.
- Resumo: flexibilidade e controle
21. Regra geral: deveria estar na linha de frente
de todas as requisições → maior facilidade de
escalar e suportar altos volumes.
Linguagem: Java
Principais Frameworks:
1) Objectify (Persistência)
2) Jersey (RESTful Webservices)
3) Guice (IoC)
4) RestFB (Integração com o Facebook)
5) JInstagram (Integração com o Instagram)
6) Twitter4J (Integração com o Twitter)
Experimentem! https://github.
com/dviveiros/gae-project
22. Utilização do Datastore para maior escalabilidade
3 pontos de atenção:
1) O datastore não é uma base relacional, trate-a como tal;
2) Cuidado ao fazer a modelagem dos entity groups,
operações de escrita possuem restritos limites por grupos;
3) Em algum momento você vai precisar de contadores.
Considere o artigo "Sharding counters" do Google;
23. Planeje na largada o uso de Memcache →
garantia de melhor performance,
escalabilidade e diminuição de custos
24.
25. Quando o PaaS mostrar suas restrições (e isso vai
acontecer), use IaaS (nesse caso: Google
Compute Engine) como complemento
arquitetural.
Foi usado para:
[1] Integração com o Twitter
[2] Manipulações complexas de imagens
(exemplo: transformar imagem em texto)
Atenção: a Google lançou em 25 de março as
Managed VMs, que vai facilitar a criação dessas
arquiteturas híbridas.
https://developers.google.
com/cloud/managed-vms
26. Integração GAE - GCE
GCE → GAE: expõe um serviço REST no GAE e
faz a chamada dele pelo GCE. Prefira sempre
que esse serviço dispare uma Task Queue
(push) internamente para processamento
assíncrono.
GAE → GCE: utilizamos uma Task Queue (pull)
no GAE para colocar a mensagem e pegamos
essa mensagem no GCE utilizando a Task
Queue REST API. Pattern request-reply.
27.
28.
29. E por falar em filas...
Usamos filas para quase tudo!
- Barramento de eventos (foto criada, foto moderada,
rejeitada, etc)
- Controle de quota de envio de emails
- Integração com componentes externos (GCE) usando
request-reply
- Implementação de API assíncrona - resposta chega ao client
via callback com politica/garantia de entrega/retries todo
baseado nas características da fila
- Receber as notificações das redes sociais
- Etc...
30. Todas as imagens estão armazenadas no
Google Cloud Storage, facilidade de
gerenciamento e confiança.
Regra geral: sempre que possível, deixar o
GCS receber e fornecer diretamente as
imagens, sem camadas intermediárias (URL
assinadas).
31. Mais informações em: https://developers.google.com/storage/docs/accesscontrol#Signed-
URLs
37. Desafios para fazer integração de 2 vias em redes
sociais:
[1] Pense em quotas, se planeje!
[2] É difícil negociar limites com as redes sociais!
[3] Escrever nas redes sociais é um desafio à parte! Pense
em ética e esteja preparado para quotas bem baixas.
[4] As APIs são instáveis, tivemos muitos problemas com
isso. Considere um firehose (Datasift, GNIP etc)
Mais info: http://goo.gl/nNY7Vk
38. Realtime updates / notificações
Foco na Fan Page. Listening de tudo, filtro na aplicação
Graph API para futuras interações
Streaming API
Google Compute Engine: long-run process
Log para failover
Real-time API (subscription / notification)
Foco em hashtag específica
Subscription só notifica uma vez por hashtag
39.
40.
41.
42. Pense em APIs:
[1] Segurança e gerenciamento: planeje-se com relação a
isso
[2] Site da API: uma boa documentação é fundamental
para que outros consigam utilizar
[3] Considere um produto para isso (ex. Apigee, Sensedia
API Suite etc)
Mais info: http://goo.gl/p2bNB5
49. - Utilização do JMeter disparado de máquina local
- Utilização do JMeter disparado de máquina na AWS
- Integração dos testes de performance na
estratégia de CI utilizando o Jenkins
- Testes de performance influenciando o design!
- Testes terceirizados com empresa externa (iGates)
- Testes terceirizados com empresa externa
especializada em testes globais (SOASTA)
50. Valeu!
Daniel Viveiros - Head of Technology
Twitter/email: @dviveiros / viveiros@ciandt.com
Site: http://www.ciandt.com/u/viveiros
http://www.danielviveiros.com.br