Building the Nike 10K Registration for Scale

A few months ago we launched a registration site for the Nike 10k race in Buenos Aires.  Keeping the site performing while under load was a major concern for the client, so we carefully considered the site’s architecture.

Ultimately we mixed and matched best-of-breed tools to create a solid infrastructure.  Our backend consisted of:

  • AWS, with a Elastic Beanstalk for autoscaling,
  • multiple MongoDB instances:
    • 1 for writing,
    • 1 for reading and failover, and to act as an arbiter for storing the registration information
  • A Redis instance to store the user sessions, track the amount of registrations, and validate the daily quota of available t-shirts by size

On the front end we decided to have 2 different stacks.  For the internally-facing CMS we used plain HTML with jQuery to handle our many JSON calls.   For the publicly-facing site we used Backbone with Compass to support the smooth transitions and clean code.

Our modular approach paid of in the middle of the project when we realized we needed a standalone server for the t-shirt distribution days. Adding boxes to our infrastructure was absolutely painless.

The lesson was subtle but important.  Build a solid foundation with solid tools and the rest will follow.  In our case, the runner’s experience was greatly improved over the previous year, and we have plenty of ideas for improving it even further next year.

Miyamoto Musashi wrote on The Book Of Five Rings.
“Do not develop an attachment to any one weapon or any one school of fighting”

Restored from Internet Archive · Capture: Sat, 19 Sep 2015 19:41:03 GMT