Post on 18-Dec-2014
description
Criando uma plataforma mundial para engajamento de usuários para a Copa do Mundo 2014 na nuvem da Google
Daniel Viveiros - Head of TechnologyTwitter: @dviveirosSite: http://www.ciandt.com/u/viveiros http://www.danielviveiros.com.br
A COPA DO MUNDO É NOSSA!
Será?!?
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
Escalabilidade
10,000,000 de fotos30 Tb de dados
40,000 fotos / hora(pico projetado)
Escalabilidade
Global
Todo o planeta vai usar a plataforma
Mercados locais podem customizar solução
usando a plataforma
Escalabilidade
Global
1a versão em 3 meses
Porque essa é a vida na cidade grande… ;-)
IaaS ou PaaS?
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
http://www.infoq.com/news/2014/01/paas-future
http://danielviveiros.com.br/2014/01/24/there-is-nothing-going-wrong-with-paas/
Escalabilidade
Global
1a versão em 3 meses
IaaS PaaS
Escalabilidade
Global
1a versão em 3 meses
IaaS PaaS
Concordam?
Arquiteturas HíbridasFTW!
Arquitetura Híbrida com
Google Cloud Platform
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
Utilização do Datastore para maior escalabilidade3 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;
Planeje na largada o uso de Memcache → garantia de melhor performance, escalabilidade e diminuição de custos
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
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.
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...
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).
Mais informações em: https://developers.google.com/storage/docs/accesscontrol#Signed-URLs
ImageServices do Google AppEngine (transformações básicas)
Manipulação de imagens: ImageMagick (transformações avançadas)
Redes Sociais e APIs
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
Realtime updates / notificaçõesFoco na Fan Page. Listening de tudo, filtro na aplicaçãoGraph API para futuras interações
Streaming APIGoogle Compute Engine: long-run processLog para failover
Real-time API (subscription / notification)Foco em hashtag específicaSubscription só notifica uma vez por hashtag
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
Monitoramento
Se está no GCE, via de regra, precisa de monitoramento
Usamos o Zabbix, solução open source de monitoramento
Dá para melhorar o monitoramento do GAE também!
Testes de Carga
- 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)
Valeu!
Daniel Viveiros - Head of TechnologyTwitter/email: @dviveiros / viveiros@ciandt.comSite: http://www.ciandt.com/u/viveiros http://www.danielviveiros.com.br