The diagram above shows the overall high-level structure of our software application. The software design consists of 3 main layers. The application layer provides the user interfaces for user interaction with the system. The API web services forms the middle layer which exposes backend data and application functionalities for use by the application layer. The last layer consists of the database and S3 file storage which provides long term memory storage for the software application. This design provides an ecosystem of applications and web services that are modular and reusable — which is ideal for microservices.
Microservices are a style of service-oriented architecture (SOA) where the app is structured on an assembly of interconnected services. With microservices, the application architecture is built with lightweight protocols. The services are finely seeded in the architecture. Microservices disintegrate the app into smaller services and enable improved modularity. Our approach is to build the backend supporting services in microservices modules on a common database and file storage location. Although this method decreases the reliability of microservices running on individual databases. This architecture allows the microservices to be easily scaled and deployed.