Skip to content

System Architecture

Martin Bbaale edited this page Sep 20, 2019 · 3 revisions

Welcome to the AirQo-api wiki!

Project Description

System Architecture Diagram

Technical Constraints

  • Clients connect to the app server through their mobile phones. Memory and performance are limited by their hardware.
  • We have native apps on both IOS and Android.
  • System has a RESTful API that can function with or without UI.
  • System supports real time dynamic updates (continuous delivery/integration)

High Level Functional Requirements

  • Manage devices
  • Authentication/authorization
  • Predictions/forecasts
  • Data broker
  • Monitoring
  • Payments/Incentives
  • Notification Service

Top Non Functional Requirements

  • Responsiveness/performance
  • Secure
  • Readability
  • Testability
  • Quality
  • Reliability
  • Maintainability

Architectural Decisions with Rationale

  • Client-Server as the main architectural style.
  • Server side JS (nodeJS) for small footprint and performance
  • Lightweight MVC on the server using Express framework.
  • Lightweight MVC on the frontend using Ember/Angular.
  • Mobile Applications using React Native/Ionic with the aim of having one codebase (tech stack) for easy maintenance and deployment.
  • RESTful API provides core to functionality and reduces coupling between UI and backend.
  • Web sockets allow event-based fast dynamic updates
  • NoSQL DB to cater for scalability
  • Redis DB for caching
  • Postgresql to cater for services with transactions
  • GCP for cloud services to take care of the DevOps as a way of ensuring that each team member has a manageable workload.
  • Micro-service architecture from the beginning. Each service with its own database.
  • Event driven approach during development to handle inter process communication.

Design Decision with Rationale

  • Encapsulate data and behavior in models for easy testing and better modularization
  • Bridge design pattern to substitute test database for the production database during testing.
  • Observer to notify the client for events happening in the back-tier and front-tier.
  • Singleton

Responsibilities of main Components

  • Models
  • Controllers
  • Middlewares

Deployment View

Deployment View