Google AppEngine: Desafios da adoção de cloud computing no ... · backoffice no Mainframe (COBOL...

of 73 /73
Google AppEngine: Desafios da adoção de cloud computing no mercado de seguros Gustavo Concon

Embed Size (px)

Transcript of Google AppEngine: Desafios da adoção de cloud computing no ... · backoffice no Mainframe (COBOL...

Google AppEngine:Desafios da adoo de cloud computing no mercado de seguros

Gustavo Concon

Quem sou eu?!

Bacharel Anlise de Sistemas PUC-Campinas

Arquiteto de Sistemas

Especializando-se em tecnologias Cloud

Recm-carioca!ghconcon

@gconcon

[email protected]

Fundada em 1995 (18 anos)

Ofertas de Cloud Computing (Google/Amazon / Salesforce Partner)

Application Development & Management / SAP & BI / Mobile

Cresce numa taxa mdia de 40% ao ano! Desde sua fundao.

Recrutando talentos!

Sobre a CI&T

Contexto Tecnolgico

Infra-estrutura complexa e sistemas legados (JEE 1.3, Oracle, DB2, WebSphere 5 e 7)

Alto custo com manuteno da infra

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

Contexto tecnolgico

J era cliente do Google Apps for Business (E-Mail, Calendar, Docs, Sites)

Deciso do Move to the Cloud por reduo de custos e complexidade de suporte

Natural escolha do Google AppEngine

Contexto tecnolgico

O que j temos na nvem

4 aplicaes em produo + 2 de suporte

Uma mdia de 20k usurios/dia

Aplicaes diretas (front-office)

O que j temos na nvem

MECSASMeio Eletrnico de Cadastro SulAmrica

Cotador SadeCotao online de planos de sade Empresarial e PME

Rede ReferenciadaBusca a rede referenciada de prestadores do plano

Portal RGERecurso de Glosa Eletrnica

Plataforma tecnolgica

Viso Geral da Arquitetura

Viso Geral da Arquitetura

Integrao com a nvem

Dados gerados na nvem

Processados no backoffice (Mainframe)

Retorno do processamento para o cliente

Plano futuro de remover dependncia do Mainframe

Requisito

Descida dos dados gerados na nvem

No h conexo Nvem > Rede Local (Quebra de DMZ), sempre o local consume a nvem

Registros j separados para processamento (Evita overhead de identificar o que mudou)

Dados enfileirados de maneira escalvel

Uso do TaskQueue (Pull Queue)

Para o usurio

Aplicao Replicadora

Conjunto Spring Batch + Control-M (Scheduler)

Autenticao com a nvem via OAuth

Consumo do TaskQueue

Envio do processamento ao COBOL CICS (online) - Regra de negcio!

Aplicao Replicadora

Processamentos com erro so devolvidos na hora

ATOMICIDADE da transao MANUAL! No h suporte a XAltima linha do processo excluir a Task

Aplicao Replicadora

Reduo da dependncia do Mainframe

Replicao de dados Online (Quente) do DB2 Mainframe para o Oracle via Oracle GoldenGate

Replicao via UNDO tablespace, baixo custo na origem!

Timestamp de replicao (Temos o Delta!)

Reduo da dependncia do Mainframe

Subida do resultado do processamento

Uso do Remote API do AppEngine (Acesso direto ao Datastore)

Conexo JDBC/OAuth com CloudSQL

Liberao do registro ou crticas de processamento ao usurio

Throughput atende!~2k registros/seg = 4mb/seg

Replicao - Resultado do processamento

Governana dos Dados

Dados corporativos, comuns a todas as aplicaes

Rastreabilidade e consistncia das informaes

Requisito

Cada App possui seu prprio domnio de dados (Datastore e/ou CloudSQL)

Quem produz o dado responsvel por ele

Dados comuns (corporativos) centralizados

Soluo

App com servios corporativos, centralizadora dos dados (domnio) em todo ecossistema AppEngine

Contedo REST

Autenticao via OAuth

Domnios como consulta de CEP,

Empresas, UF, Profisso...

Cacheable, baixssimo custo

(Latncia de rede no problema)

Basicamente pagamos o Storage

(1.2GB)

Gesto de volume, autorizaes e escalabilidade no contexto especfico da app corporativa

Dashboard do AppEngine especfico, gesto mais eficaz

Controle da aplicao corporativa

Busca Geolocalizada por proximidade

O Objetivo

Endereos na base armazenados como Avenida Paulista, 1000, So Paulo

Converso para Latitude/Longitude

Google Geocoding API

Geocodificao dos endereos

Limite de at 2,5k converses por dia (100k para clientes premier ;) )

Free

S pode usar se plotar o resultado no Mapa do Google Maps!!!

Geocodificao dos endereos

Mas como fazer as buscas por proximidade??

Janeiro de 2011!

Ferramenta promissora da Google, recm lanada!

Em fase Experimental!

o risco da inovao!

Cenrio

Google Fusion Tables

Clusulas e funes como ORDER

BY DISTANCE, CIRCLE, INTERSECTs

Performance OK! Escalabilidade

no to ok...

Bateria Throughput %90 Samples

1 5 req/seg ~1 seg 70k

2 8,3 req/seg 3.3 segs 250k

Mudanas constantes no comportamento da API (App parada em produo)

API foi descontinuada 6 meses depois

Hoje ainda existe, API reestruturada

o risco da inovao!

Google Fusion Tables

Migramos para o Google CloudSQL

o MySQL na nvem

Disponvel (na fase oficial) desde

Jun/2012

Instncias de mquinas com at

16GB de RAM e at 100GB de disco

Replicao automtica, sncrona ou

assncrona, around the globe!

Suporte a consultas geospaciais

nativas do MySQL :)

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

