The 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.
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/# (scheduling) & https://coursedogcurriculum.docs.apiary.io/ (curriculum + catalog).
In addition, Coursedog's product platform is built using the following methodologies and properties based on Web Scale IT and SOA.
* Our products is 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