SlideShare a Scribd company logo
1 of 86
A Gentle Introduction to
  Google App Engine

          10/2009
    Robin Bhattacharyya
      twitter.com/rcb
Quick Survey
Quick Survey



Heard of App Engine before today?
Quick Survey



Heard of App Engine before today?
Installed App Engine SDK?
Quick Survey



Heard of App Engine before today?
Installed App Engine SDK?
Started a sample app on localhost?
Quick Survey



Heard of App Engine before today?
Installed App Engine SDK?
Started a sample app on localhost?
Deployed an app to App Engine?
Quick Survey



Heard of App Engine before today?
Installed App Engine SDK?
Started a sample app on localhost?
Deployed an app to App Engine?
Plan to use App Engine for production?
Quick Survey



Heard of App Engine before today?
Installed App Engine SDK?
Started a sample app on localhost?
Deployed an app to App Engine?
Plan to use App Engine for production?
Already using App Engine in production?
What exactly is Google App Engine?
What exactly is Google App Engine?



Host web apps on Google’s infrastructure
What exactly is Google App Engine?



Host web apps on Google’s infrastructure
No server maintenance, auto scaling
What exactly is Google App Engine?



Host web apps on Google’s infrastructure
No server maintenance, auto scaling
No database maintenance, uses BigTable
What exactly is Google App Engine?



Host web apps on Google’s infrastructure
No server maintenance, auto scaling
No database maintenance, uses BigTable
Free quota, 1G storage, 5M hits/month
What exactly is Google App Engine?



Host web apps on Google’s infrastructure
No server maintenance, auto scaling
No database maintenance, uses BigTable
Free quota, 1G storage, 5M hits/month
SDK for development, easy deployment
What exactly is Google App Engine?



Host web apps on Google’s infrastructure
No server maintenance, auto scaling
No database maintenance, uses BigTable
Free quota, 1G storage, 5M hits/month
SDK for development, easy deployment
Easy to get started, create up to 10 apps
Getting Started with App Engine
Getting Started with App Engine


Signup and add your-app at appspot.com
Getting Started with App Engine


Signup and add your-app at appspot.com
Get SDK at code.google.com/appengine
Getting Started with App Engine


Signup and add your-app at appspot.com
Get SDK at code.google.com/appengine
Write a simple helloworld WSGI app
Getting Started with App Engine


Signup and add your-app at appspot.com
Get SDK at code.google.com/appengine
Write a simple helloworld WSGI app
Run local server with dev_appserver.py .
Getting Started with App Engine


Signup and add your-app at appspot.com
Get SDK at code.google.com/appengine
Write a simple helloworld WSGI app
Run local server with dev_appserver.py .
Deploy to Google with appcfg.py update .
Getting Started with App Engine


Signup and add your-app at appspot.com
Get SDK at code.google.com/appengine
Write a simple helloworld WSGI app
Run local server with dev_appserver.py .
Deploy to Google with appcfg.py update .
View your app at your-app.appspot.com
How to Run with Python on App Engine
How to Run with Python on App Engine

 from wsgiref.handlers import CGIHandler

 def helloworld( environ, start_response):
   status = '200 OK'
   headers = [('Content-Type', 'text/plain')]
   start_response(status, headers)
   return ['Hello, World!']

 def main():
     CGIHandler().run(helloworld)
 if __name__ == '__main__':
     main()
How to Run with Python on App Engine

 from wsgiref.handlers import CGIHandler

 def helloworld( environ, start_response):
   status = '200 OK'
   headers = [('Content-Type', 'text/plain')]
   start_response(status, headers)
   return ['Hello, World!']

 def main():
     CGIHandler().run(helloworld)
 if __name__ == '__main__':
     main()
How to Run with Python on App Engine

 from wsgiref.handlers import CGIHandler

 def helloworld( environ, start_response):
   status = '200 OK'
   headers = [('Content-Type', 'text/plain')]
   start_response(status, headers)
   return ['Hello, World!']

 def main():
     CGIHandler().run(helloworld)
 if __name__ == '__main__':
     main()
