In 2010, six friends formed 6Wunderkinder in Berlin, Germany to launch Wunderlist, a cross-platform task management application. Customers can use Wunderlist to create to-do lists and tasks, delegate tasks, and collaborate with friends and colleagues. Wunderlist runs on multiple operating systems and devices as well as the Web and automatically synchronizes data across all devices. Since its beginning, 6Wunderkinder has grown to 39 employees and has more than 3.5 million registered users for Wunderlist, which is available in 30 languages and in over 100 countries.
Because of the popularity of Wunderlist, 6Wunderkinder grew rapidly and experienced frequent traffic spikes. At the time, the company hosted its servers at a co-location data center and the 6Wunderkinder infrastructure team had to manually manage, upgrade and provision the servers. “Traffic and usage behavior is variable during any given day and week,” says Chad Fowler, CTO for 6Wunderkinder. “We had to build the infrastructure for peak traffic even though traffic patterns are very spikey. This was both inefficient and a waste of money. We wanted to be able to control our spending on infrastructure to make the best use of our cash.” Additionally, 6Wunderkinder was rewriting the Wunderlist application and needed to keep its environment stable for customers while moving to a new back-end infrastructure.
“We had completely rewritten our backend synchronization infrastructure in a new technology stack. Moving our existing user base gave us some understanding of our performance and scaling needs,” says Fowler. “We needed an easy way to script provisioning for our infrastructure, enable high I/O throughput for some situations, and scale horizontally. Amazon Web Services (AWS) was our choice from the beginning because it provides the kind of flexibility and speed that we need.”
6Wunderkinder uses between 90 and 100 Amazon Elastic Compute Cloud (Amazon EC2) instances to host nginx web servers, Unicorn HTTP servers running Ruby on Rails, Redis, PostgreSQL, and other services. The company uses Elastic Load Balancing to balance traffic to its web servers. “Running on AWS makes it easy to replace the servers with nodes running new revisions at any time,” comments Fowler. “We're constantly creating and destroying server nodes. By using Amazon Route 53, we can automatically assign a DNS name to every new node we build and remove records when we remove nodes.”
The company uses Amazon Relational Database Service (Amazon RDS) for payment-related data and Amazon Simple Storage Service (Amazon S3) to store data and avatars, for log processing, and anything that requires moving large amounts of data between nodes. “We have millions of connected and constantly polling clients. This generates massive amounts of usage data in our operational data stores in PostgreSQL, Amazon RDS, and Amazon DynamoDB,” says Fowler. “After moving the data, (about 1 TB of data so far), and our log files into Amazon S3, we use Amazon Elastic MapReduce (Amazon EMR) to analyze the information so we can improve the product and the experience for our users.”
When 6Wunderkinder began experiencing I/O throughput challenges with its PostgreSQL database, engineers started moving high-throughput, write-heavy operations to Amazon DynamoDB. “The ability of Amazon DynamoDB to scale has allowed us to capture and process data that would have otherwise been difficult or impossible to process,” says Fowler. “We have also made great scalability strides in moving data out of our primary data store and into Amazon DynamoDB, freeing the PostgreSQL database to do its main work.”
6Wunderkinder has experienced a faster time-to-market since moving to AWS. “We’ve been able to launch products about 20 percent faster. This is where AWS really shines,” comments Fowler. “In fact, we found that the more we choose to use AWS solutions, the faster and more flexible we are as a development organization. We're trying to build less of our own infrastructure and rely on what AWS has to offer.”
When 6Wunderkinder launched the latest version of Wunderlist, the infrastructure team was able to scale handle 500,000 new users and more than 20 million tasks on the service in a two-month period. “We were scaling between 16 and 39 instances for our front-end API servers,” says Fowler. “We like being able to experiment with sizing and the number of instances. This helps us find and eliminate performance and scalability bottlenecks, and improve application uptime and performance.”
“AWS changes the way you think,” he continues. “The primary lesson we learned is that AWS isn't just a new bank of servers that you use instead of your old data center or hosting provider. You can add and remove nodes at will, which makes you consider the application architecture as well as infrastructure. It's worth taking the time to really understand AWS architecture and services.”
To learn more about how AWS can help your web application needs, visit our Web, Mobile, and Social Apps details page: http://aws.amazon.com/web-mobile-social/.