2. Objectives
What is Cloud Computing?
What is Google App Engine?
Google App Engine for Java
Google App Engine Development cycle
Heroku Introduction
2
4. Cloud Computing : Definition
(Wikipedia)
Cloud Computing is Internet-based computing,
whereby shared resources, software, and information
are provided to computers and other devices on
demand, like the electricity grid.
4
5. Cloud Computing Characteristics
Massive, abstracted infrastructure
Dynamic allocation, scaling, movement of
applications
Pay per use
No long-term commitments
OS, application architecture independent
No hardware or software to install
5
7. Web 2.0 & Cloud Computing
Web 2.0 concentrates on the private user and clouds
are decscendents of data centers which services the
enterprise.
Web 2.0 promotes SaaS.
Web 2.0 needs massive scaling technologies.
User centric Web 2.0 companies (Twitter,
Slideshare) are relying on Cloud Services.
7
9. Software as a Service (SaaS)
SaaS is at the highest layer and features a
complete application offered as a service, on-
demand,
via multitenancy — meaning a single instance of
the software runs on the provider’s infrastructure
and serves multiple client organizations.
9
10. Platform as a Service (PaaS)
The middle layer, or PaaS, is the encapsulation of
a development environment abstraction and the
packaging of a payload of services
PaaS offerings can provide for every phase of
software development and testing, or they can be
specialized around a particular area, such as
content management
10
11. Infrastructure as a Service (IaaS)
IaaS is at the lowest layer and is a means of
delivering basic storage and compute capabilities
as standardized services over the network.
Servers, storage systems, switches,routers, and
other systems are pooled (through virtualization
technology, for example) to handle specific types
of workloads — from batch processing to
server/storage augmentation during peak loads.
11
13. Deployment Model
Public Cloud: provider refers to the cloud
platform that targets any types of customers.
Private Cloud: infrastructure that’s hosted
internally, targeting specific customers or
sometimes exclusively within an organization.
Hybrid Cloud: the combination of public and
private clouds, or sometimes on-premise services.
13
14. IaaS & PaaS: Developer's Perspectives
IaaS normally provides up to O/S level as your
choice; for example Amazon Web Services
(AWS) offers several types of Operating Systems
such as Windows Server, Linux SUSE, and Linux
Red Hat. Developer need to install own
middleware, database, etc.
PaaS, given that the database server, VM, and
web server VM are readily provisioned,
14
15. Setting Up App in IaaS
Source:http://acloudyplace.com/2012/01/comparing-iaas-and-paas-a-developers-perspective/ 15
16. Setting Up App in PaaS
Source:http://acloudyplace.com/2012/01/comparing-iaas-and-paas-a-developers-perspective/ 16
17. PaaS for Java
Amazon Elastic Beanstalk
CloudBees
Cloud Foundry
Google App Engine
Heroku for Java
Red Hat OpenShift
17
21. Google App Engine : Definition
(Wikipedia)
It is a platform for hosting web applications in Google-
managed data centers. It is cloud computing
technology which virtualizes applications across
multiple servers and data centers.
21
22. Google App Engine
Running your web application in Google
infrastructure
Support different runtime environments
Java (JRE 6 with limitation, Servlet 2.5, JDO,
JPA)
Python (2.5.2)
Apps run in sandbox.
Automatic scaling and load balancing
No server restart, no network issues
22
23. Hosting Java web apps traditionally
Not so popular except enterprise
High rates as compared to PHP hosting
Shared Tomcat instance among users
Restrictions on any time deployments due to
shared server
Dedicated hosts works fine but they are costly
23
36. GAE/J
Was released on April 08 with Python support.
Java included on August 09
36
37. App Engine for Java : One Year
Source: What’s Hot in Java for App Engine Google Con 2010 37
38. GAE Java Runtime Environment
Java 6 VM
Servlet 2.5 Container
HTTP Session support (need to enable explicitly)
JDO/JPA for Datastore API
JSR 107 for Memcache API
javax.mail for Mail API
javax.net.URLConnection for URLFetch API
38
40. Services by App Engine
Memcache API – high performance in-memory
key-value cache
Datastore – database storage and operations
URLFetch – invoking external URLs
Mail – sending mail from your application
Task Queues – for invoking background processes
Images – for image manipulation
Cron Jobs – scheduled tasks on defined time
User Accounts – using Google accounts for
authentication
40
41. Limitations
Programming Model : Application runs in
sandbox and can not
– Write to file system
– Make arbitrary network connections
– Use multiple threads/processes
– Perform long-lasting processing
– Permissions
– Know about other instances/applications
Quotas (Requests, In/Out bandwidth, CPU time,
API calls)
41
43. GAE Datastore
Storing data and manipulation
Based on Bigtable
Bigtable is proprietary and hidden from the app
developers
Not a relational database (No SQL)
GQL (Google Query Language) to query
Stores data as entities
Distribution, replication, load balancing behind
the scene
Need to use JDO/JPA
43
44. User Service : Google Accounts
Google Accounts are encouraged as the preferred
authentication mechanism for App Engine
– It assumes that all users have a Google Account
– Google authentication for private domains isn’t
available yet
Access to Google account data -> email, id
The Development Server simulates Google
Accounts
Access constraints based on roles
44
45. User API : Example
import com.google.appengine.api.users.*;
import com.google.appengine.api.users.*;
UserService userService == UserServiceFactory.getUserService();
UserService userService UserServiceFactory.getUserService();
User user == userService.getCurrentUser();
User user userService.getCurrentUser();
String navBar;
String navBar;
if (user == null) {{
if (user == null)
navBar == "<p>Welcome! <a href="" ++ userService.createLoginURL("/")
navBar "<p>Welcome! <a href="" userService.createLoginURL("/")
+"">Sign in or register</a> to customize.</p>";
+"">Sign in or register</a> to customize.</p>";
}} else {{
else
navBar == "<p>Welcome, "" ++ user.getEmail() ++ "! You can <a href=""
navBar "<p>Welcome, user.getEmail() "! You can <a href=""
+userService.createLogoutURL("/") +"">sign out</a>.</p>";
+userService.createLogoutURL("/") +"">sign out</a>.</p>";
}}
45
46. URLFetch API
Invoking external URLs from your application
over HTTP and HTTPs
import java.net.*;
import java.net.*;
import java.io.*;
import java.io.*;
URL url == new URL("htp://...");
URL url new URL("htp://...");
InputStream inp == new InputStreamReader(url.openStream());
InputStream inp new InputStreamReader(url.openStream());
BufferedReader reader == new BufferedReader(inp);
BufferedReader reader new BufferedReader(inp);
String line;
String line;
while ((line == reader.readLine()) != null) {{
while ((line reader.readLine()) != null)
//do something
//do something
}}
reader.close();
reader.close();
46
47. Mail API
Send emails on the behalf of app administrator to
the Google account use.
You can not receive emails
import javax.mail.*;
import javax.mail.*;
Session session == Session.getDefaultInstance(new Properties(), null);
Session session Session.getDefaultInstance(new Properties(), null);
InternetAddress admins == new InternetAddress("admins");
InternetAddress admins new InternetAddress("admins");
Message msg == new MimeMessage(session);
Message msg new MimeMessage(session);
msg.setFrom(admins);
msg.setFrom(admins);
msg.addRecipient(Message.RecipientType.TO, admins);
msg.addRecipient(Message.RecipientType.TO, admins);
msg.setSubject("subject");
msg.setSubject("subject");
msg.setText("text");
msg.setText("text");
Transport.send(msg);
Transport.send(msg);
47
48. Memcache Service
Distributed in memory cache, better than
DataStore
Key-value pair mapping
Configurable expiration time but
Unreliable might be vanished at any time
Supported Interfaces :
– JACHE (JSR 107: JCACHE – Java Temporary
Caching API)
– The Low-Level Memcache API
48
50. Task Queues API
Perform background processes by inserting tasks into
queues.
Instructions need to be mention in file queue.xml, in
the WEB-INF/ dir
import com.google.appengine.api.labs.taskqueue.Queue;
import com.google.appengine.api.labs.taskqueue.Queue;
import com.google.appengine.api.labs.taskqueue.QueueFactory;
import com.google.appengine.api.labs.taskqueue.QueueFactory;
import com.google.appengine.api.labs.taskqueue.TaskOptions;
import com.google.appengine.api.labs.taskqueue.TaskOptions;
// ...
// ...
TaskOptions taskOptions ==
TaskOptions taskOptions
TaskOptions.Builder.url("/send_invitation_task")
TaskOptions.Builder.url("/send_invitation_task")
.param("address", "juliet@example.com")
.param("address", "juliet@example.com")
.param("firstname", "Juliet");
.param("firstname", "Juliet");
Queue queue == QueueFactory.getDefaultQueue();
Queue queue QueueFactory.getDefaultQueue();
queue.add(taskOptions);
queue.add(taskOptions); 50
51. Cron Jobs
Up to 20 scheduled tasks per app
Cron jobs (scheduled tasks) supported in cron.xml
in WEB-INF dir
Schedule instructions contain Englis-like format
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
<cronentries>
<cron>
<cron>
<url>/listbooks</url>
<url>/listbooks</url>
<description>Repopulate the cache every day at
<description>Repopulate the cache every day at
5am</description>
5am</description>
<schedule>every day 05:00</schedule>
<schedule>every day 05:00</schedule>
</cron>
</cron>
</cronentries>
</cronentries>
51
52. Images API
Manipulation of images
Transformation of images
Changing image formats
52
55. Getting Started
The application owner must have a Google
Account to get the tools regardless of language.
Use Java 6 for development.
Eclipse and Netbeans have official plugins.
Both SDKs ship with a Development Web Server
that runs locally and provides a sandbox almost
identical to the real run-time.
55
56. Software Development Kit
App Engine SDK
– Includes web server (Jetty)
– Emulates all the GAE services
SDK includes an upload tool to deploy app to
GAE
Command line tools included.
56
62. Deployment Environment
Application is deployed as .war which contains.
Deployment is integrated in IDE
Deploy multiple version of the application at the
same time
Your app lives at
– <app_id>.appspot.com or
– Custom domain with Google Apps
62
63. Running your app on Google
http://<version>.<appid>.appspot.com/some/path
63
71. Resources
Google App Engine at a glance, Stefan Christoph
Developing Java Based Web Applications in
Google App Engine, Tahir Akram, Dec. 2009
Google App Engine, Patrick Chanezon, Mar 2010
71