Skip to content
AsimAzmi edited this page Apr 4, 2020 · 8 revisions

Welcome to the devengers wiki!

Summary

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.

Current Status

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.

Architecture

Above is the current architecture that we have planned for now. The system has 5 microservices.

Microservices

The system has 6 microservices. Below is the detailed description of each service.

API Gateway

This is a routing service. This service acts as a message router between the user ( front-end) and our application.

User Management Service

This service is used for authentication.

Data Retrieval Service

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.

Data Modelling Service

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.

Data Analysis.

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.

Session Management Service.

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.

Using OpenStack Horizon For Creating 4 Instances:

Citing: https://iujetstream.atlassian.net/wiki/spaces/JWT/pages/44826638/Using+the+OpenStack+Horizon+GUI+Interface

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:

  1. Set the Allocation : TG-CCR180043
  2. Click on the Project -> Compute -> Instances -> Launch Instance
  3. [Details]Select Instance Name -> As per your choice, Description -(Instance Functionality Description), Availability Zone-(Check Any), Count (Check -> 1) -> click on Next
  4. [Source] Select Boot Source -> Image -> Select 'JS-API-Featured-Ubuntu18-Feb-14-2020' '8.00 GB' Image. Click on next
  5. [Flavor] Select m1.quad for Kubernetes(master and slave node) Else Select m1.medium for Jenkins.
  6. [Networks] Select Devengers_net, Click on next
  7. [Network Ports] Skip Click on next
  8. [Security Groups] Select Devengers_security_group, click on next
  9. [Key Pair] Select key as Devengers, Click on Launch Instance
  10. 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.