How to Run with Python on App Engine

 from wsgiref.handlers import CGIHandler

 def helloworld( environ, start_response):
   status = '200 OK'
   headers = [('Content-Type', 'text/plain')]
   start_response(status, headers)
   return ['Hello, World!']

 def main():
     CGIHandler().run(helloworld)
 if __name__ == '__main__':
     main()
How to Run with Python on App Engine

 from wsgiref.handlers import CGIHandler

 def helloworld( environ, start_response):
   status = '200 OK'
   headers = [('Content-Type', 'text/plain')]
   start_response(status, headers)
   return ['Hello, World!']

 def main():
     CGIHandler().run(helloworld)
 if __name__ == '__main__':
     main()
A Little App Engine History
A Little App Engine History

April 7th 2008, Released, Python only,
10,000 signups, limited to 3 apps per user.
A Little App Engine History

April 7th 2008, Released, Python only,
10,000 signups, limited to 3 apps per user.
Monthly updates, open signups, projected
pricing, image, memcache APIs, 10 apps
per user, admin dashboard, download logs.
A Little App Engine History

April 7th 2008, Released, Python only,
10,000 signups, limited to 3 apps per user.
Monthly updates, open signups, projected
pricing, image, memcache APIs, 10 apps
per user, admin dashboard, download logs.
April 7th 2009, added Java Support, cron,
datastore import/export, firewall support.
A Little App Engine History

April 7th 2008, Released, Python only,
10,000 signups, limited to 3 apps per user.
Monthly updates, open signups, projected
pricing, image, memcache APIs, 10 apps
per user, admin dashboard, download logs.
April 7th 2009, added Java Support, cron,
datastore import/export, firewall support.
Monthly updates, Task Queue, XMPP,
incoming mail soon to be released.
App Engine Services
App Engine Services
Datastore - BigTable - Scalable Read/Write
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
Google Accounts - basic Login and Logout
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
Google Accounts - basic Login and Logout
Mail - send email and soon receive email
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
Google Accounts - basic Login and Logout
Mail - send email and soon receive email
Images - scale, compose, adjust colors
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
Google Accounts - basic Login and Logout
Mail - send email and soon receive email
Images - scale, compose, adjust colors
Cron - up to 20 periodic webhooks
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
Google Accounts - basic Login and Logout
Mail - send email and soon receive email
Images - scale, compose, adjust colors
Cron - up to 20 periodic webhooks
TaskQueue - dynamic concurrent webhooks
App Engine Services
Datastore - BigTable - Scalable Read/Write
Memcache - shared among your instances
Google Accounts - basic Login and Logout
Mail - send email and soon receive email
Images - scale, compose, adjust colors
Cron - up to 20 periodic webhooks
TaskQueue - dynamic concurrent webhooks
XMPP - send/recv your-app@appspot.com
A Look at Big Table
A Look at BigTable

Atomic - writes either commit or fail
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
MVCC - writers never block readers
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
MVCC - writers never block readers
Scalable Write - entities sharded to groups
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
MVCC - writers never block readers
Scalable Write - entities sharded to groups
Transactions - inter-table txns possible
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
MVCC - writers never block readers
Scalable Write - entities sharded to groups
Transactions - inter-table txns possible
Schema-less - add properties on the fly
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
MVCC - writers never block readers
Scalable Write - entities sharded to groups
Transactions - inter-table txns possible
Schema-less - add properties on the fly
Indexed - adds indexes at write time
A Look at BigTable

Atomic - writes either commit or fail
Consistent - writes are synchronous
MVCC - writers never block readers
Scalable Write - entities sharded to groups
Transactions - inter-table txns possible
Schema-less - add properties on the fly
Indexed - adds indexes at write time
Queries - seek 1st index, then scan down
App Engine Restrictions
App Engine Restrictions

Read-only access to file system.
App Engine Restrictions

Read-only access to file system.
No C-extensions, pure python only.
App Engine Restrictions

Read-only access to file system.
No C-extensions, pure python only.
Applications cannot create new threads.
App Engine Restrictions

Read-only access to file system.
No C-extensions, pure python only.
Applications cannot create new threads.
10 MB request and response size limit.
App Engine Restrictions

