Renku Architecture
This document describes the architecture of the services that are parts of the Renku platform.
Renku consists of several off-the-shelf components from the software engineering and data science software stacks, as well as customized or newly developed services. The services communicate among each other through REST APIs. The deployment is orchestrated on Kubernetes through the use of Helm charts. Because of its micro-service architecture, Renku is by definition modular, and therefore able to accommodate other languages or implementations used for individual components.
Components
Renku has the following custom components:
renku: the meta repository with deployment scripts, documentation and kubernetes helm charts
renku-gateway: an API gateway connecting clients to the APIs of the different backend services
renku-graph: a collection of services concerned with activating, building and querying the Renku knowledge graph
renku-notebooks: a service integrating GitLab repositories with Amalthea and Jupyter servers
renku-python: python API & Command Line Interface (CLI)
renku-ui: web front-end interface
In addition, we make use of:
Amalthea: k8s operator used to launch Jupyter servers
GitLab: repository management, CI and various related APIs
Keycloak: identity management and user authentication
The figure below shows an overview of the components and their interactions. Blue components are off-the-shelf, yellow components are either built or extended by us.
System Context
Container Diagram
UI
Web Frontend
Using Nodejs, Typescript and React
UI-Server
Backend-for-Frontend Server for the UI
Using Nodejs, Typescript and ExpressJs
Gateway
API gateway for backend services
Handles/injects access tokens and credentials
Based on Traefik with a Flask application as forward-auth middleware
Core-Service
API for interacting with metadata stored in user repositories (Project, Datasets, Workflows)
Built with Python as a Flask app
uses python-rq for long-running background jobs
caches project repositories for fast access
Renku-Graph
Knowledge graph metadata store for storing metadata for all renku projects
Built with Scala and backed by Jena and Elasticsearch
Used for queries across projects and datasets
Renku-Notebooks
API for scheduling user sessions
Built with Python as a Flask app
Provides information on existing sessions
Creates K8s custom resources to schedule new sessions
Amalthea
Custom K8s operator for running user sessions
Built with python and the kopf library
Watches for custom resources created by renku-notebooks and creates K8s objects for user sessions
CRC Service
Manages resource pools
Determines which user has access to which compute resources