google app-engine-cloudcamplagos2011
DESCRIPTION
Google App Engine for the Enterprise. Cloud Camp Lagos 2011.TRANSCRIPT
GOOGLE APP ENGINE FOR THE ENTERPRISE
Kayode OdeyemiTechnical Architect, Opevel
Cloud Camp Lagos, 2011
May 28th, 2011
The Cloud
1. Convenience
Pay for what you use
2. On-Demand network access
Use as much as you need, whenever you need
3. Minimal management effort
Don’t have to build your own infrastructure
Cloud Computing – As seen by Gartner
WHAT IS GOOGLE APP ENGINE?
• Google’s own infrastructure for running web applications
• The P (Platform) of Cloud Computing.
• App Engine is HTTP Server, but does not serve HTML
• Host web services for integration
• Consume other web services
• Various authentication options: Oauth, Google Account
So, Google App Engine falls under PaaS of Cloud Computing
WHY GOOGLE APP ENGINE?
• Easy to build
• Easy to maintain
• Easy to Scale
HOW DOES IT WORK?
• Build
• Push
• Never worry about scalability
HOW DOES IT WORK?
• Build
– Download SDK
– Of Java, Python or GO Runtime
– Build with dev tools such as GPE (Eclipse plugin), Netbeans, AppLauncher
HOW DOES IT WORK?
• Push
– Deploy easily with simple commands
./appengine-java-sdk/bin/appcfg.sh update myapp/war
– Administer in Administration console (App Engine Dashboard)
HOW DOES IT WORK?
• Scalability
– Automatic performance improvements as traffic on your app increases
See more in GAE Dashboard
– Automatic instance creation to handle load as well as distribution of resources
CPU, Bandwidth, Quota, Memory
– Fault Tolerance
• Built with scalability as top priority
• Memcache– Distributed RAM cache
– Heavily dependent on mecache size allocated. The more the merrier
PERFORMANCE & SCALABILITY
INTEGRATION
Authentication
OpenSocial XMPPGoogle Apps
Google Data APIs
DjangoFacebook
APIGEO
(Maps)YouTube
APIAJAX
APPLICATION ENVIRONMENT – BUILDING BLOCKS
• Java Runtime
• Python Runtime
• GO Runtime
• Datastore
• Suite of APIs to do common stuffs
– URL Fetch– Mail– Memcache– Image Manipulation– Channel– Blobstore
APPLICATION ENVIRONMENT – BUILDING BLOCKS
JAVA
Same technologies / APIs you are used to
KNOW HOW YOUR APP IS DOING – PLATFORM MANAGEMENT
PYTHON
• Communicates via CGI protocol
• Supports Django
• Supports Python 2.5+
Google App Engine
Datastore
CGI
Memcache
CGI
URL Fetch
CGI
CGI
Blobstore
CGI
DATASTORE – OBJECT PERSISTENCE
• Built on BigTable
• Non-relational database management system
• Consistent read and write even in a distributed network
Storage 1
Storage 2
Storage 3
ADMINISTERING YOUR APP – The Admin Console
• Create a new application
• View request and error logs and analyze traffic
• Browse your application's datastore and manage indexes
• Administer your datastore
• View your application's instances
• Manage task queues, allowing for viewing, deleting or running individual tasks immediately
• Test new versions of your application and switch the version that your users see
ADMINISTERING YOUR DATASTORE
URL Fetch
• Consume external resources with your app
• Supports HTTP & HTTPS
String message = URLEncoder.encode("my message", "UTF-8");
try {
URL url = new
URL("http://www.example.com/comment");
HttpURLConnection connection =
(HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
URL Fetch – Write and return response to client
OutputStreamWriter writer = new
OutputStreamWriter(connection.getOutputStream());
writer.write("message=" + message);
writer.close();
if (connection.getResponseCode() ==
HttpURLConnection.HTTP_OK) {
// OK
} else {
// Server returned HTTP error code.
}
} catch (MalformedURLException e) {
// ...
} catch (IOException e) {
// ...
}
Note: Not all java.io classes are supported in app engine. Check whitelisted JRE classes
• Send mail using JavaMail or Low level API
try {
Message msg = new MimeMessage(session);
msg.setFrom(new
InternetAddress("[email protected]", "Example.com Admin"));
msg.addRecipient(Message.RecipientType.TO,
new
InternetAddress("[email protected]", "Mr. User"));
msg.setSubject("Your Example.com account has been
activated");
msg.setText(msgBody);
Transport.send(msg);
} catch (AddressException e) {
// ...
} catch (MessagingException e) {
Memcache
• Distributed in-memory data-cache
• Improve performance
• You don’t have to always persist storage in datastore. Some stuffs can be stored in-memory
// A reference to the cache service
private final Cache cache = new Cache(MemcacheServiceFactory
.getMemcacheService());
Channel API
• Communicate between your application and Google Servers asynchronously.
• Very useful to chat room apps, collaborative apps
Blobstore
• Serve large data objects
• Insert / Retrieve / Edit, in bulk
• Flexible– Direct access to blob data in memory
• Fast access to blob data– 5MB in ~ 2s
// Simple servlet to create the actual upload url
String uploadurl =
blobstoreservice.createUploadUrl(“/Upload”);
// Called after upload
Map<String, Blobkey> blobkeys =
blobstoreservice.getUploadedBlobs(req);
Google App Engine for Business
• Enterprise Application Management– Centralized domain console
• Enterprise reliability and support– 99.9% Service Level Agreement
– Enterprise support
• Hosted SQL– Relational SQL database in the cloud
• SSL on your domain
• Extremely secure by default– Integrated Single Sign-on
• Pricing that makes sense– Apps cost $8 per user, up to $1000 max per month (Pre-IO2011 Pricing)
Get Started with App Enginehttp://code.google.com/appengine
Get the SDK and build cool stuffshttp://code.google.com/appengine/downloads.html
Google Apps for Businesshttp://code.google.com/appengine/business/
BigTablehttp://labs.google.com/papers/bigtable.html
Google I/O 2011http://www.google.com/events/io/2011/index-live.html
Introduction to Google Cloud Platform Technologies by Chris Schalk – Google Developer Advocatehttp://goo.gl/zmxvF
Sample projectshttp://goo.gl/djgMS
ONLINE REFERENCES
Questions
• Website - http://opevel.com
• Twitter : @opevel @googledevtools #gwt @charyorde
• Opevel Services
– Google App Deployment
– Custom Application Development on Google App Engine
– Integration services with legacy systems