CC presentation GAE
CC presentation GAE
CC presentation GAE
• Scalable
• Secure
2
App Engine Does One Thing Well
• App Engine handles HTTP(S) requests, nothing else
– Think RPC: request in, processing, response out
– Works well for the web and AJAX; also for other services
3
App Engine Architecture
req/resp
stateless APIs R/O FS
stateful datastore
APIs memcache
4
Scaling
• Low-usage apps: many apps per physical host
• High-usage apps: multiple physical hosts per app
5
Security
• Prevent the bad guys from breaking (into) your app
6
Why Not LAMP?
• Linux, Apache, MySQL/PostgreSQL, Python/Perl/PHP/Ruby
• LAMP is the industry standard
• But management is a hassle:
– Configuration, tuning
– Backup and recovery, disk space management
– Hardware failures, system crashes
– Software updates, security patches
– Log rotation, cron jobs, and much more
– Redesign needed once your database exceeds one box
7
Automatic Scaling to Application Needs
• You don’t need to configure your resource needs
• One CPU can handle many requests per second
• Apps are hashed (really mapped) onto CPUs:
– One process per app, many apps per CPU
– Creating a new process is a matter of cloning a generic “model”
process and then loading the application code (in fact the
clones are pre-created and sit in a queue)
– The process hangs around to handle more requests (reuse)
– Eventually old processes are killed (recycle)
• Busy apps (many QPS) get assigned to multiple CPUs
– This automatically adapts to the need
• as long as CPUs are available
8
Preserving Fairness Through Quotas
• Everything an app does is limited by quotas, for example:
– request count, bandwidth used, CPU usage, datastore call
count, disk space used, emails sent, even errors!
• If you run out of quota that particular operation is blocked
(raising an exception) for a while (~10 min) until replenished
• Free quotas are tuned so that a well-written app (light
CPU/datastore use) can survive a moderate “slashdotting”
• The point of quotas is to be able to support a very large
number of small apps (analogy: baggage limit in air travel)
• Large apps need raised quotas
– currently this is a manual process (search FAQ for “quota”)
– in the future you can buy more resources
9
Hierarchical Datastore
• Entities have a Kind, a Key, and Properties
– Entity ~~ Record ~~ Python dict ~~ Python class instance
– Key ~~ structured foreign key; includes Kind
– Kind ~~ Table ~~ Python class
– Property ~~ Column or Field; has a type
• Dynamically typed: Property types are recorded per Entity
• Key has either id or name
– the id is auto-assigned; alternatively, the name is set by app
– A key can be a path including the parent key, and so on
• Paths define entity groups which limit transactions
– A transaction locks the root entity (parentless ancestor key)
10
Indexes
• Properties are automatically indexed by type+value
– There is an index for each Kind / property name combo
– Whenever an entity is written all relevant indexes are updated
– However Blob and Text properties are never indexed
• This supports basic queries: AND on property equality
• For more advanced query needs, create composite indexes
– SDK auto-updates index.yaml based on queries executed
– These support inequalities (<, <=, >, >=) and result ordering
– Index building has to scan all entities due to parent keys
• For more info, see video of Ryan Barrett’s talk at Google I/O
11
The Future
• Big things we’re working on:
– Large file uploads and downloads
– Datastore import and export for large volumes
– Pay-as-you-go billing (for resource usage over free quota)
– More languages (no I’m not telling…)
– Uptime monitoring site
12
Switch to Live Demo Now
13
Q&A
• Anything goes
14