SlideShare a Scribd company logo
1 of 36
Download to read offline
Google App Engine
         Jonathan Blocksom
Stack Overflow DevDays DC, 10/26/09
Submit a Question: http://tinyurl.com/gae-dd09


              Attention Conservation Notice
                  • Jonathan Blocksom
                         jblocksom@google.com
                         @jblocksom

                         Software Engineer
                         Google
                         Public Sector Projects Team
Submit a Question: http://tinyurl.com/gae-dd09


                     We’re lonely




                     Open positions at Google in DC
Submit a Question: http://tinyurl.com/gae-dd09


              App Engine!
                  • Launched April 2008
                  • Paid Use Feb 2009
                  • Java support May 2009
                  • Latest Release (1.2.7) October 2009
                   • Incoming Email
                  • Previous Release (1.2.5) September 2009
                   • XMPP Support
Submit a Question: http://tinyurl.com/gae-dd09


              Your Scalable Website?
                  • Brad Fitzpatrick describes LiveJournal in ’07:
                      net.
                                             LiveJournal Backend: 2007
                                                                  Today
                                                                            (Roughly.)

                      BIG-IP
                                             perlbal (httpd/proxy)                                           Global Database
                             bigip1                                        mod_perl
                             bigip2                  proxy1                                                       master_a master_b
                                                                             web1
                                                     proxy2                  web2
                                                     proxy3                                      Memcached
                                                                             web3                            slave1 slave2     ...   slave5
                   djabberd                          proxy4                                         mc1
                                                                             web4
                       djabberd                      proxy5
                                                                               ...                  mc2          User DB Cluster 1
                       djabberd
                                                                             webN                   mc3             uc1a         uc1b
                                                                                                    mc4          User DB Cluster 2
                                                                                                     ...            uc2a         uc2b
                                                                     gearmand
                   Mogile Storage Nodes                                  gearmand1                  mcN          User DB Cluster 3
                      sto1            sto2                               gearmandN                                  uc3a         uc3b
                                                 Mogile Trackers
                       ...            sto8
                                                  tracker1    tracker3                                           User DB Cluster N
                                                                                                                    ucNa         ucNb
                     MogileFS Database                                               “workers”
                                                                                        gearwrkN                 Job Queues (xN)
                         mog_a           mog_b                                         theschwkN                    jqNa         jqNb


                      slave1     slaveN
                 http://danga.com/words/
                                                                                                                                              3
Submit a Question: http://tinyurl.com/gae-dd09


              App Engine Scalable Website



               Request                           App Engine   Response
Submit a Question: http://tinyurl.com/gae-dd09


              What’s Scalable?
                  • Google Moderator on App Engineused in
                         March 2009 for White House Town Hall
                         meeting
Submit a Question: http://tinyurl.com/gae-dd09


              Scalable
Submit a Question: http://tinyurl.com/gae-dd09


              Google Moderator team didn’t...
                  • Provision a server
                  • Install and configure an OS
                  • Install and configure a web server
                  • Install and configure a web framework
                  • Install and configure a database
                  • Install and configure a load balancer
                  • Create user accounts
                  • Crash in the middle of any of the above
Submit a Question: http://tinyurl.com/gae-dd09


              App Engine Architecture
Submit a Question: http://tinyurl.com/gae-dd09


              Static Content
                  • Served by Google
                         Static Content Servers
                  • Very Efficient
Submit a Question: http://tinyurl.com/gae-dd09


              Dynamic Content
                  • Java xor Python
                  • Sandboxed
                   • No file writes
                   • No sockets
                   • No spawning threads/processes
                  • Smart about caching
                  • Fairly standard CGI Framework
                  • Measured and Instrumented
Submit a Question: http://tinyurl.com/gae-dd09


              Datastore 1 / 3
                  • Based on BigTable,
                         transitioning to MegaStore
                  • ACID Compliant

                  • 2008 Talk on Implementation:
                         http://sites.google.com/site/io/under-the-
                         covers-of-the-google-app-engine-datastore
Submit a Question: http://tinyurl.com/gae-dd09


              Datastore 2 / 3
                  • Typical types:
                         Int, String, DateTime,
                         GeoPt, PhoneNumber,
                         PostalAddress, Email, Link, Blob...
