Java e Cloud Computing

64

description

Java e Cloud Computing A computação nas nuvens é uma tendência do mercado, aprenda como desenvolver sobre ela utilizando plataforma java. Esta oficina traz uma visão geral sobre conceitos e arquitetura da cloud computing. Diferenças entre plataformas como Amazon Web Services (AWS), Google Application Engine (GAE). Durante a oficina estaremos desenvolvendo uma aplicação java e disponibilizando a mesma na GAE. Alem disso vamos explorar alguns recursos específicos do serviço do Google, como o repositório de dados NoSQL. Programação do mini-curso 08:00 - Introdução a Computação em nuvem - Fundamentos em computação em nuvem - Níveis de serviços em nuvem - Google App Engine - Ambiente de execução da App Engine - Prática 1 9:30 INTERVALO 10:00 - Ambiente de Desenvolvimento da App Engine - Ambiente de Produção da App Engine - Colocando uma aplicação em produção - Prática 2 ALMOÇO 13:30 - NoSQL - Big Table - Acesso a dados - Prática 3 15:30 INTERVALO 16:00 - API e Serviços da AppEngine - Pratica 4 - Outros Recursos da App Engine e Dicas

Transcript of Java e Cloud Computing

Page 1: Java e Cloud Computing
Page 2: Java e Cloud Computing

Java e Cloud Computing

Mario Jorge Pereira

Page 3: Java e Cloud Computing

Java e Cloud Computing

Mario Jorge Pereira

Page 4: Java e Cloud Computing

2001

2002

2003

2004

2005

2006

2007

2008

2009

2010

2011

2012

2013

2014

Page 5: Java e Cloud Computing

Uso de recursos computacionais (software e hardware) que são oferecidos como serviço através de uma rede,

tipicamente a internet.

Cloud Computing

Page 6: Java e Cloud Computing

Caracteristicas• Provisionamento dinâmico de recursos sob demanda, com

mínimo de esforço;

• Escalabilidade;

• Uso de "utilility computing", onde a cobrança é baseada no uso do recurso ao invés de uma taxa fixa;

• Visão única do sistema;

• Distribuição geográfica dos recursos de forma transparente ao usuário.

Page 7: Java e Cloud Computing

era uma vez..1969 - Multitasking;1970 - Create Internet;1991 - Releases Internet for General Use;1993 .. 1995 - eBay & Amazon founded;1999 - SaaS salesforce.com launched;2000 - Economy loses speed;2006 - Amazon Web Service (IaaS); 2008 - Google App Engine (PaaS) [Go Java Python]2011 - Google App Engine deixou de ser preview2013 - Google Cloud Plataform (IaaS/PaaS) [PHP]

Page 8: Java e Cloud Computing
Page 9: Java e Cloud Computing
Page 10: Java e Cloud Computing

SaaS

Page 11: Java e Cloud Computing

IaaS

Page 12: Java e Cloud Computing

PaaS

Page 13: Java e Cloud Computing
Page 14: Java e Cloud Computing

E O Goole App Engine?

Page 15: Java e Cloud Computing
Page 16: Java e Cloud Computing

http://cloud.google.com/appengine

Goole App Engine

✓ Execute seus aplicativos da web na infraestrutura do Google;

✓ Suporte à aplicações em Java, Python, GO! e PHP*;

✓ Todos os recursos dentro da mesma plataforma;

✓ Quota gratuita renovada diariamente;

Page 17: Java e Cloud Computing

Hospedagem livre de preocupações

Suporte a Python, Java, PHP e Go

Alta disponibilidade do serviço NoSQL e SQL

Page 18: Java e Cloud Computing
Page 19: Java e Cloud Computing

BackendSem limite de tempo de processamento Maior quantidade de RAM

Gerenciamente manual/programático

Instancias

Frontend

Limite de tempo de request RAM limitada

Gerenciado pelo AppEngine

Page 20: Java e Cloud Computing

Ambiente Java

Servlet 2.5, Java 7 e suporte a multithread

Datastore baixo nível assíncrono, JPA e JDO

Deploy utilizando GAE Console, toolkit do Eclipse,

scripts ou Maven;

Configurações para escalabilidade via GAE Console

e XML;

Não é possível realizar chamadas a recursos

externos com tempo de resposta maior que 60s;

