From 2da250d277cc6b60f22a0a731e7ffd5d71f37099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Mei=C3=9Fl?= <stephan.meissl@eox.at> Date: Wed, 5 Feb 2020 14:48:58 +0100 Subject: [PATCH] Initial agreed architecture. --- README.md | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 156 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 86f26fbc..20116fb1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,157 @@ -# VS +# Introduction -View Server \ No newline at end of file +This repository holds the configuration of the PRISM View Server (PVS). + +The present README.md holds the architecture, conventions, relevant +configuration, installation instructions, as well as canonical references. + +# Architecture + +The PRISM View Server (PVS) uses various Docker images whereas `core`, +`cache`, `client`, and `preprocessor` are build from this repository and +the others are pulled from docker hub. + +## Prerequisites + +### Object Storage (OBS) + +Access keys to store preprocessed items and caches used by all services. + +Access key to input items used by preprocessor. + +## Networks + +One internal and one external network per stack. + +## Volumes + +In base stack + +* traefik-data + +Per collection + +* db-data used by database +* redis-data used by redis +* instance-data used by registrar and renderer + +## Services + +The following services are defined via docker compose files. + +### reverse-proxy + +* based on the external traefik image +* data stored in local volume on swarm master +* reads swarm changes from /var/run/docker.sock on swarm master +* provides the endpoint for external access +* configured via docker labels + +### database + +* based on external postgis:10 image +* DB stored in local volume on swarm master +* provides database to all other services + +### redis + +* based on external redis image +* data stored in local volume on swarm master +* holds these keys + * preprocessing + * preprocess-md_queue + * holds metadata in json including object path for image to be preprocessed + * `lpush` by ingestor or manually + * `brpop` by preprocessor + * preprocess_queue + * holds items (tar object path) to be preprocessed + * `lpush` by ingestor or manually + * `brpop` by preprocessor + * preprocessing_set + * holds ids for currently preprocessed items + * `sadd` by preprocessor + * preprocess-success_set + * holds ids for successfully preprocessed items + * `sadd` by preprocessor + * preprocess-failure_set + * holds ids for failed preprocessed items + * `sadd` by preprocessor + * registration + * register_queue + * holds items (metadata and data objects prefix - same as tar object path above) to be registered + * `lpush` by preprocessor or manually + * `brpop` by registrar + * registering_set + * holds ids for currently registered items + * `sadd` by registrar + * register-success_set + * holds ids for successfully registered items + * `sadd` by registrar + * register-failure_set + * holds its for failed registered items + * `sadd` by registrar + * seeding + * seed_queue + * time intervals to pre-seed + * `lpush` by registrar or manually + * `brpop` by seeder + * seed-success_set + * seed-failure_set + +### TODO: ingestor + +see new service in #7 + +### TODO: seeder + +* based on cache image +* connects to DB +* `brpop` time interval from seed_queue +* for each seed time and extent from DB + * pre-seed using renderer + +### preprocessor + +* based on preprocessor image (GDAL 3.1) +* connects to OBS +* `brpop` item from preprocess_queue or preprocess-md_queue + * `sadd` to preprocessing_set + * downloads image or package from OBS + * translates to COG + * translates to GSC if needed + * uploads COG & GSC to OBS + * adds item (metadata and data object paths) to register_queue + * `sadd` to preprocess-{success|failure}\_set + * `srem` from preprocessing_set + +### registrar + +* based on core image +* connects to OBS & database +* uses instance-data volume +* `brpop` item from register_queue + * `sadd` ... + * register in DB + * (optional) store time:start/time:end in seed_queue + * `sadd/srem` ... + +### cache + +* based on cache image +* connects to OBS & database +* provides external service for WMS & WMTS +* either serves WMTS/WMS requests from cache or retrieves on-demand from + renderer to store in cache and serve + +### renderer + +* based on core image +* connects to OBS & database +* provides external service for OpenSearch, WMS, & WCS +* renders WMS requests received from cache or seeder + +## TODO: ELK stack + +see #9 + +# Usage -- GitLab