EyeEm is start-up based in Berlin, Germany that offers a free photo application devoted to taking and sharing mobile photographs. The application, also named EyeEm, lets users take pictures on their smartphones, apply a variety of high-quality filters and frames, and share the pictures on the EyeEm website, by email or on social networks. EyeEm is available for iPhone, Android, and Windows smartphones. The start-up, launched in 2011, has 16 employees and supports a community of a few million photography enthusiasts worldwide.
As a start-up, EyeEm wanted to position itself for rapid growth without overextending its IT budget. The company was using a hosted solution and experienced traffic spikes that took them offline briefly. Ramzi Rizk, EyeEm's co-founder and CTO, explains, “We’re a bootstrap start-up. We couldn’t hire the additional people needed to manage, monitor and maintain a self-hosted solution. We wanted to reduce our system administration overhead while giving ourselves the ability to scale within minutes to handle traffic spikes.”
Why Amazon Web Services
“Amazon Web Services (AWS) was on our short list right from the start because of the number of other start-ups using it," says Rizk. “Reliability, uptime and speed were important factors. We chose AWS because we needed the flexibility to migrate our existing infrastructure effortlessly and then seamlessly integrate with AWS products and solutions.”
Rizk and his team configured Amazon Elastic Compute Cloud (Amazon EC2) instances to perform a variety of front-end and back-end functions for EyeEm's application stack, which is built with UNIX, PHP, and MySQL databases. “Our initial migration from a machine to an AWS instance only took a couple of hours,” says Rizk. “Since then, our architecture has evolved with our needs.”
"Running and scaling a start-up is a continuous process. We’re using four Amazon EC2 instances for our MySQL setup: one instance for the EyeEm website, between three and ten instances for APIs and image processing, and additional instances to support utilities that we run. I built our product on AWS to take advantage of Auto Scaling, which helps us handle all incoming traffic with greater stability.” The company uses Amazon Simple Queue Service (Amazon SQS) for messaging and Elastic Load Balancing for traffic distribution across multiple Amazon EC2 instances. Figure 1 demonstrates EyeEm’s architecture.
Figure 1: EyeEm Architecture on AWS
EyeEm uses Amazon Simple Storage Service (Amazon S3) for primary storage and Amazon Glacier for backup storage services. “We manage our Memcache with Amazon ElastiCache,” says Rizk. “Mostly we use it to reduce the volume of reads that hit the database. Using Amazon ElastiCache has effectively cut the API response rate by half, improving performance. It was so easy to incorporate into our existing feature stack that we recommend using Amazon ElastiCache as a first step for other companies starting out in the cloud.” EyeEm uses Amazon CloudFormation for image processing and API instances, Amazon Route 53 for DNS management and Amazon CloudFront for photo delivery.
EyeEm's reputation continues to grow with both serious photographers and casual fans of phone-based photography, causing increased usage and traffic spikes. “Our usage level has grown tenfold in the past year and we’ve been able to grow our resources to support demand,” says Rizk. “A year ago, we were running on three Amazon EC2 instances. Today, we average around 15 instances. We can scale to support traffic spikes 30 to 50 times higher than normal demand.” EyeEm is prepared to scale out even more if the need arises. Rizk states, "Handling huge traffic spikes and unexpected growth is possible primarily because our service runs on AWS."