Page 21: Java e Cloud Computing

Serviços GAE

Full Text

Search

Memcache

Users

Mail

Task Queue

Image

URL Fetch

Search API

XMPP

Datastore

Page 22: Java e Cloud Computing

+ +

Ferramentas

Page 23: Java e Cloud Computing

http://appengine.google.com

Crie sua conta

Page 24: Java e Cloud Computing
Page 25: Java e Cloud Computing

File menu > New > Web Application Project

Desmarque

Use Google Web

Toolkit

Page 26: Java e Cloud Computing

Estr

utur

a de

arq

uivo

s

Page 28: Java e Cloud Computing

Context menu > New > Other

WEB-INF\index.jspJSP File

Page 29: Java e Cloud Computing
Page 30: Java e Cloud Computing

deploy to app engine...

Page 32: Java e Cloud Computing
Page 33: Java e Cloud Computing
Page 34: Java e Cloud Computing

Context menu > Google > Deploy to AppEngine

Page 35: Java e Cloud Computing

App Engine project settings...

Page 36: Java e Cloud Computing

ARMAZENAMENTO DE DADOS

Page 37: Java e Cloud Computing

✓Armazenamento de arquivos;

✓Free ate 5GB

✓$0,13/GB/mês

Blobstore

Page 38: Java e Cloud Computing

✓Instâncias de MySQL na nuvem;✓Utilização com JDBC;✓Maximo Request e Response Size 16MB✓Inicia em $1.46/dia ou $0.10/hora;

Cloud SQL

Page 39: Java e Cloud Computing

✓NOSql (BigTable) com as entidades sendo representadas por um tipo, um identificador e seu conteúdo;

✓ Implementação utilizando JDO, JPA ou uma biblioteca de serviços específicos;

✓Consultas baseadas em índices pré-”buildados”;

✓ Free 50k de operações;

✓$0.09/100k de operações de escrita e $0.06/100k de operações de leitura

Datastore

Page 40: Java e Cloud Computing
Page 41: Java e Cloud Computing

File menu > New > Web Application Project

Desmarque

Use Google Web

Toolkit

Desm

arqu

e Ge

nera

te p

roje

ct

sam

ple

code

Page 42: Java e Cloud Computing

Context menu > New > Other

WEB-INF\index.jspJSP File

Page 43: Java e Cloud Computing

Mockup Blog

Page 44: Java e Cloud Computing

<!DOCTYPE html><html><head> <title> Blog </title> </head> <body> <h1> Blog <h1> <form name="form1" action="/servlet"> Titulo: <br>

<input name="titulo" type="text"> <br> Autor: <br> <input name="autor" type="text"> <br> Texto: <br>

<textarea name="texto"> </textarea> <br> <input type="submit" value="Salvar"> </form> </body></html>

Formulário - index.jsp

Page 45: Java e Cloud Computing

<!DOCTYPE html ><%@page import="com.google.appengine.api.datastore.FetchOptions"%><%@page import="com.google.appengine.api.datastore.Query"%><%@page import="com.google.appengine.api.datastore.Entity"%><%@page import="java.util.Date"%><%@page import="com.google.appengine.api.datastore.DatastoreServiceFactory"%><%@page import="com.google.appengine.api.datastore.DatastoreService"%><html><head>...</head><body><%String titulo = request.getParameter("titulo");String autor = request.getParameter("autor");String texto = request.getParameter("texto");if (titulo != null && autor != null && texto != null) {

Date data = new Date(); Entity mensagem = new Entity("Mensagem"); mensagem.setProperty("titulo", titulo); mensagem.setProperty("autor", autor); mensagem.setProperty("texto", texto); mensagem.setProperty("data", data); DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); datastore.put(mensagem);

response.sendRedirect("index.jsp"); }%>... </body></html>

Salvar - index.jsp

Page 46: Java e Cloud Computing