Read-only access to file system.
No C-extensions, pure python only.
Applications cannot create new threads.
10 MB request and response size limit.
1 MB datastore entity size limit.
App Engine Restrictions

Read-only access to file system.
No C-extensions, pure python only.
Applications cannot create new threads.
10 MB request and response size limit.
1 MB datastore entity size limit.
1000 results max per datastore query.
App Engine Restrictions

Read-only access to file system.
No C-extensions, pure python only.
Applications cannot create new threads.
10 MB request and response size limit.
1 MB datastore entity size limit.
1000 results max per datastore query.
30 second deadline per request/response.
App Engine Advantages
App Engine Advantages
Auto Scaling - No need to over provision.
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
Easy Logs - View logs in web console.
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
Easy Logs - View logs in web console.
Easy Deployment - Literally 1-click deploy.
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
Easy Logs - View logs in web console.
Easy Deployment - Literally 1-click deploy.
Free Quota - 99% of apps will pay nothing.
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
Easy Logs - View logs in web console.
Easy Deployment - Literally 1-click deploy.
Free Quota - 99% of apps will pay nothing.
Affordable Scaling - Prices better than AWS.
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
Easy Logs - View logs in web console.
Easy Deployment - Literally 1-click deploy.
Free Quota - 99% of apps will pay nothing.
Affordable Scaling - Prices better than AWS.
No config - No need to config OS or servers.
App Engine Advantages
Auto Scaling - No need to over provision.
Static Files - Static files use Google's CDN
Easy Logs - View logs in web console.
Easy Deployment - Literally 1-click deploy.
Free Quota - 99% of apps will pay nothing.
Affordable Scaling - Prices better than AWS.
No config - No need to config OS or servers.
Easy Security - Google patches OS/servers.
App Engine Case Study: Ruly




Link shortener called Ruly at http://ru.ly
Built with Web2py, AppEngine, BigTable.
App Engine Case Study: Ruly
Uses a 'WideCounter' to generate short IDs in a
sharded and scalable way on BigTable.

 class WideCounter(object):

   class WideCounter(db.Model):
      c = db.IntegerProperty('Count', default=0, required=True)

   def next(self, namespace='', shard=None):
     if shard is None:
         shard = random.randint(0, self.max_shard)
     key_name = '/%s/%s/%s' % (self.namespace, namespace, shard)
     def txn():
         counter = self.WideCounter.get_by_key_name(key_name)
         if counter:
             counter.c += 1
         else:
             counter = self.WideCounter(key_name=key_name)
         counter.put()
         return counter.c
     count = db.run_in_transaction(txn)
     return self.to_code(shard, self.padleft) + self.to_code(count, self.padright)
Browse Logs in Web Console (Screenshot)
Manage App in Web Console (Screenshot)
Study Best Practices Early
Study Best Practices Early

Stop thinking in terms of SQL joins at
request time, because joins will not scale.
Study Best Practices Early

Stop thinking in terms of SQL joins at
request time, because joins will not scale.
Do not compute results at request time,
instead pre-compute results and simply
return answers at request time.
Study Best Practices Early

Stop thinking in terms of SQL joins at
request time, because joins will not scale.
Do not compute results at request time,
instead pre-compute results and simply
return answers at request time.
Break up large tasks into smaller tasks and
use the task queue to execute them.
Study Best Practices Early

Stop thinking in terms of SQL joins at
request time, because joins will not scale.
Do not compute results at request time,
instead pre-compute results and simply
return answers at request time.
Break up large tasks into smaller tasks and
use the task queue to execute them.
Design your app using these guidelines, so
you do not have to rewrite it if it becomes
popular, because it will automatically scale.
Coming Soon to AppEngine
Coming Soon to AppEngine


Service for storing and serving large files
Coming Soon to AppEngine


Service for storing and serving large files
Incoming email support
Coming Soon to AppEngine


Service for storing and serving large files
Incoming email support
More support for map-reduce
Coming Soon to AppEngine


Service for storing and serving large files
Incoming email support
More support for map-reduce
Cursors for continuing results of Datastore
queries past the 1000 entity limit
Coming Soon to AppEngine


