CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de...

58
Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

description

Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Transcript of CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de...

Page 1: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Google AppEngine:3 anos de estrada no case com a maior

abrangência de produtos usando a plataforma no Brasil

Page 2: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

ghconcon

@gconcon

[email protected]

Gustavo ConconArquiteto de Sistemas @ CI&T

Page 3: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 4: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

CloudSQL

Cloud Storage

Task Queue (Pull Queues)

Backends

Datastore

Task Queue (Push Queues)Remote API

Page 5: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Como tudo começou...

Page 6: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Infra-estrutura complexa e sistemas legados

● Alto custo com manutenção da infra

● Grande parte do processamento backoffice no Mainframe (COBOL Batch e COBOL CICS)

Contexto tecnológico

Page 7: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Tornou-se cliente do Google Apps for Business (E-Mail, Calendar, Docs, Sites)

● Decisão do Move to the Cloud por redução de custos e complexidade de suporte

Em 2010...

Page 8: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Maturidade

Page 9: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 10: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

(JSP + jQuery)Spring

(Objectify)

Datastore

Page 11: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 12: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 13: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

(JSF + Primefaces)Spring

(JPA + Hibernate)

CloudSQL

Page 14: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 15: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Visão Geral da Arquitetura

Page 16: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Visão Geral da Arquitetura

Page 17: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Integração com a núvem

Page 18: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Descida dos dados gerados na núvem

Page 19: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Para o usuário

Page 20: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Aplicação Replicadora

Page 21: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Redução da dependência do Mainframe

Page 22: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Subida do resultado do processamento

Page 23: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Governança dos Dados

Page 24: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Dados corporativos, comuns a todas as aplicações

● Rastreabilidade e consistência das informações

O Problema

Page 25: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

App com serviços corporativos, centralizadora dos dados (domínio) em todo ecossistema AppEngine

● Domínios como consulta de CEP,

Empresas, UF, Profissão...

● Cacheable, baixíssimo custo

(Latência de rede não é problema)

● Gestão de volume e

permissionamento

● Dashboard específico

Page 26: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Busca Geolocalizada por proximidade

Page 27: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

O Objetivo

Page 28: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Endereços na base armazenados como “Avenida Paulista, 1000, São Paulo”

● Conversão para Latitude/Longitude

● Google Geocoding API

Geocodificação dos endereços

Page 29: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Mas como fazer as buscas por proximidade??

Page 30: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Janeiro de 2011!

● Ferramenta promissora da Google, recém lançada!

● Em fase Experimental!

“É o risco da inovação!”

Cenário

Page 31: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Google Fusion Tables

● Cláusulas e funções como ORDER

BY DISTANCE, CIRCLE, INTERSECTs

select local from Locais

where CIRCLE(<latlong>, <raio>)

order by distance;

Page 32: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Mudanças constantes no comportamento da API (App parada em produção)

● API foi descontinuada 6 meses depois

● Hoje ainda existe, API reestruturada

“É o risco da inovação!”

Google Fusion Tables

Page 33: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Migramos para o Google CloudSQL

● É o MySQL na núvem

● Disponível (na fase oficial) desde

Jun/2012

● Replicação automática, síncrona ou

assíncrona, around the globe!

● Suporte a consultas geospaciais

nativas do MySQL :)

Page 34: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● MySQL possui suporte a datatypes de geometria, GEOMETRY, POINT, CURVE, POLYGONOpenGIS Geometry Model

● Tabelas do tipo MyISAM, InnoDB não tem suporte!

● Índice R-Tree para consulta geométricaCREATE SPATIAL INDEX sp_index ON mytable (g);

How it works?!

Page 35: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● O conceito permite buscas indexadas retornando se o ponto está dentro de um polígono (MBRWithin / MBRContains)

How it works?!

Page 36: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Mas eu preciso do CÍRCULO!!!

Page 37: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 38: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