Tabelas do tipo MyISAM, InnoDB no tem suporte!

ndice R-Tree para consulta geomtricaCREATE SPATIAL INDEX sp_index ON mytable (g);

How it works?!

O conceito permite buscas indexadas retornando se o ponto est dentro de um polgono (MBRWithin / MBRContains)

Ou se polgonos se cruzam

No d pra indexar busca por distncia

How it works?!

O jeito montar um polgono e obter os pontos que esto dentro!

E depois calcular a distncia na mo

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

How it works?!

How it works?!

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)'))

) innerWHERE inner.DISTANCE

Performance bastante adequada nas consultas

Performance do CloudSQL

O CloudSQL trabalha nativamente com replicao around the globe.

Configurvel: Sncrona ou Assncrona

Sncrona: Insert/Update/Delete so replicados dentro do statement

Assncrona: Insert/Update/Delete so replicados fora do statement

Ponto interessante sobre o CloudSQL

A percepo de performance notvel, fizemos o teste:

Sncrono: 10K inserts com commit de 500 em 50010 segundos

Assncrono: 10k inserts com commit de 500 em 5005 segundos

Ponto interessante sobre o CloudSQL

Recomendao:

Configure assncrono sempre que possvel!

Acredito que atende 99% dos projetos que tenham constantes atualizaes de dados

Ponto interessante sobre o CloudSQL

Upload & Download de Arquivos

Resumable Uploads

Espao ilimitado

Billing por volume armazenado + network traffic

Google CloudStorage

API de integrao no AppEngine SDK (Blobstore API)

blobstoreService.createUploadUrl("/uploaded",

UploadOptions uploadOptsWithBucketName);

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

Uploading files

Exportao da base, de forma analtica (~600.000 registros) em CSV

Requisito

Uso de PushQueues (Public/Subscribe) Instncias backend no tm limite de

tempo de processamento CloudStorage usado como repositrio dos

arquivos gerados

Soluo

Lies aprendidas

A SDK no implementa 100% da especificao

Mas calma, quase l

AppEngine SDK no JEE

Java Data Objects (JDO) Java Persistence API (JPA) Java Server Faces (JSF) 1.1 - 2.0 Java Server Pages (JSP) + JSTL Java Servlet API 2.4 JavaBeans Activation Framework (JAF) Java Architecture for XML Binding (JAXB) Java API for XML Web Services (JAX-WS) JavaMail XML processing APIs including DOM, SAX, and XSLT

Componentes mais comuns suportados

Enterprise Java Beans (EJB) JAX-RPC Java Database Connectivity (JDBC) Java EE Connector Architecture (JCA) Java Management Extensions (JMX) Java Message Service (JMS) Java Naming and Directory Interface (JNDI) Remote Method Invocation (RMI)

Tentativa de categorizar o que funciona ou no::

https://code.google.com/p/googleappengine/wiki/WillItPlayInJava

O que no compatvel

https://code.google.com/p/googleappengine/wiki/WillItPlayInJavahttps://code.google.com/p/googleappengine/wiki/WillItPlayInJavahttps://code.google.com/p/googleappengine/wiki/WillItPlayInJava

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

Framework ORM para Datastore Encapsula acessos atravs de annotations com a

mesma nomenclatura do JPA (@Transaction, @Entity) e outras extenses

Cache automtico usando o MemCache

@Entityclass Car { @Id String vin; // Can be Long, long, or String String color;}ofy().save().entity(new Car("123123", "red")).now();Car c = ofy().load().type(Car.class).id("123123").get();ofy().delete().entity(c);

Objectify

Alguns cuidados ao usar Spring Framework

Tempo de warmup mximo de 60 segundos

Evite ou reduza o uso de

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

Desabilite o XML Validation em produo

lazy-init=true na declarao dos Beans

https://developers.google.com/appengine/articles/spring_optimization

https://developers.google.com/appengine/articles/spring_optimizationhttps://developers.google.com/appengine/articles/spring_optimizationhttps://developers.google.com/appengine/articles/spring_optimization

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

Environment & Delivery

Viso de build pipeline (Jenkins)

Fcil integrao Jenkins + AppCfg para deployment automatizado

Baixssimo custo para termos ambientes de Integration + QA + UAT

Gastamos hoje US$ 400,00 com: Amazon: Mquina Jenkins + Sonar + Nexus + RDS

(Sonar) Ambientes AppEngine e CloudSQL (Uma app p/

cada ambiente)

Deployment gil

Verso atribuda na build via Maven Release Plugin dentro do appengine-web.xml

Permite deployment e acesso a verses separadas no ambientehttp://1-2-1.minhaapp.appspot.com

Usurio homologa defeitos em pr-produo antes de liber-la

Versionamento

Ambientes na mesma infra de produo

Testes de carga/stress no necessitam usar produo

AppEngine Dashboard extremamente til

Architecture Validation

Pra finalizar!

Cliente extremamente comprado na tecnologia

A conversa de novos projetos inicia com Faz sentido fazermos no AppEngine?

Segundo a Google, o cliente que mais usa a suite de produtos Google Enterprise no Brasil!

Satisfao geral!

Hoje a SulAmrica gasta com todas as aplicaes + CloudStorage + CloudSQL + Ambientes QA/UAT/PRD+ Premier Support

Em mdia US$ 1600,00

Uma mquina de servidor de aplicao tradicional, com backup e hospedada no fornecedor:~ US$ 30.000,00

E o principal CUSTO!

VISITEM NOSSO

ESTANDE!!