<!DOCTYPE html > ...<%@page import="java.text.SimpleDateFormat"%><%@page import="java.util.List"%><html><head>...</head><body>...<%String titulo = request.getParameter("titulo");String autor = request.getParameter("autor");String texto = request.getParameter("texto");if (titulo != null && autor != null && texto != null) { ...} else { DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Query query = new Query("Mensagem").addSort("data",Query.SortDirection.DESCENDING); List<Entity> msgs = datastore.prepare(query).asList(FetchOptions.Builder.withDefaults()); for (Entity mensagem : msgs) {%>

<%=mensagem.getProperty("titulo")%><br> <%=mensagem.getProperty("texto")%><br> <%=mensagem.getProperty("autor")%> -

<%=new SimpleDateFormat(“dd/MM/yyyy”).format((Date) mensagem.getProperty("data"))%><br> <% } }%>...</body></html>

Listar - index.jsp

Page 48: Java e Cloud Computing

✓Serviço para o envio e recebimento de e-

mails através do GAE;

✓Pode ser implementado utilizando JavaMail

ou uma biblioteca específica;

✓Tamanho maximo 100MB e 10 MB/minute

✓ $0.0001 por destinatário após sua

quota diária de 100 destinatários;

Mail

Page 49: Java e Cloud Computing
Page 50: Java e Cloud Computing

Mockup - Newsletter

Page 51: Java e Cloud Computing

<!DOCTYPE HTML><html><head> <title>Newsletter</title> </head><body> <h1>Newsletter</h1> <form method="post" action="/sucesu3"> Nome: <input type="text" name="nome"> <br> Email: <input type="text" name="email"> <br> <input type="submit" value="Enviar"><br> </form></body></html>

Newsletter - index.jsp

Page 52: Java e Cloud Computing

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); try { String nome = req.getParameter("nome"); String email = req.getParameter("email"); Message msg = new MimeMessage(session);

msg.setFrom(new InternetAddress("[email protected]")); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(email, nome) );

msg.setSubject("Sucesu 2013 "); msg.setText("Bem Vindo a Sucesu 2013");

Transport.send(msg); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } resp.setContentType("text/plain"); resp.getWriter().println("Email enviado com Sucesso"); }

Newsletter - MailServlet

Page 53: Java e Cloud Computing

...<inbound-services><service>mail</service></inbound-services>...

Mail - appengine-web.xml

Page 54: Java e Cloud Computing

<servlet><servlet-name>mailhandler</servlet-name>

<servlet-class>br.com.sucesu.MailHandlerServlet</servlet-class></servlet><servlet-mapping> <servlet-name>mailhandler</servlet-name> <url-pattern>/_ah/mail/*</url-pattern></servlet-mapping><security-constraint> <web-resource-collection> <web-resource-name>mail</web-resource-name> <url-pattern>/_ah/mail/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint></security-constraint>

Mail - web.xml

Page 55: Java e Cloud Computing

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null);

try {

MimeMessage msg = new MimeMessage(session, req.getInputStream()); System.out.println(message.getSubject());

} catch (MessagingException e) {

e.printStackTrace();}

}

Mail - MailHandlerServlet.java

Page 56: Java e Cloud Computing

Mail - Test

http:/

/local

host:

8888

/_ah/a

dmin/

inbou

ndmail

Page 57: Java e Cloud Computing

✓Autenticar usuários através de Contas do

Google, contas do Google Apps ou OpenID.

✓Redirecioná-lo para a página de login;

✓Detectar se o usuário atual é administrador;

User

Page 58: Java e Cloud Computing
Page 59: Java e Cloud Computing

<html><head><title>User</title></head><body><%UserService userService = UserServiceFactory.getUserService();String thisURL = request.getRequestURI();if (request.getUserPrincipal() != null) {%><%=("Ola, "+ request.getUserPrincipal().getName()+"!<a href=\""+userService.createLogoutURL(thisURL)+"\">Sair</a>")%><%} else { %><%=("<a href=\""+userService.createLoginURL(thisURL)+ "\">Entrar</a>")%><%}%></body></html>

User - index.jsp

Page 60: Java e Cloud Computing

✓execução de tarefas em background;

✓Possibilidade de se configurar a taxa de

processamento para uma determinada fila;

✓É um serviço gratuito mas que precisa seguir

algumas restrições definidas pelo GAE;

Task Queue

Page 61: Java e Cloud Computing

✓Cache em memória compatível com o

protocolo memcached;

✓Precisa seguir algumas restrições;

Memcache

Page 62: Java e Cloud Computing
Page 63: Java e Cloud Computing

Esta obra está licenciada sob a licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-sa/3.0/.