Upload
chris-schalk
View
3.177
Download
0
Tags:
Embed Size (px)
Citation preview
Google App Engine Technical Update
Chris SchalkDeveloper Advocatehttp://twitter.com/cschalk
Ignacio BlancoSoftware Engineerhttp://twitter.com/blanconet
What iscloud
computing?
IaaS
APaaS
SaaS
Source: Gartner AADI Summit Dec 2009
Cloud Computing Defined
IaaS value proposition…
APaaS value proposition…
APaaS value proposition…
Google App Engine
Easy to buildEasy to maintainEasy to scale
By the numbers
By the numbers
By the numbers
250,000+ Developers
By the numbers
100,000+ Apps
By the numbers
250M+daily
Pageviews
In a word… via Wordle
Word source: http://en.wikipedia.org/wiki/App_Engine
Some App Engine Partners
Socialwok
Social networking at scale
>62M Users
gigy Socialize
gigy Socialize
"Although we typically host all our services in-house, on our own infrastructure, we felt that GAE would be a better fit
for the live chat feature because of its unique traffic pattern, which is characterized by very low traffic most of the time with very high
bursts during high profile events."
Raviv Pavel, Gigya VP of Research and Development
http://googleappengine.blogspot.com/2010/02/scalability-means-flexibility.html#links
Flexible Scalability
Why App Engine?
Managing Everything is Hard
DIY Hosting means hidden costs
Idle capacitySoftware patches & upgradesLicense feesLots of maintenanceTraffic & utilization forecastingUpgrades
Cloud development in a boxSDK & “The Cloud”HardwareNetworkingOperating systemApplication runtime
Java, PythonStatic file servingServicesFault toleranceLoad balancing
App Engine Details
Specialized Services
BlobstoreImages
Mail XMPP Task Queue
Memcache Datastore URL Fetch
User Service
Specialized Services
BlobstoreImages
Mail XMPP Task Queue
Memcache Datastore URL Fetch
User Service
Language runtimes
Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.
Ensuring Portability
Extended Language support through JVM
JavaScalaJRuby (Ruby)GroovyQuercus (PHP)Rhino (JavaScript)Jython (Python)
Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.
Always free to get started
-~5M pageviews/month6.5 CPU hrs/day1 GB storage650K URL Fetch calls/day2,000 recipients emailed1 GB/day bandwidth100,000 tasks enqueued650K XMPP messages/day
Application Platform Management
App Engine Dashboard
App Engine Health History
Apr 2008 Python launch
May 2008 Memcache, Images API
Jul 2008 Logs export
Aug 2008 Batch write/delete
Oct 2008 HTTPS support
Dec 2008 Status dashboard, quota details
Feb 2009 Billing, larger files
Apr 2009 Java launch, DB import, cron support, SDC
May 2009 Key-only queries
Jun 2009 Task queues
Aug 2009 Kindless queries
Sep 2009 XMPP
Oct 2009 Incoming Email
Dec 2009 Blobstore
Feb 2010 Datastore cursors
20+ months in review
Happy Birthday App Engine!
Two years old as of Wed April 7th!Vibrant community of over 250k developersOver 250 million pageviewshttp://googleappengine.blogspot.com/2010/04/happy-birthday.html
Development Tools for App Engine
Google App Engine Launcher
SDK Console
Google Plugin for Eclipse
New Features!
Cursors
# class Person(db.Model): ...
# Start a query for all Person entities.q = Person.all()
# If the app stored a cursor during a previous request, use it.last_cursor = memcache.get('person_cursor')if last_cursor: q.with_cursor(last_cursor)
# Perform the query to get 100 results.people = q.fetch(100)
# Store the latest cursor for the next request.cursor = q.cursor()memcache.set('person_cursor', cursor)
Task queue# for each user, add a task to send a custom email message for u in users: taskqueue.add(url='/work/sendmail', params=dict(to=u.email, subject='Hello ' + u.name, body='this is a message!')) return # finished now, emails will be sent offline using tasks ...# task handler automatically called for each task created above class MailWorker(webapp.RequestHandler): def post(self): mail.send_mail('[email protected]', self.request.get('to'), self.request.get('subject'), self.request.get('body'))
Cron #1cron.yaml (in your project root)
cron:- description: clear memcache url: /memcache_clear schedule: every 24 hours...
# Human-readable schedule format:# every 5 minutes# every 12 hours# 2nd,third mon,wed,thu of march 17:00# every monday 09:00# 1st monday of sep,oct,nov 17:00# every day 00:00
Cron #2...class ClearMemcache(webapp.RequestHandler): def get(self): pre_flush_stats = memcache.get_stats() memcache.flush_all() post_flush_stats = memcache.get_stats() subject = 'Daily memcache flush' sender = '[email protected]' recipient = '[email protected]' body = ('Hello! The weekly memcache flush succeeded.\n') body += '<3 your friendly neighborhood cron job' body += 'pre-flush stats %s \n\n' % str(pre_flush_stats) body += 'post-flush stats %s' % str(post_flush_stats) mail.send_mail(sender, recipient, subject, body) application = webapp.WSGIApplication([('/memcache_clear', ClearMemcache)], debug=True)...
AppStats
@app_engine#coolappstats
Win a T-shirt
Upload before/after screenshots and link them on Twitter before May 2nd
Demo time!
Wall demo App
http://devfestmxwall.appspot.com
Guestbook + XMPP
http://devfestmxguestbook.appspot.com
Add in gmail and chat with:
A latin american App Engine user's perspective:
eForcers.com
Nuestra Experiencia con Google App Engine
Aplicaciones empresariales y sitios Web públicosRuntime Python y Java. ~2 años
BeneficiosConcentrarnos en la funcionalidad NO en el restoFácil despliegue instalación
RetosBase de datos relacional vs. BigtableLimitantes y restricciones
Fundación Rogelio Salmonahttp://obra.fundacionrogeliosalmona.org
Panel de Soporte para Operadores Google Apps
Contáctenos
www.eforcers.com
Eforcers S.A.Cra. 12 No. 90 - 20
Oficina 301Bogotá, Colombia
[571] 6 22 83 [email protected]
http://code.google.com/appengine
More Info on App Engine:
http://googleappengine.blogspot.com/
http://gae-java-persistence.blogspot.com/http://bit.ly/gcodelabs
If you experience any issue during the appengine signup like not receiving the SMS
One last thing
http://bit.ly/devfestsms