-
Notifications
You must be signed in to change notification settings - Fork 0
Home
The goal of this project is to develop a Weather Prediction application using Microservice Architecture. The functionalities of this application are built using a Microservice architecture. Below are the details about our current progress and overall plan.
We have currently achieved communication between services as per the architectural design mentioned below except the updates from data retrieval service and data modeling service to session management service. The login process is done using OAuth. The user sends the data to the API gateway and that data flows via queues and reaches the Data Analysis service. The Data Analysis service performs some processing to obtain the number of files that are available for the given date and radar id and forwards this to session management service. The user will again make a request from UI to get the details of the requests. We have also implemented a CI/CD pipeline which leads to the automatic deployment of the application on Jetstream Server on a git commit.
Above is the current architecture that we have planned for now. The system has 5 microservices.
The system has 6 microservices. Below is the detailed description of each service.
This is a routing service. This service acts as a message router between the user ( front-end) and our application.
This service is used for authentication.
The Data Retrieval Service accepts a JSON text which has the date, time, radar id, userid, correlationid. Technically this service is a RabbitMq consumer. It consumes the message from the queue processes it and then forwards it to another queue. The service uses the inputs to download the nexrad data. The service has its own database which keeps the track of request status. Once the files are downloaded the data will be forwarded to another queue. Also, a status message will be sent to the Session management service via queue.
The Data Modelling Service accepts nexrad data. Runs the models and generates the data that could be analyzed. Technically this service is a RabbitMq consumer. It consumes the message from the queue processes it and then forwards it to another queue. The service has its own database which keeps the track of request status. Once the files are downloaded the data will be forwarded to another queue. Also, a status message will be sent to the Session management service via a queue.
The Data Analysis Service accepts data and perform final analysis on the data and generates the data that could be plotted on the graph. Technically this service is a RabbitMq consumer. It consumes the message from the queue processes it and then forwards it to another queue. The service has its own database which keeps the track of request status. Once the files are downloaded the data will be forwarded to another queue. Also, a status message will be sent to the Session management service via a queue.
This service basically keeps the track of the entire session and all the services provide updates to Session Management Service about their progress. When the user asks for data it will be actually sent from Session Management service via API Gateway.
Instance 1: DevengersJenkins(Jenkins Master) Instance 2: (Kubernetes-Master) Instance 3: (Kubernetes-Worker1) Instance 4: (Kubernetes-Worker2)
All the 4 instances are created using following steps:
- Set the Allocation : TG-CCR180043
- Click on the Project -> Compute -> Instances -> Launch Instance
- [Details]Select Instance Name -> As per your choice, Description -(Instance Functionality Description), Availability Zone-(Check Any), Count (Check -> 1) -> click on Next
- [Source] Select Boot Source -> Image -> Select 'JS-API-Featured-Ubuntu18-Feb-14-2020' '8.00 GB' Image. Click on next
- [Flavor] Select m1.quad for Kubernetes(master and slave node) Else Select m1.medium for Jenkins.
- [Networks] Select Devengers_net, Click on next
- [Network Ports] Skip Click on next
- [Security Groups] Select Devengers_security_group, click on next
- [Key Pair] Select key as Devengers, Click on Launch Instance
- Once the Instance is created -> On the extreme right side you will see Actions tab, Under that select dropdown from "Create Snapshot" -> Associate a Floating IP. Select a Floating IP that's available. Note the floating IP for every instance as you will need this to ssh the instance.