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
A COPA DO MUNDO É NOSSA!
Será?!?
Uma plataforma… para todo um planeta! Fotos com Fans do Diversos Plataforma de interações evento canais Ativação Social sociais Capturar Usar essas fotos Coletar uma automaticament para montar um quantidade imensa de e o grande mosaico imagens de pessoas do consentimento para a abertura do mundo todo dos usuários evento
Escalabilidade
10,000,000 de fotos 30 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 1 a versão em 3 meses
Porque essa é a vida na cidade grande… ;-)
IaaS ou PaaS?
IaaS PaaS - Datacenter na nuvem - Ambiente de execução na nuvem - Escalabilidade e alta disponibilidade - Escalabilidade e alta disponibilidade projetados "sem esforço" - Funciona bem para novas aplicações - Excelente para novas aplicações, ou para migrar aplicações existentes ruim para migrar aplicações existentes - Qualquer linguagem - Java, Python, PHP or Go! (GAE) - Pode utilizar plataformas externas - Mais fácil e rápido de construir / como Drupal, Sharepoint etc. manter - Resumo: flexibilidade e controle - É preciso jogar as "regras do jogo" - Resumo: produtividade e abstração
http://www.infoq.com/news/2014/01/paas-future http://danielviveiros.com.br/2014/01/24/there-is-nothing-going-wrong-with-paas/
IaaS PaaS Escalabilidade Global 1 a versão em 3 meses
IaaS PaaS Concordam? Escalabilidade Global 1 a versão em 3 meses
Arquiteturas Híbridas FTW!
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 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;
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çõ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
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 Technology Twitter/email : @dviveiros / viveiros@ciandt.com Site : http://www.ciandt.com/u/viveiros http://www.danielviveiros.com.br
Recommend
More recommend