Google AppEngine: Desafios da adoção de cloud computing no ... · backoffice no Mainframe (COBOL...
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
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!!