Architecture Design

This page provides a high-level overview of the project architecture.

Overview

The project repo is a mono-repo split up between directories for the /frontend, /backend, /traefik, and /docs. Each directory contains its own microservice(s).

Why a mono-repo?

  • Only client for the MetaGrid API back-end is the MetaGrid front-end
  • Simplifies end-to-end development and testing -- ship code faster!
  • Effective end-to-end code reviews
  • Easy refactoring
  • Reduced code complexity with standardizations across services

Source: http://blog.shippable.com/our-journey-to-microservices-and-a-mono-repository

Simple Architecture Diagram

MetaGrid Architecture Diagram

File Structure

In root, there are multiple directories that contain microservices:

  • /frontend
  • /backend
  • /traefik
  • /docs

Front-end

The user interface is rendered through React components which allow for modular and reusable design patterns.

To communicate with REST APIs, the front-end uses a promise-based HTTP client. Aside from the MetaGrid API back-end, here are other ESGF services used:

  • ESGF Search API - This API is the interface connected to the search engine (Solr, Elastic Search)
  • ESGF wget API - This API generates wget scripts for downloading datasets

Back-end

MetaGrid's Django REST Framework back-end serves REST APIs, which send and receive JSON data via endpoints.

Traefik

Traefik is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy.

Docs

Stores documentation related files for the entire project using Markdown and MkDocs.