Service for storing and serving large files
Incoming email support
More support for map-reduce
Cursors for continuing results of Datastore
queries past the 1000 entity limit
Alerting system for exceptions in your app
Coming Soon to AppEngine


Service for storing and serving large files
Incoming email support
More support for map-reduce
Cursors for continuing results of Datastore
queries past the 1000 entity limit
Alerting system for exceptions in your app
Datastore dump and restore facility
Photo Credits


http://www.flickr.com/photos/13476480@N07/3711908745/sizes/o/

http://www.flickr.com/photos/niallkennedy/3422255193/sizes/l/

http://www.flickr.com/photos/30050915@N05/3046571642/sizes/o/

http://www.flickr.com/photos/robbie1/442214088/

http://www.flickr.com/photos/zavo/205961178/

http://www.flickr.com/photos/annapickard/20988642/

http://www.flickr.com/photos/billsphotos/2536260790/
Questions




Robin Bhattacharyya
  twitter.com/rcb

More Related Content

What's hot

Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaLars Vogel
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App EngineAndrea Spadaccini
 
Google App Engine
Google App EngineGoogle App Engine
Google App EngineCsaba Toth
 
Google app engine - Overview
Google app engine - OverviewGoogle app engine - Overview
Google app engine - OverviewNathan Quach
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
Google App Engine (Introduction)
Google App Engine (Introduction)Google App Engine (Introduction)
Google App Engine (Introduction)Praveen Hanchinal
 
Google App Engine: An Introduction
Google App Engine: An IntroductionGoogle App Engine: An Introduction
Google App Engine: An IntroductionAbu Ashraf Masnun
 
Google app engine
Google app engineGoogle app engine
Google app engineRenjith318
 
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...e-Legion
 
Powering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud PlatformPowering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud PlatformRomin Irani
 
PaaS application in Heroku
PaaS application in HerokuPaaS application in Heroku
PaaS application in HerokuDileepa Jayakody
 
Google Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG BelgaumGoogle Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG Belgaumsandeephegde
 
Continuous Integration with Jenkins and Java EE
Continuous Integration with Jenkins and Java EEContinuous Integration with Jenkins and Java EE
Continuous Integration with Jenkins and Java EEFrancesco Marchitelli
 

What's hot (20)

Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
Google App Engine tutorial
Google App Engine tutorialGoogle App Engine tutorial
Google App Engine tutorial
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Engine
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Google app engine - Overview
Google app engine - OverviewGoogle app engine - Overview
Google app engine - Overview
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Engine
 
Google app engine
Google app engineGoogle app engine
Google app engine
 
Google App Engine (Introduction)
Google App Engine (Introduction)Google App Engine (Introduction)
Google App Engine (Introduction)
 
Google App Engine: An Introduction
Google App Engine: An IntroductionGoogle App Engine: An Introduction
Google App Engine: An Introduction
 
Google app engine
Google app engineGoogle app engine
Google app engine
 
App Engine
App EngineApp Engine
App Engine
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Powering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud PlatformPowering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud Platform
 
PaaS application in Heroku
PaaS application in HerokuPaaS application in Heroku
PaaS application in Heroku
 
Google Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG BelgaumGoogle Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG Belgaum
 
Continuous Integration with Jenkins and Java EE
Continuous Integration with Jenkins and Java EEContinuous Integration with Jenkins and Java EE
Continuous Integration with Jenkins and Java EE
 

Viewers also liked

Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Enginerajdeep
 
Google app engine
Google app engineGoogle app engine
Google app engineSuraj Mehta
 
App Engine Presentation @ SFJUG Sep 2010
App Engine Presentation @ SFJUG Sep 2010App Engine Presentation @ SFJUG Sep 2010
App Engine Presentation @ SFJUG Sep 2010Chris Schalk
 
Cloud Computing by Fatma Ghacham
Cloud Computing  by  Fatma GhachamCloud Computing  by  Fatma Ghacham
Cloud Computing by Fatma GhachamFatma Ghachem
 
Google app engine introduction
Google app engine introductionGoogle app engine introduction
Google app engine introductionrajsandhu1989
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingContent Marketing Institute
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 

