Table of Contents
Overview
Separation of Concepts & APIs
Architecture Diagram
Data Transfer Protocol
Build Methodologies & Properties
Related Articles
Overview
Our stack consists of our main Admin Application that is running an Express.js server on the backend and a Vue.js-based JavaScript client application in the browser.
Additionally we are running two Universal JavaScript applications using Nuxt.js (Node.js backend with client-side Vue.js Application) for our public Catalogs and Events services. Those connect with our main Admin Application through our REST API.
We are also employing several functions-as-a-service services to handle very specific processes like schedule optimizations and PDF generation.
Separation of Concepts & APIs
Our application architecture separates concepts (e.g., user, course, building) from each other, and communication between them relies on a well-defined API to follow the separation of concerns design principle. It is deployed as one service.
However, heavy-duty tasks, like PDF generation, optimizations, mailers, etc., have their own environments (e.g., in AWS Lambda) or are computed in a background worker.
Architecture Diagram
Data Transfer Protocol
Coursedog uses RESTful web services as the data transfer protocol between Coursedog and the SIS.
Coursedog uses randomly generated session tokens to identify users, which are sent over HTTPS in every request so we can ensure that data is only accessible by users with the correct privileges.
We implement session timeouts consistent with industry best practices.
Coursedog endpoints are publicly available to view: https://coursedog.docs.apiary.io/# (Academic Scheduling), https://coursedogcurriculum.docs.apiary.io/ (Curriculum Management + Catalog), and https://coursedogeventsapi.docs.apiary.io/# (Event Scheduling).
Build Methodologies & Properties
Coursedog's product platform is built using the following methodologies and properties based on Web Scale IT and SOA:
Our products are a self-contained environment that contains many underlying micro services.
All customer interaction with our product is executed through either a UI interface or HTTPS REST APIs.
Our backend environment is distributed across multiple servers running simultaneously in an auto-scaling environment.
Our system is failure-tolerant and self-healing with distributed recovery protocols that isolates failures to single servers, and hot-replaces affected servers without causing downtime for end users.
Embedded analytics provide continuous monitoring and real-time error alerting.
All code deploys are from versioned objects and are executed after the completion of an agile development cycle