Remind is a web and mobile application that enables teachers to send text messages to students and stay in touch with parents. Remind has 25 million users and more than 1.5 million teachers on its platform, and the app delivers 150 million messages per month.
Remind used a third-party cloud platform as a service (PaaS) to run its entire application infrastructure—message delivery engine, front-end API, web client, chat backend—as a monolithic application.
Scaling issues prompted the move to a microservices-based architecture, but Remind wasn’t satisfied with the limited visibility into CPU, memory, and network performance available from the PaaS provider.
Remind wanted to use Docker on Amazon Elastic Compute Cloud (Amazon EC2) for better resource utilization and environment consistency, and the initial thought was to have an internal PaaS solution for developer efficiency.
Remind started to build out their own PaaS on top of Linux-based CoreOS and fleet, but fleet and key-value store etcd were unstable. The team also didn’t want to spend the time to run and operate their own cluster-management system.
Remind opted to use AWS directly in order to maintain operational simplicity; it was already using Amazon Redshift, Amazon DynamoDB, Amazon Simple Storage Service (Amazon S3), and Amazon CloudFront.
The company decided to build its PaaS on top of Amazon EC2 Container Service (Amazon ECS) because the engineering team was small and didn’t have the time or expertise necessary to operate and manage clusters.
Remind open-sourced their PaaS solution on Amazon ECS as “Empire.”
Amazon ECS provides the container scheduling and integration while Elastic Load Balancing (ELB) allows Empire to use DNS for service discovery.
Empire provides a Heroku-compatible API and CLI that allows developers to easily deploy applications atop Amazon ECS.
Amazon ECS, a managed service, provides operational efficiency, allowing engineering resources to focus on developing and deploying applications instead of on operating and maintaining clusters.
Moving to Amazon ECS provided large improvements in performance, including better stability and lower latency.
Remind has seen a 2X decrease in response times in the 99th percentile, with less variance and fewer spikes.
AWS provides control over security and routing through VPCs, plus clearer visibility into the performance of applications.
“Moving to Amazon ECS significantly improved our service performance. We reduced service response times in the 99th percentile by 50%.”
Jason Fischl, VP of Engineering