AWS Cloud Services in Coursera

AWS Cloud Services in Coursera

Amazon Web Services is a subsidiary of Amazon providing on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis

No alt text provided for this image

In 2006, Amazon Web Services (AWS) began offering IT infrastructure services to businesses in the form of web services -- now commonly known as cloud computing. One of the key benefits of cloud computing is the opportunity to replace up-front capital infrastructure expenses with low variable costs that scale with your business. With the Cloud, businesses no longer need to plan for and procure servers and other IT infrastructure weeks or months in advance. Instead, they can instantly spin up hundreds or thousands of servers in minutes and deliver results faster.

About Coursera

No alt text provided for this image

Coursera is an educational company that collaborates with Stanford, Duke, Princeton, the London School of Economics and other institutions to offer free online classes. With more than 145 partners and over 2,000 classes on its website, Coursera needed to track student data, store and deliver videos, and enable students and teachers to interact with each other. By using AWS services such as Amazon EC2 instances, which run on the latest Intel Xeon processors, Coursera can handle half a petabyte of traffic each month and scale to deliver courses to over 21 million learners from around the globe.

Coursera is the largest provider of massive open online classes (MOOC) in the world, with more than 150 university partners from 29 countries and more than 25 million students. The company offers about 2,000 courses in 160 specializations. 

The Challenge

  • Coursera had a large monolithic application for processing batch jobs that was difficult to run, deploy, and scale.
  • A new thread was created whenever a new job needed to be completed, and each job took up different amounts of memory and CPU, continually creating inefficiencies.
  • A lack of resource isolation allowed memory-limit errors to bring down the entire application.
  • The infrastructure engineering team attempted to move to a microservices architecture using Docker containers, but they ran into problems as they tried to use Apache Mesos to manage the cluster and containers—Mesos was complicated to set up and Coursera didn’t have the expertise or time required to manage a Mesos cluster.
No alt text provided for this image

Why Amazon Web Services

  • Docker containers on Amazon EC2 Container Service (ECS) enabled Coursera to easily move to a microservices -based architecture.
  • Each job is created as a container and Amazon ECS schedules the container across the Amazon EC2 instance cluster.
  • Amazon ECS handles all the cluster management and container orchestration, and containers provide the necessary resource isolation.

The Benefits

  • Ease of use: Because Amazon ECS setup is straightforward and it manages all of the details of the cluster, the team had a prototype up and running in under two months.
  • Speed and agility: Time to deploy software changes went from hours to minutes, and each team can now develop and update its respective applications independently because the applications are resource isolated with no cross-dependencies.
  • Scalable capacity: Auto Scaling groups allow the compute capacity to scale up to handle dynamic job loads.
  • Operational efficiency: No extra infrastructure engineering time is spent installing software and maintaining a cluster—Amazon ECS handles everything from cluster management to container orchestration.

Benefits of AWS

  • Launched a prototype in less than two months
  • Reduced time to deploy software changes from hours to minutes
  • Reduced engineering time spent installing software and maintaining clusters
No alt text provided for this image

Amazon ECS

Amazon Elastic Container Service (Amazon ECS) is a highly scalable, high-performance container orchestration service that supports Docker containers and allows you to easily run and scale containerized applications on AWS.

Benefits

  • Serverless option
  • Application first with Capacity Providers
  • Performance at scale
  • Secure
  • Reliable
  • Optimized for cost

Coursera Cuts Build Times by 83% Using AWS Codebuild, Amazon ECS

Changing the Way the World Learns

Coursera is the world’s largest provider of massive open online classes (MOOC), with more than 150 university partners from 29 countries and more than 25 million registered students. Since its launch in 2012, the company’s educational offering has expanded from a handful of courses to some 2,000 offerings in 160 specializations, including business, computer science, and the humanities.

To host its website and support its rapidly expanding business, Coursera relies heavily on Amazon Web Services (AWS). Until recently, the company focused on setting up its backend services and AWS infrastructure. Now, it needed to streamline its front-end processes as well. “We wanted to improve the front-end developer experience and improve our website’s reliability and performance,” says Bryan Kane, senior engineer at Coursera.

Challenged by Limited Build Capacity

