A repository containing the project's work for the course Software as a Service in the 8th semester of the department of Electronical and Computer Engineering NTUA.
The aim of the project was to create a question-answer management application, named askmeanything, with minimal functionality that implements some Software as a Service (SaaS) architectures.
You can find our app deployed on heroku here: https://ask-soa-frontend.herokuapp.com/
In SOA, we created a service-bus which uses REDIS
and acts as a middleware between the 4 services but also between our frontend and our services.
The services, listed below, are all REDIS
clients.
-
Authenticator
Uses JWT tokens to provide authentication for our users.
-
Question manager
Manages questions and their keywords.
-
Question run
Manages answers and votes, a more secondary service.
-
Profile,stats and analytics
Provides stats and analytics for the above and the user's profile.
Finally, we created a separate app named data-layer which provides an interface between our Postgres database and the four services.
In the Microservices architecture we created 6 microservices and a choreographer using REDIS
again which synchronizes their databases.
The microservices created are:
- authenticator-ms
Uses JWT tokens to provide authentication for our users.
- question-man ms
Supports CRUD operations for questions and keywords.
- question-run ms
Similar to question run service in SOA.
- questions-disp ms
Used to display one or more questions with all their information(answers, keywords, votes).
- profile-ms
Supports user's CRUD operations.
- stats-ms
Provides all the statistics and analytics endpoints.
and also... axios,pg and canvas-js.
For the deployment of our application we used Heroku which is very "postgres-friendly" for our databases.
In total we deployed 14 apps, 6 for the SOA architecture, 7 for the microservices and 1 for our frontend.
We attached heroku-postgres
in all the apps that needed a database and heroku-redis
in all the apps that implemented redis as a server or as a client.