Evite’s Use of Google App Engine
By Dan
Mesh, Vice President of Engineering at EviteThis post is part of Who's at
Google I/O, a series of guest blog posts written by developers who are appearing in
the Developer
Sandbox at Google
I/O.Evite is one of web's oldest social planning
services. Since the launch in 1998, Evite has delivered over a billion party invitations.
Although it has served us well, after ten years of operation it became necessary to replace
the aging platform, and position Evite for another decade of successful party planning.
The reengineering effort took well over a year. Our development team replaced
Java with Python and saw a significant increase in developer productivity. However, dealing
with a ten year-old Oracle database remained a challenge. To overcome scalability limitations
and inflexibility of a large relational DBMS, we designed and implemented a proprietary data
store. We conducted a series of A/B tests and gradually started migrating production traffic
to the new system.
Our initial motivation to use
Google App Engine was fast provisioning.
We introduced App Engine as a temporary solution while we increased scale and optimized our
proprietary data store. However, once we imported user profile data and put App Engine backend
services in production, we never looked back.
Importing a large data
set of user profiles from Oracle RAC into App Engine was challenging at first because we had
to perform a bulk import and then keep the data synchronized between the two datastores. As we
developed our data synchronization tools we gained better understanding of the API and
performance characteristics of the App Engine datastore.
Once we
synchronized profile data and enabled production traffic, App Engine really started to
impress. We would watch our daily traffic grow and observe App Engine’s automatic scaling in
action. Additional server instances would come online to meet increased demand and disappear
as traffic lowered, without any sysadmin intervention. Despite our proficiency in the use of
cloud computing resources and system automation, it was never this easy to provision new
servers. As Grig, Evite’s devops guru, likes to say "It's not in production until it's
monitored and graphed." App Engine’s dashboard automatically manages
instances and graphs system usage data.
Following our positive experience with
Evite profiles, we have continued to use App Engine for other services. Occasional
frustrations with elevated error rates on the
Master/Slave
Datastore disappeared as we switched to the
High
Replication Datastore. At this point we see no technical obstacles to using App
Engine more extensively. Architectural decisions and best practices implemented by the App
Engine team are very well aligned with the choices we made in designing Evite’s new platform.
This makes it easy to deploy additional services and data sets to App Engine.
The real obstacle to using App Engine exclusively for most Evite services is
risk management. As reliable and cost-effective as App Engine has been for us, it is difficult
to depend completely on a single vendor/service provider. To ensure availability of our
application we use multiple cloud providers. Unfortunately, this strategy prevents us from
using certain App Engine features and API's because we do not have adequate replacements for
them in other deployment environments.
Evite’s new platform built on
Python,
NoSQL and App Engine has
been a success. Our new web application has been well received by users, and our first
iPhone app is receiving
positive reviews. (Android version is in the works). We look forward to continued use of App
Engine for data warehousing, rapid launches of new services and other projects.
Come see Evite in the Developer Sandbox at
Google I/O on May
10-11.Dan Mesh is a Vice President of Engineering
at Evite. His extended responsibilities include espresso deliveries and release day food
orders.Posted by Scott Knaster,
Editor