Submit a Question: http://tinyurl.com/gae-dd09


              Datastore 3 / 3
                  • GQL:
                         Google Query Language
                  • If it’s not SQL, it must be good!
                  SELECT [* | __key__] FROM <kind>
                    [WHERE <condition> [AND <condition> ...]]
                    [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
                    [LIMIT [<offset>,]<count>]
                    [OFFSET <offset>]

                  <condition> := <property> {< | <= | > | >= | = | != } <value>
                  <condition> := <property> IN <list>
                  <condition> := ANCESTOR IS <entity or key>
Submit a Question: http://tinyurl.com/gae-dd09


              Memcache
                  • Arbitrary key/value cache
                  • Similar API to memcached
                  • get, set
                  • get_multi, set_multi for speed
                  • Namespace Support
                  • 1MB limit per entry
                  • Free Quota 8.6M/day, 48K/min (800/sec)
Submit a Question: http://tinyurl.com/gae-dd09


              Users & Authentication
                  • @gmail.com addresses
                  • Apps for Domain
                  • Admin Privileges
Submit a Question: http://tinyurl.com/gae-dd09


              URL Fetch
                  • Load URL
                  • Asynchronous support
                  • HTTP / HTTPS
                  • Max 10 second response (default 5)
                  • Max 1MB data
Submit a Question: http://tinyurl.com/gae-dd09


              Even More...
                  • Scheduled Tasks
                  • Task Queue
                  • Email
                  • Image Manipulation           cron jobs


                  • XMPP                          email



                  • ...
                                                  XMPP
Submit a Question: http://tinyurl.com/gae-dd09


              Web Hooks Pattern
                  • Incoming data / operations to perform are
                         URLs with POST data
                  • Handled same as
                         web request



               Scheduled Tasks

               Task Queue tasks

               Incoming Email

               XMPP Messages
Submit a Question: http://tinyurl.com/gae-dd09


              Templates?
                  • Treetop Wants to know
Submit a Question: http://tinyurl.com/gae-dd09


              Templates!
                  • Django Templates built in
                         Variable substitution, function calls, loops, etc
                  • Can add your own Python temlpate lib
Submit a Question: http://tinyurl.com/gae-dd09


              Let’s Review!
Submit a Question: http://tinyurl.com/gae-dd09


              Developing w/ App Engine
                  • Local test server
                  • Write your code, html, etc on local machine
                  • Send code to App Engine
                  • Monitor in App Engine Admin Console
Submit a Question: http://tinyurl.com/gae-dd09


              Dashboard Demo
                  • http://appengine.google.com/
Submit a Question: http://tinyurl.com/gae-dd09


              What have we done?
                  • Served static web pages
                  • Served dynamic web pages
                  • Stored data (cached & persistent)
                  • Ran a cron Job
                  • Authenticated users
                  • We could have...
                   • Scheduled a task, sent or received email,
                              loaded a URL, modified an image,
                              rocked out with XMPP
Submit a Question: http://tinyurl.com/gae-dd09


              Quotas
                  • 34 global quotas
                         in Dashboard
                  • Individual quotas:
                         request size
                         time
                         amount of data
                  • Exceptions
                         thrown when hit
                  • Free and Paid
Submit a Question: http://tinyurl.com/gae-dd09


              Quota Rule of Thumb
                  • Less than 1000 of everything
                  • The Zen of Quotas:
                         Meet the quotas and you will be scalable
Submit a Question: http://tinyurl.com/gae-dd09


              All For Good
                  • Volunteering Opportunity Search Engine
                  • Started March 2009 in cooperation with
                         White House, CNCS, Craigslist, Google...
                  • Released June 2009
                  • Open source, released under Apache License
                         http://code.google.com/p/allforgood/
                  • Front end at http://allforgood.org
                         API powers search results on serve.gov
Submit a Question: http://tinyurl.com/gae-dd09


              Tech Overview
                  •      Partners provide listings in XML or Google Spreadsheets

                       •      AARP, United Way, AmeriCorp, HandsOnNetwork,
                              United Way

                  •      AFG indexes feeds, stores outside GAE

                       •      Initially Google Base

                       •      Now SOLR on private server

                  •      GAE front end

                  •      API for external apps, partners

                  •      Integration with Google Maps, FriendConnect, Facebook
Submit a Question: http://tinyurl.com/gae-dd09


              Tech Overview

User or
 API
                                                                    Search
                                                      Queries
                                                                   Backend
                                                                                 Volunteering Opportunities
                                                                   (Base or
                         App Engine                            s    SOLR)
                                                             lt
                                                          su                     Volunteering Opportunities
                                                       Re
                         memcache                                     Listings              ...
                                                                                 Volunteering Opportunities
                                                                   Crawler
                                     Static Content


                      Google Code SVN
Submit a Question: http://tinyurl.com/gae-dd09


              Why A Different Back End?
                  • No full text search in App Engine Datastore
Submit a Question: http://tinyurl.com/gae-dd09


              On The Promiscuous Nature of GAE
                  • GAE plays well with others
                  • Do full text search with something else!
                  • Serve large files with S3!
                  • Serve videos with YouTube!
Submit a Question: http://tinyurl.com/gae-dd09


              Challenges with AFG
                  • Parsing questionable data
                  • Integration w/ Social Networks
                  • Google Base is an Odd Duck
                  • I Was New And Had No Clue What Was
                         Going
                  • App Engine Outages
Submit a Question: http://tinyurl.com/gae-dd09


              Q &A
Submit a Question: http://tinyurl.com/gae-dd09


              More Information
                  • App Engine Documentation
                  • Google I/O 2008 & 2009
                   • 2008 for intro, 2009 for deep dives / Java
                  • http://code.google.com/events/io/2009/
                         sessions.html#appengine
                         “App Engine Nitty-Gritty”
                         “Spark Plug to Drive Train”


                  • Google Group
                  • Samples
                    http://code.google.com/p/google-app-engine-samples/

More Related Content

What's hot

Moskva Architecture Highload
Moskva Architecture HighloadMoskva Architecture Highload
Moskva Architecture Highload
Ontico
 

What's hot (19)

Postgres-XC as a Key Value Store Compared To MongoDB
Postgres-XC as a Key Value Store Compared To MongoDBPostgres-XC as a Key Value Store Compared To MongoDB
Postgres-XC as a Key Value Store Compared To MongoDB
 
MyRocks in MariaDB: why and how
MyRocks in MariaDB: why and howMyRocks in MariaDB: why and how
MyRocks in MariaDB: why and how
 
Moskva Architecture Highload
Moskva Architecture HighloadMoskva Architecture Highload
Moskva Architecture Highload
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
第17回Cassandra勉強会: MyCassandra
第17回Cassandra勉強会: MyCassandra第17回Cassandra勉強会: MyCassandra
第17回Cassandra勉強会: MyCassandra
 
The Google Chubby lock service for loosely-coupled distributed systems
The Google Chubby lock service for loosely-coupled distributed systemsThe Google Chubby lock service for loosely-coupled distributed systems
The Google Chubby lock service for loosely-coupled distributed systems
 
OSDC 2016 - MySQL-Server in Teamwork - Replication and Galera Cluster by Jörg...
OSDC 2016 - MySQL-Server in Teamwork - Replication and Galera Cluster by Jörg...OSDC 2016 - MySQL-Server in Teamwork - Replication and Galera Cluster by Jörg...
OSDC 2016 - MySQL-Server in Teamwork - Replication and Galera Cluster by Jörg...
 
Growing in the Wild. The story by CUBRID Database Developers.
Growing in the Wild. The story by CUBRID Database Developers.Growing in the Wild. The story by CUBRID Database Developers.
Growing in the Wild. The story by CUBRID Database Developers.
 
Introduction to Postrges-XC
Introduction to Postrges-XCIntroduction to Postrges-XC
Introduction to Postrges-XC
 
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
 
MySQL Meetup Prague - Modern Data Lake
MySQL Meetup Prague - Modern Data LakeMySQL Meetup Prague - Modern Data Lake
MySQL Meetup Prague - Modern Data Lake
 
MyRocks in MariaDB
MyRocks in MariaDBMyRocks in MariaDB
MyRocks in MariaDB
 
The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication Tutorial
 
djatoka for djummies
djatoka for djummiesdjatoka for djummies
djatoka for djummies
 
MySQL Parallel Replication by Booking.com
MySQL Parallel Replication by Booking.comMySQL Parallel Replication by Booking.com
MySQL Parallel Replication by Booking.com
 
Introduction of Java GC Tuning and Java Java Mission Control
Introduction of Java GC Tuning and Java Java Mission ControlIntroduction of Java GC Tuning and Java Java Mission Control
Introduction of Java GC Tuning and Java Java Mission Control
 
Large volume data analysis on the Typesafe Reactive Platform
Large volume data analysis on the Typesafe Reactive PlatformLarge volume data analysis on the Typesafe Reactive Platform
Large volume data analysis on the Typesafe Reactive Platform
 
Storage as a Service with Gluster
Storage as a Service with GlusterStorage as a Service with Gluster
Storage as a Service with Gluster
 
Say Hello to MyRocks
Say Hello to MyRocksSay Hello to MyRocks
Say Hello to MyRocks
 

Similar to App Engine Dev Days DC 20091026

豆瓣技术架构的发展历程
豆瓣技术架构的发展历程豆瓣技术架构的发展历程
豆瓣技术架构的发展历程
George Ang
 
豆瓣 Qcon2009 Beijing
豆瓣 Qcon2009 Beijing豆瓣 Qcon2009 Beijing
豆瓣 Qcon2009 Beijing
yiditushe
 
Automated testing with OffScale and MongoDB
Automated testing with OffScale and MongoDBAutomated testing with OffScale and MongoDB
Automated testing with OffScale and MongoDB
Omer Gertel
 

Similar to App Engine Dev Days DC 20091026 (20)

豆瓣技术架构的发展历程
豆瓣技术架构的发展历程豆瓣技术架构的发展历程
豆瓣技术架构的发展历程
 
豆瓣 Qcon2009 Beijing
豆瓣 Qcon2009 Beijing豆瓣 Qcon2009 Beijing
豆瓣 Qcon2009 Beijing
 
Replatforming Legacy Packaged Applications: Block-by-Block with Minecraft
Replatforming Legacy Packaged Applications: Block-by-Block with MinecraftReplatforming Legacy Packaged Applications: Block-by-Block with Minecraft
Replatforming Legacy Packaged Applications: Block-by-Block with Minecraft
 
Automated testing with OffScale and MongoDB
Automated testing with OffScale and MongoDBAutomated testing with OffScale and MongoDB
Automated testing with OffScale and MongoDB
 
(BDT318) How Netflix Handles Up To 8 Million Events Per Second
(BDT318) How Netflix Handles Up To 8 Million Events Per Second(BDT318) How Netflix Handles Up To 8 Million Events Per Second
(BDT318) How Netflix Handles Up To 8 Million Events Per Second
 
Introduction to apache kafka
Introduction to apache kafkaIntroduction to apache kafka
Introduction to apache kafka
 
Running your Java EE 6 applications in the Cloud (FISL 12)
Running your Java EE 6 applications in the Cloud (FISL 12)Running your Java EE 6 applications in the Cloud (FISL 12)
Running your Java EE 6 applications in the Cloud (FISL 12)
 
Streaming in Practice - Putting Apache Kafka in Production
Streaming in Practice - Putting Apache Kafka in ProductionStreaming in Practice - Putting Apache Kafka in Production
Streaming in Practice - Putting Apache Kafka in Production
 
NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
Practice and challenges from building IaaS
Practice and challenges from building IaaSPractice and challenges from building IaaS
Practice and challenges from building IaaS
 
Microservices with Micronaut
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
 
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
PGConf.ASIA 2019 Bali - Building PostgreSQL as a Service with Kubernetes - Ta...
 
Capacity Planning For LAMP
Capacity Planning For LAMPCapacity Planning For LAMP
Capacity Planning For LAMP
 
Backing up Wikipedia Databases
Backing up Wikipedia DatabasesBacking up Wikipedia Databases
Backing up Wikipedia Databases
 
There's no magic... until you talk about databases
 There's no magic... until you talk about databases There's no magic... until you talk about databases
There's no magic... until you talk about databases
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
My sql tutorial-oscon-2012
My sql tutorial-oscon-2012My sql tutorial-oscon-2012
My sql tutorial-oscon-2012
 
Running your Java EE 6 Applications in the Cloud
Running your Java EE 6 Applications in the CloudRunning your Java EE 6 Applications in the Cloud
Running your Java EE 6 Applications in the Cloud
 
视觉中国的MongoDB应用实践(QConBeijing2011)
视觉中国的MongoDB应用实践(QConBeijing2011)视觉中国的MongoDB应用实践(QConBeijing2011)
视觉中国的MongoDB应用实践(QConBeijing2011)
 
RocksDB meetup
RocksDB meetupRocksDB meetup
RocksDB meetup
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

App Engine Dev Days DC 20091026

  • 1. Google App Engine Jonathan Blocksom Stack Overflow DevDays DC, 10/26/09
  • 2. Submit a Question: http://tinyurl.com/gae-dd09 Attention Conservation Notice • Jonathan Blocksom jblocksom@google.com @jblocksom Software Engineer Google Public Sector Projects Team
  • 3. Submit a Question: http://tinyurl.com/gae-dd09 We’re lonely Open positions at Google in DC
  • 4. Submit a Question: http://tinyurl.com/gae-dd09 App Engine! • Launched April 2008 • Paid Use Feb 2009 • Java support May 2009 • Latest Release (1.2.7) October 2009 • Incoming Email • Previous Release (1.2.5) September 2009 • XMPP Support
  • 5. Submit a Question: http://tinyurl.com/gae-dd09 Your Scalable Website? • Brad Fitzpatrick describes LiveJournal in ’07: net. LiveJournal Backend: 2007 Today (Roughly.) BIG-IP perlbal (httpd/proxy) Global Database bigip1 mod_perl bigip2 proxy1 master_a master_b web1 proxy2 web2 proxy3 Memcached web3 slave1 slave2 ... slave5 djabberd proxy4 mc1 web4 djabberd proxy5 ... mc2 User DB Cluster 1 djabberd webN mc3 uc1a uc1b mc4 User DB Cluster 2 ... uc2a uc2b gearmand Mogile Storage Nodes gearmand1 mcN User DB Cluster 3 sto1 sto2 gearmandN uc3a uc3b Mogile Trackers ... sto8 tracker1 tracker3 User DB Cluster N ucNa ucNb MogileFS Database “workers” gearwrkN Job Queues (xN) mog_a mog_b theschwkN jqNa jqNb slave1 slaveN http://danga.com/words/ 3
  • 6. Submit a Question: http://tinyurl.com/gae-dd09 App Engine Scalable Website Request App Engine Response
  • 7. Submit a Question: http://tinyurl.com/gae-dd09 What’s Scalable? • Google Moderator on App Engineused in March 2009 for White House Town Hall meeting
  • 8. Submit a Question: http://tinyurl.com/gae-dd09 Scalable
  • 9. Submit a Question: http://tinyurl.com/gae-dd09 Google Moderator team didn’t... • Provision a server • Install and configure an OS • Install and configure a web server • Install and configure a web framework • Install and configure a database • Install and configure a load balancer • Create user accounts • Crash in the middle of any of the above
  • 10. Submit a Question: http://tinyurl.com/gae-dd09 App Engine Architecture
  • 11. Submit a Question: http://tinyurl.com/gae-dd09 Static Content • Served by Google Static Content Servers • Very Efficient
  • 12. Submit a Question: http://tinyurl.com/gae-dd09 Dynamic Content • Java xor Python • Sandboxed • No file writes • No sockets • No spawning threads/processes • Smart about caching • Fairly standard CGI Framework • Measured and Instrumented
  • 13. Submit a Question: http://tinyurl.com/gae-dd09 Datastore 1 / 3 • Based on BigTable, transitioning to MegaStore • ACID Compliant • 2008 Talk on Implementation: http://sites.google.com/site/io/under-the- covers-of-the-google-app-engine-datastore
  • 14. Submit a Question: http://tinyurl.com/gae-dd09 Datastore 2 / 3 • Typical types: Int, String, DateTime, GeoPt, PhoneNumber, PostalAddress, Email, Link, Blob...
  • 15. Submit a Question: http://tinyurl.com/gae-dd09 Datastore 3 / 3 • GQL: Google Query Language • If it’s not SQL, it must be good! SELECT [* | __key__] FROM <kind> [WHERE <condition> [AND <condition> ...]] [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]] [LIMIT [<offset>,]<count>] [OFFSET <offset>] <condition> := <property> {< | <= | > | >= | = | != } <value> <condition> := <property> IN <list> <condition> := ANCESTOR IS <entity or key>
  • 16. Submit a Question: http://tinyurl.com/gae-dd09 Memcache • Arbitrary key/value cache • Similar API to memcached • get, set • get_multi, set_multi for speed • Namespace Support • 1MB limit per entry • Free Quota 8.6M/day, 48K/min (800/sec)
  • 17. Submit a Question: http://tinyurl.com/gae-dd09 Users & Authentication • @gmail.com addresses • Apps for Domain • Admin Privileges
  • 18. Submit a Question: http://tinyurl.com/gae-dd09 URL Fetch • Load URL • Asynchronous support • HTTP / HTTPS • Max 10 second response (default 5) • Max 1MB data
  • 19. Submit a Question: http://tinyurl.com/gae-dd09 Even More... • Scheduled Tasks • Task Queue • Email • Image Manipulation cron jobs • XMPP email • ... XMPP
  • 20. Submit a Question: http://tinyurl.com/gae-dd09 Web Hooks Pattern • Incoming data / operations to perform are URLs with POST data • Handled same as web request Scheduled Tasks Task Queue tasks Incoming Email XMPP Messages
  • 21. Submit a Question: http://tinyurl.com/gae-dd09 Templates? • Treetop Wants to know
  • 22. Submit a Question: http://tinyurl.com/gae-dd09 Templates! • Django Templates built in Variable substitution, function calls, loops, etc • Can add your own Python temlpate lib
  • 23. Submit a Question: http://tinyurl.com/gae-dd09 Let’s Review!
  • 24. Submit a Question: http://tinyurl.com/gae-dd09 Developing w/ App Engine • Local test server • Write your code, html, etc on local machine • Send code to App Engine • Monitor in App Engine Admin Console
  • 25. Submit a Question: http://tinyurl.com/gae-dd09 Dashboard Demo • http://appengine.google.com/
  • 26. Submit a Question: http://tinyurl.com/gae-dd09 What have we done? • Served static web pages • Served dynamic web pages • Stored data (cached & persistent) • Ran a cron Job • Authenticated users • We could have... • Scheduled a task, sent or received email, loaded a URL, modified an image, rocked out with XMPP
  • 27. Submit a Question: http://tinyurl.com/gae-dd09 Quotas • 34 global quotas in Dashboard • Individual quotas: request size time amount of data • Exceptions thrown when hit • Free and Paid
  • 28. Submit a Question: http://tinyurl.com/gae-dd09 Quota Rule of Thumb • Less than 1000 of everything • The Zen of Quotas: Meet the quotas and you will be scalable
  • 29. Submit a Question: http://tinyurl.com/gae-dd09 All For Good • Volunteering Opportunity Search Engine • Started March 2009 in cooperation with White House, CNCS, Craigslist, Google... • Released June 2009 • Open source, released under Apache License http://code.google.com/p/allforgood/ • Front end at http://allforgood.org API powers search results on serve.gov
  • 30. Submit a Question: http://tinyurl.com/gae-dd09 Tech Overview • Partners provide listings in XML or Google Spreadsheets • AARP, United Way, AmeriCorp, HandsOnNetwork, United Way • AFG indexes feeds, stores outside GAE • Initially Google Base • Now SOLR on private server • GAE front end • API for external apps, partners • Integration with Google Maps, FriendConnect, Facebook
  • 31. Submit a Question: http://tinyurl.com/gae-dd09 Tech Overview User or API Search Queries Backend Volunteering Opportunities (Base or App Engine s SOLR) lt su Volunteering Opportunities Re memcache Listings ... Volunteering Opportunities Crawler Static Content Google Code SVN
  • 32. Submit a Question: http://tinyurl.com/gae-dd09 Why A Different Back End? • No full text search in App Engine Datastore
  • 33. Submit a Question: http://tinyurl.com/gae-dd09 On The Promiscuous Nature of GAE • GAE plays well with others • Do full text search with something else! • Serve large files with S3! • Serve videos with YouTube!
  • 34. Submit a Question: http://tinyurl.com/gae-dd09 Challenges with AFG • Parsing questionable data • Integration w/ Social Networks • Google Base is an Odd Duck • I Was New And Had No Clue What Was Going • App Engine Outages
  • 35. Submit a Question: http://tinyurl.com/gae-dd09 Q &A
  • 36. Submit a Question: http://tinyurl.com/gae-dd09 More Information • App Engine Documentation • Google I/O 2008 & 2009 • 2008 for intro, 2009 for deep dives / Java • http://code.google.com/events/io/2009/ sessions.html#appengine “App Engine Nitty-Gritty” “Spark Plug to Drive Train” • Google Group • Samples http://code.google.com/p/google-app-engine-samples/