Elastic Path: commerce in the cloud
By Eddie
Chan, Software Engineer at Elastic Path
SoftwareThis 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.Elastic Path develops a very flexible
enterprise ecommerce platform. Many global brands rely on the Elastic Path platform to power
their ecommerce solutions.
Many ecommerce sites are actually complex
web applications. Catalog management, shopping cart functionality, promotion engine, order
fulfillment, and backend integrations are just some of the challenges involved in running a
full-fledged online store.
Since 2008, our Java-based platform has been
the ecommerce backbone of a couple of online stores that are being migrated to run on App
Engine. Like many complex web applications, these stores
used to run in a
multi-server environment (Apache Tomcat with a MySQL database) hosted in a colocation
center.
As the diagram above shows, our goal is to
have Elastic Path running entirely on the App Engine cloud. The storefronts have already been
migrated, and the database and remaining parts of the Elastic Path platform will be fully on
the cloud soon.
Why are we doing this? There are many benefits to
being on App Engine:
- Increased
security
- Easier deployments and
operations
- Scalability
- Cost-effectiveness
- Built-in
monitoring
We can only undergo this migration because App Engine supports
enterprise-grade Java applications, and because Elastic Path is very flexible.
Our migration’s high-level approach was to move everything except the
persistence layer onto App Engine, and then resolve issues with the technical limitations such
as the
class
whitelist and request length. We also had to modify some third-party libraries to
work around App Engine’s restrictions on operations such as class loading, threads, and
sockets.
We didn’t migrate the persistence layer because Elastic Path
uses a relational database; converting our entire object graph to the
Datastore is not
feasible now. We are working closely with Google on alternatives. In the interim, we are still
using a MySQL database and have kept our persistence layer running within a Tomcat application
in the colo. We implemented a creative solution: the non-persistence layers of Elastic Path
run on App Engine and communicate with the Tomcat-hosted persistence services via
Spring
Remoting. The back-and-forth remoting was expensive and impacted the performance of
our application so we implemented some data caching. For this, we turned to App Engine’s
Memcache, which
improved performance by an order of magnitude (less than 2 seconds average response times vs.
2 minutes or more without Memcache).
Other App Engine technologies we
use heavily include
AppStats
for performance tuning,
URL Fetch for the
Spring Remoting described above, and the fantastic
Maven GAE plugin that we use
for packaging and automated deployments. As we continue to push our platform up to the cloud,
we hope to utilize more of App Engine’s cool features. If you’d like to learn more about
Elastic Path, how we are migrating our Java platform to run on the cloud, and how you might be
able to migrate your application to App Engine, drop by our booth in the App Engine section of
the Developer Sandbox. See you there!
Come see
Elastic Path Software in the Developer Sandbox at
Google I/O on May
10-11.Eddie Chan is an ecommerce developer at
Elastic Path Software in beautiful
Vancouver, Canada. He and his brilliant team work closely with Google and are currently
focused on migrating existing online stores to App Engine.Posted by Scott Knaster,
Editor