( 6371 * acos( cos( radians(Latitude) ) * cos( radians( X(LATLONG) ) ) * cos( radians( Y(LATLONG) ) - radians(Longitude) ) + sin( radians(Latitude) ) * sin( radians( X(LATLONG) ) ) ) ) AS DISTANCE !!!!!!

Faça uma limonada...

Page 39: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil
Page 40: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

SELECT *

FROM ( SELECT *, ( 6371 * acos( cos( radians(1) ) * cos(

radians( X(LATLONG) ) ) * cos( radians( Y(LATLONG) ) - radians(1.1) ) + sin( radians(1) ) * sin( radians( X(LATLONG) ) ) ) ) AS DISTANCE

FROM MAPA_ATENDIMENTO

WHERE MBRWithin( LATLONG, Envelope( GeomFROMText( 'LineString( X Y , X Y)'))

) inner

WHERE inner.DISTANCE <= Z

Show me the code!!

Page 41: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● O CloudSQL trabalha nativamente com replicação around the globe.

● Configurável: Síncrona ou Assíncrona

● Síncrona: Insert/Update/Delete são replicados dentro do statement

● Assíncrona: Insert/Update/Delete são replicados fora do statement

Pontos interessantes sobre o CloudSQL

Page 42: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● A percepção de performance é notável, fizemos o teste:

○ Síncrono: 10K inserts com commit de 500 em 500

10 segundos

○ Assíncrono: 10k inserts com commit de 500 em

5005 segundos

Pontos interessantes sobre o CloudSQL

Page 43: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Upload & Download de Arquivos

Page 44: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Resumable Uploads

● Espaço ilimitado

Google CloudStorage

Page 45: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● API de integração no AppEngine SDK (Blobstore API)

blobstoreService.createUploadUrl("/uploaded",

UploadOptions uploadOptsWithBucketName);

blobstoreService.getUploads(request); //File info (BlobKey)

Uploading files

Page 46: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Exportação da base, de forma analítica (~600.000 registros) em CSV

Requisito

GAE tem limite de 60 s por request!

Page 47: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Solução

PushQueue

ApplicationPushQueue

Backend instanceBackend instance

Backend instanceCloud

Storage

DATASTORE

Page 48: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Lições aprendidas

Page 49: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● A SDK não implementa 100% da especificação

● Mas calma, é quase lá…

AppEngine SDK não é JEE

Page 50: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Spring Framework 3.2

● Hibernate 4.2 (Apenas com CloudSQL)

● JSF 2.1 + Primefaces 3.5 (Precisamos de alguns

workarounds)

● iText 2.1.7 (Adaptado)

● Objectify 3.1

O que usamos

Page 51: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Alguns cuidados ao usar Spring Framework

● Tempo de warmup máximo de 60 segundos

● Evite ou reduza o uso de <component-scan>

● Evite ou reduza o uso de @AutoWire (Principalmente by-type)

● Desabilite o XML Validation em produção

● lazy-init=”true” na declaração dos Beans

Page 52: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Nosso warmup

● 250 beans (@Component)

● Usando component-scanning = Estourou os 60 segs com ~160 Beans

● Warmup de 38 segundos apenas removendo o component-scanning + lazy-init

Page 53: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

CloudSQL

Cloud Storage

Task Queue (Pull Queues)

Backends

Datastore

Task Queue (Push Queues)Remote API

Page 54: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Pra fechar!

Page 55: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Cliente satisfeito com a plataforma

"Onde fizer sentido, vamos migrar pra núvem"

Satisfação geral!

Page 56: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

● Uma máquina de servidor de aplicação tradicional (hosting):~ US$ 30.000,00 mês

● Todas as aplicações + CloudStorage + CloudSQL + Ambientes QA/UAT/PRD+ Premier Support

Em média US$ 1600,00

E o principal… CUSTO!

Page 57: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil

Obrigado!

Page 58: CI&T DevDay BH 2013 - Google AppEngine: 3 anos de estrada no case com a maior abrangência de produtos usando a plataforma no Brasil