Viewers also liked (12)

Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Engine
 
Google app engine
Google app engineGoogle app engine
Google app engine
 
App Engine Presentation @ SFJUG Sep 2010
App Engine Presentation @ SFJUG Sep 2010App Engine Presentation @ SFJUG Sep 2010
App Engine Presentation @ SFJUG Sep 2010
 
Cloud Computing by Fatma Ghacham
Cloud Computing  by  Fatma GhachamCloud Computing  by  Fatma Ghacham
Cloud Computing by Fatma Ghacham
 
Google app engine introduction
Google app engine introductionGoogle app engine introduction
Google app engine introduction
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 

Similar to Gentle App Engine Intro

App Engine On Air: Munich
App Engine On Air: MunichApp Engine On Air: Munich
App Engine On Air: Munichdion
 
App engine devfest_mexico_10
App engine devfest_mexico_10App engine devfest_mexico_10
App engine devfest_mexico_10Chris Schalk
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applicationsFDConf
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Jan Jongboom
 
Get up and running with google app engine in 60 minutes or less
Get up and running with google app engine in 60 minutes or lessGet up and running with google app engine in 60 minutes or less
Get up and running with google app engine in 60 minutes or lesszrok
 
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRaymond Camden
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Pythongturnquist
 
MongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB
 
Joomla Extreme Performance
Joomla Extreme PerformanceJoomla Extreme Performance
Joomla Extreme PerformanceMitch Pirtle
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaLars Vogel
 
Creating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services APICreating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services APIDavid Keener
 
Frontend Workflow
Frontend WorkflowFrontend Workflow
Frontend WorkflowDelphiCon
 
Python Ireland Nov 2009 Talk - Appengine
Python Ireland Nov 2009 Talk - AppenginePython Ireland Nov 2009 Talk - Appengine
Python Ireland Nov 2009 Talk - AppenginePython Ireland
 
MongoDB World 2019: In-App Bug Reporting
MongoDB World 2019: In-App Bug ReportingMongoDB World 2019: In-App Bug Reporting
MongoDB World 2019: In-App Bug ReportingMongoDB
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekDr. Felix Raab
 
How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio  How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio Optimizely
 
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupWeb Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupJonathan Klein
 

Similar to Gentle App Engine Intro (20)

App Engine On Air: Munich
App Engine On Air: MunichApp Engine On Air: Munich
App Engine On Air: Munich
 
App engine devfest_mexico_10
App engine devfest_mexico_10App engine devfest_mexico_10
App engine devfest_mexico_10
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applications
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014
 
Get up and running with google app engine in 60 minutes or less
Get up and running with google app engine in 60 minutes or lessGet up and running with google app engine in 60 minutes or less
Get up and running with google app engine in 60 minutes or less
 
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
 
Rapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoopRapid API Development with LoopBack/StrongLoop
Rapid API Development with LoopBack/StrongLoop
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
MongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch Tutorial
 
Joomla Extreme Performance
Joomla Extreme PerformanceJoomla Extreme Performance
Joomla Extreme Performance
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
Creating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services APICreating a World-Class RESTful Web Services API
Creating a World-Class RESTful Web Services API
 
Frontend Workflow
Frontend WorkflowFrontend Workflow
Frontend Workflow
 
Python Ireland Nov 2009 Talk - Appengine
Python Ireland Nov 2009 Talk - AppenginePython Ireland Nov 2009 Talk - Appengine
Python Ireland Nov 2009 Talk - Appengine
 
MongoDB World 2019: In-App Bug Reporting
MongoDB World 2019: In-App Bug ReportingMongoDB World 2019: In-App Bug Reporting
MongoDB World 2019: In-App Bug Reporting
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one week
 
How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio  How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio
 
Sst hackathon express
Sst hackathon expressSst hackathon express
Sst hackathon express
 
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP MeetupWeb Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
 

Recently uploaded

Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Recently uploaded (20)

Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

