Scaling Microservices
Thrive has been designed around a microservices architecture, with multiple services dedicated to fulfilling user requests across different functional areas.
Each service is kept as simple as possible, with a small set of core responsibilities. This makes the platform easier to maintain and enhance over time, allowing development work to be carried out iteratively and safely.
Services are written in Express.js and run either as containerised workloads within AWS ECS Fargate, or as serverless functions using AWS Lambda. ECS is used for the majority of application services, while Lambda is used for lightweight and scheduled processing.
This approach allows the platform to scale automatically based on demand, ensuring sufficient capacity during periods of increased load without requiring fixed processing capacity to be reserved in advance.
Front-End and Distribution
Most traffic to the platform is accessed through a React.js web application (a single-page application) which communicates with Thrive’s backend services via an internal GraphQL API. This provides users with full access to platform functionality.
The web application supports the last three versions of all major evergreen browsers.
We also offer a React Native mobile application for use on Android and iOS, designed to give frontline workers fast and intuitive access to their learning. The mobile application supports a subset of web functionality.
The web application, along with uploaded resources such as videos and documents, is served from AWS S3 via the CloudFront CDN. Customer assets are secured using signed URLs, providing fast and reliable global access to content.
Supporting Infrastructure
Behind these services, Thrive uses additional infrastructure to store data, serve content, and support analytics and reporting.
MongoDB Atlas is used as the primary data store for handling application data. Search functionality across the platform is primarily delivered using Atlas Search.
An ETL pipeline streams data from MongoDB into Snowflake to support near real-time aggregated reporting and analytics, without impacting operational workloads.