Coursera’s website, a single-page application written in JavaScript, is hosted on Amazon Simple Storage Service (Amazon S3) and served using Amazon CloudFront.

To build and deploy its web application, the company used eight Jenkins machines running on Amazon Elastic Compute Cloud (Amazon EC2) instances. The Jenkins instances were spun up each morning and sat idle until there was a job. When a change was committed to GitHub, it would trigger Jenkins to build the JavaScript and upload it to Amazon S3. “This process worked well for a while,” says Kane. “But as our application code grew, builds began to take a long time.”

In addition, its web applications were deployed as a single monolithic build. A problem with one application would stop deployment of the entire build.

To improve build safety, Coursera broke up its monolithic web application into 50 individual applications containing different parts of the website that could be built and deployed separately. It also developed a new system to work with the 50 applications—however, this process also had issues.

“Any time we needed a build of the entire web application, we had to start 50 different Jenkins jobs to build all the individual applications,” says Kane. “However, we didn’t have sufficient capacity to run 50 jobs at once, so they would queue up and it would take a long time to go through them.”

The Jenkins instances were also used to run tests, backend builds, and other scheduled jobs. These jobs were delayed during the application build, causing frustration for backend developers. “We were looking for a solution that would allow us to run jobs in parallel—so we wouldn’t need to wait for a job to finish to run the next one,” says Kane.

Using AWS CodeBuild to Build and Deploy JavaScript

Coursera chose to use AWS CodeBuild to build its JavaScript applications because it wanted a managed build service that could scale automatically and process multiple builds concurrently. “It took us less than two weeks to set up our containers to run on AWS CodeBuild,” says Kane. “Now we can run 50 or 60 jobs in parallel, and the build time is only the time it takes for the longest application to build.”

The company also started using Amazon EC2 Container Service (Amazon ECS) to deploy its JavaScript—and then used AWS CodeBuild to automate this step as well. Along with building the JavaScript assets and uploading them to Amazon S3, AWS CodeBuild also creates a Docker container that includes the assets and uploads it to Amazon EC2 Container Registry (Amazon ECR). “Now, whenever we want to deploy an application update, we use a tool that works with Amazon ECS to spin up a new service with the container running the new code,” says Kane.

As a further optimization, Coursera uses a custom build environment in its projects—and uses AWS CodeBuild for that also. Instead of using the standard Node.js container for its builds, it uses AWS CodeBuild to create a separate Docker container that includes the JavaScript dependencies as cache. The container is pushed to Amazon ECR and referenced in the project configuration.

“To build an application, all we need to do is retrieve the Docker image from the container registry, run the scripts, and upload to Amazon S3,” says Kane. “We don’t need to wait for the JavaScript dependencies to download because they are already pre-warmed in the container cache."

Increased Speed, Scalability, and Cost Savings Using AWS CodeBuild

By using AWS CodeBuild, Coursera has reduced its web-application build times by 83 percent while achieving a significant cost savings. “With AWS CodeBuild, our application build now takes about 10 minutes; using Jenkins it used to take up to an hour,” says Kane. “To get the same performance on Jenkins would cost four times as much because we would need to spin up 50 Jenkins instances to have the builds finish that quickly.”

On average, the company runs 300–500 builds each day using AWS CodeBuild, and because the service scales continuously and processes multiple builds in parallel, builds are not left waiting in queue. “If we needed to run 70 builds all at once, we could do so,” says Kane. “It’s great to be able to execute on demand and have elastic capacity that’s ready to go.”

AWS CodeBuild also supports continuous integration and continuous delivery (CI/CD) and has increased developer productivity by streamlining the QA process. Each time a production run is submitted, AWS CodeBuild builds a full staging environment that is ready to use for QA. “If there are bugs, our team can fix them and iterate much more quickly,” says Kane. “Our staging environment makes it much easier to do that.”

Using containers for its web applications has also made builds more consistent and reliable. “Having everything inside a Docker container that starts fresh each time provides build isolation,” says Kane. “Our developers are spending less time debugging builds that don’t run.”

With the benefits it has seen using AWS CodeBuild for its front-end platform, Coursera is considering other ways to use the service. Kane says, “Next, we’re going to add some of our backend services to AWS CodeBuild and see what that looks like.”




To view or add a comment, sign in

Others also viewed

Explore content categories