Gentle App Engine Intro

  • 1. A Gentle Introduction to Google App Engine 10/2009 Robin Bhattacharyya twitter.com/rcb
  • 3. Quick Survey Heard of App Engine before today?
  • 4. Quick Survey Heard of App Engine before today? Installed App Engine SDK?
  • 5. Quick Survey Heard of App Engine before today? Installed App Engine SDK? Started a sample app on localhost?
  • 6. Quick Survey Heard of App Engine before today? Installed App Engine SDK? Started a sample app on localhost? Deployed an app to App Engine?
  • 7. Quick Survey Heard of App Engine before today? Installed App Engine SDK? Started a sample app on localhost? Deployed an app to App Engine? Plan to use App Engine for production?
  • 8. Quick Survey Heard of App Engine before today? Installed App Engine SDK? Started a sample app on localhost? Deployed an app to App Engine? Plan to use App Engine for production? Already using App Engine in production?
  • 9. What exactly is Google App Engine?
  • 10. What exactly is Google App Engine? Host web apps on Google’s infrastructure
  • 11. What exactly is Google App Engine? Host web apps on Google’s infrastructure No server maintenance, auto scaling
  • 12. What exactly is Google App Engine? Host web apps on Google’s infrastructure No server maintenance, auto scaling No database maintenance, uses BigTable
  • 13. What exactly is Google App Engine? Host web apps on Google’s infrastructure No server maintenance, auto scaling No database maintenance, uses BigTable Free quota, 1G storage, 5M hits/month
  • 14. What exactly is Google App Engine? Host web apps on Google’s infrastructure No server maintenance, auto scaling No database maintenance, uses BigTable Free quota, 1G storage, 5M hits/month SDK for development, easy deployment
  • 15. What exactly is Google App Engine? Host web apps on Google’s infrastructure No server maintenance, auto scaling No database maintenance, uses BigTable Free quota, 1G storage, 5M hits/month SDK for development, easy deployment Easy to get started, create up to 10 apps
  • 16. Getting Started with App Engine
  • 17. Getting Started with App Engine Signup and add your-app at appspot.com
  • 18. Getting Started with App Engine Signup and add your-app at appspot.com Get SDK at code.google.com/appengine
  • 19. Getting Started with App Engine Signup and add your-app at appspot.com Get SDK at code.google.com/appengine Write a simple helloworld WSGI app
  • 20. Getting Started with App Engine Signup and add your-app at appspot.com Get SDK at code.google.com/appengine Write a simple helloworld WSGI app Run local server with dev_appserver.py .
  • 21. Getting Started with App Engine Signup and add your-app at appspot.com Get SDK at code.google.com/appengine Write a simple helloworld WSGI app Run local server with dev_appserver.py . Deploy to Google with appcfg.py update .
  • 22. Getting Started with App Engine Signup and add your-app at appspot.com Get SDK at code.google.com/appengine Write a simple helloworld WSGI app Run local server with dev_appserver.py . Deploy to Google with appcfg.py update . View your app at your-app.appspot.com
  • 23. How to Run with Python on App Engine
  • 24. How to Run with Python on App Engine from wsgiref.handlers import CGIHandler def helloworld( environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/plain')] start_response(status, headers) return ['Hello, World!'] def main(): CGIHandler().run(helloworld) if __name__ == '__main__': main()
  • 25. How to Run with Python on App Engine from wsgiref.handlers import CGIHandler def helloworld( environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/plain')] start_response(status, headers) return ['Hello, World!'] def main(): CGIHandler().run(helloworld) if __name__ == '__main__': main()
  • 26. How to Run with Python on App Engine from wsgiref.handlers import CGIHandler def helloworld( environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/plain')] start_response(status, headers) return ['Hello, World!'] def main(): CGIHandler().run(helloworld) if __name__ == '__main__': main()
  • 27. How to Run with Python on App Engine from wsgiref.handlers import CGIHandler def helloworld( environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/plain')] start_response(status, headers) return ['Hello, World!'] def main(): CGIHandler().run(helloworld) if __name__ == '__main__': main()
  • 28. How to Run with Python on App Engine from wsgiref.handlers import CGIHandler def helloworld( environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/plain')] start_response(status, headers) return ['Hello, World!'] def main(): CGIHandler().run(helloworld) if __name__ == '__main__': main()
  • 29. A Little App Engine History
  • 30. A Little App Engine History April 7th 2008, Released, Python only, 10,000 signups, limited to 3 apps per user.
  • 31. A Little App Engine History April 7th 2008, Released, Python only, 10,000 signups, limited to 3 apps per user. Monthly updates, open signups, projected pricing, image, memcache APIs, 10 apps per user, admin dashboard, download logs.
  • 32. A Little App Engine History April 7th 2008, Released, Python only, 10,000 signups, limited to 3 apps per user. Monthly updates, open signups, projected pricing, image, memcache APIs, 10 apps per user, admin dashboard, download logs. April 7th 2009, added Java Support, cron, datastore import/export, firewall support.
  • 33. A Little App Engine History April 7th 2008, Released, Python only, 10,000 signups, limited to 3 apps per user. Monthly updates, open signups, projected pricing, image, memcache APIs, 10 apps per user, admin dashboard, download logs. April 7th 2009, added Java Support, cron, datastore import/export, firewall support. Monthly updates, Task Queue, XMPP, incoming mail soon to be released.
  • 35. App Engine Services Datastore - BigTable - Scalable Read/Write
  • 36. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances
  • 37. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances Google Accounts - basic Login and Logout
  • 38. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances Google Accounts - basic Login and Logout Mail - send email and soon receive email
  • 39. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances Google Accounts - basic Login and Logout Mail - send email and soon receive email Images - scale, compose, adjust colors
  • 40. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances Google Accounts - basic Login and Logout Mail - send email and soon receive email Images - scale, compose, adjust colors Cron - up to 20 periodic webhooks
  • 41. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances Google Accounts - basic Login and Logout Mail - send email and soon receive email Images - scale, compose, adjust colors Cron - up to 20 periodic webhooks TaskQueue - dynamic concurrent webhooks
  • 42. App Engine Services Datastore - BigTable - Scalable Read/Write Memcache - shared among your instances Google Accounts - basic Login and Logout Mail - send email and soon receive email Images - scale, compose, adjust colors Cron - up to 20 periodic webhooks TaskQueue - dynamic concurrent webhooks XMPP - send/recv your-app@appspot.com
  • 43. A Look at Big Table
  • 44. A Look at BigTable Atomic - writes either commit or fail
  • 45. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous
  • 46. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous MVCC - writers never block readers
  • 47. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous MVCC - writers never block readers Scalable Write - entities sharded to groups
  • 48. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous MVCC - writers never block readers Scalable Write - entities sharded to groups Transactions - inter-table txns possible
  • 49. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous MVCC - writers never block readers Scalable Write - entities sharded to groups Transactions - inter-table txns possible Schema-less - add properties on the fly
  • 50. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous MVCC - writers never block readers Scalable Write - entities sharded to groups Transactions - inter-table txns possible Schema-less - add properties on the fly Indexed - adds indexes at write time
  • 51. A Look at BigTable Atomic - writes either commit or fail Consistent - writes are synchronous MVCC - writers never block readers Scalable Write - entities sharded to groups Transactions - inter-table txns possible Schema-less - add properties on the fly Indexed - adds indexes at write time Queries - seek 1st index, then scan down
  • 53. App Engine Restrictions Read-only access to file system.
  • 54. App Engine Restrictions Read-only access to file system. No C-extensions, pure python only.
  • 55. App Engine Restrictions Read-only access to file system. No C-extensions, pure python only. Applications cannot create new threads.
  • 56. App Engine Restrictions Read-only access to file system. No C-extensions, pure python only. Applications cannot create new threads. 10 MB request and response size limit.
  • 57. App Engine Restrictions Read-only access to file system. No C-extensions, pure python only. Applications cannot create new threads. 10 MB request and response size limit. 1 MB datastore entity size limit.
  • 58. App Engine Restrictions Read-only access to file system. No C-extensions, pure python only. Applications cannot create new threads. 10 MB request and response size limit. 1 MB datastore entity size limit. 1000 results max per datastore query.
  • 59. App Engine Restrictions Read-only access to file system. No C-extensions, pure python only. Applications cannot create new threads. 10 MB request and response size limit. 1 MB datastore entity size limit. 1000 results max per datastore query. 30 second deadline per request/response.
  • 61. App Engine Advantages Auto Scaling - No need to over provision.
  • 62. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN
  • 63. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN Easy Logs - View logs in web console.
  • 64. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN Easy Logs - View logs in web console. Easy Deployment - Literally 1-click deploy.
  • 65. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN Easy Logs - View logs in web console. Easy Deployment - Literally 1-click deploy. Free Quota - 99% of apps will pay nothing.
  • 66. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN Easy Logs - View logs in web console. Easy Deployment - Literally 1-click deploy. Free Quota - 99% of apps will pay nothing. Affordable Scaling - Prices better than AWS.
  • 67. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN Easy Logs - View logs in web console. Easy Deployment - Literally 1-click deploy. Free Quota - 99% of apps will pay nothing. Affordable Scaling - Prices better than AWS. No config - No need to config OS or servers.
  • 68. App Engine Advantages Auto Scaling - No need to over provision. Static Files - Static files use Google's CDN Easy Logs - View logs in web console. Easy Deployment - Literally 1-click deploy. Free Quota - 99% of apps will pay nothing. Affordable Scaling - Prices better than AWS. No config - No need to config OS or servers. Easy Security - Google patches OS/servers.
  • 69. App Engine Case Study: Ruly Link shortener called Ruly at http://ru.ly Built with Web2py, AppEngine, BigTable.
  • 70. App Engine Case Study: Ruly Uses a 'WideCounter' to generate short IDs in a sharded and scalable way on BigTable. class WideCounter(object): class WideCounter(db.Model): c = db.IntegerProperty('Count', default=0, required=True) def next(self, namespace='', shard=None): if shard is None: shard = random.randint(0, self.max_shard) key_name = '/%s/%s/%s' % (self.namespace, namespace, shard) def txn(): counter = self.WideCounter.get_by_key_name(key_name) if counter: counter.c += 1 else: counter = self.WideCounter(key_name=key_name) counter.put() return counter.c count = db.run_in_transaction(txn) return self.to_code(shard, self.padleft) + self.to_code(count, self.padright)
  • 71. Browse Logs in Web Console (Screenshot)
  • 72. Manage App in Web Console (Screenshot)
  • 74. Study Best Practices Early Stop thinking in terms of SQL joins at request time, because joins will not scale.
  • 75. Study Best Practices Early Stop thinking in terms of SQL joins at request time, because joins will not scale. Do not compute results at request time, instead pre-compute results and simply return answers at request time.
  • 76. Study Best Practices Early Stop thinking in terms of SQL joins at request time, because joins will not scale. Do not compute results at request time, instead pre-compute results and simply return answers at request time. Break up large tasks into smaller tasks and use the task queue to execute them.
  • 77. Study Best Practices Early Stop thinking in terms of SQL joins at request time, because joins will not scale. Do not compute results at request time, instead pre-compute results and simply return answers at request time. Break up large tasks into smaller tasks and use the task queue to execute them. Design your app using these guidelines, so you do not have to rewrite it if it becomes popular, because it will automatically scale.
  • 78. Coming Soon to AppEngine
  • 79. Coming Soon to AppEngine Service for storing and serving large files
  • 80. Coming Soon to AppEngine Service for storing and serving large files Incoming email support
  • 81. Coming Soon to AppEngine Service for storing and serving large files Incoming email support More support for map-reduce
  • 82. Coming Soon to AppEngine Service for storing and serving large files Incoming email support More support for map-reduce Cursors for continuing results of Datastore queries past the 1000 entity limit
  • 83. Coming Soon to AppEngine Service for storing and serving large files Incoming email support More support for map-reduce Cursors for continuing results of Datastore queries past the 1000 entity limit Alerting system for exceptions in your app
  • 84. Coming Soon to AppEngine Service for storing and serving large files Incoming email support More support for map-reduce Cursors for continuing results of Datastore queries past the 1000 entity limit Alerting system for exceptions in your app Datastore dump and restore facility
  • 86. Questions Robin Bhattacharyya twitter.com/rcb