Criando uma plataforma mundial para engajamento de usuários para a Copa do Mundo 2014 na nuvem da...

Preview:

DESCRIPTION

Conheça a arquitetura utilizada por um dos maiores varejistas do ramo de bebidas, para criar a plataforma tecnológica que suportará sua campanha mundial de marketing na Copa do Mundo 2014, chamada de "Social Activation Platform". Será detalhado como foi utilizada a plataforma de cloud computing do Google (incluindo App Engine, Cloud Storage e Compute Engine), além da integração realizada com Facebook, Twitter e Instagram – e como tudo isso permitiu a criação de uma plataforma de engajamento de usuários e captura de imagens em escala mundial, para o maior evento esportivo do ano.

Citation preview

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