La cinématique des micro-services

Vue d’ensemble des microservices de l’application :

_images/vue_globale.png

Entre le datasource et le datamodel

prérequis:
  • le service crossbar doit être démarré
  • le service datasource doit être démarré (status : started)
  • le service servermodel doit être démarré

Le microservice datasource

Le datasource sert les fichiers de données :

  • Les fichiers YAML de modèles de données chargés par le datasource sont dans $ROOTPATH/dataModel/eole/release.
  • Ils sont copiés par le Dockerfile du datasource: COPY dataModel/eole /data/seed
  • Le datasource se connecte au service crossbar (en fait un message est émis au démarrage depuis chaque conteneur, ce comportement n’est pas spécifique au conteneur datasource)

Le micro-service servermodel

  • servermodel réagit quand un message est envoyé de datasource (via crossbar)

  • en cas d’ajout de fichier YAML, il faut :

    • stopper le conteneur datasource:

      docker stop $(docker ps -aqf "name=zephir_datasource")
      
    • effacer ce conteneur:

      docker rm $(docker ps -aqf "name=zephir_datasource")
      
    • effacer l’image de ce conteneur:

      docker rmi zephir_datasource
      
    • lancer un rebuild de datasource:

      zephir-compose -b dev -- up --build -d datasource
      
    • une fois le rebuild fait, les fichiers YAML sont recopiés à nouveau dans l’image

    • un index des YAML est regénéré et le nouveau YAML est pris en compte.

  • au démarrage de servermodel, ce microservice demande l’état de datasource

Important

Il est aussi possible, en cas de modification des fichiers YAML du datasource, de relancer programmatiquement le rechargement des données du datasource, en appelant le message servermodel.describe avec le paramètre schema renseigné à True.

Les messages crossbar au moment du start

Un message générique est émis à chaque démarrage de conteneur ce message émis, si le conteneur qui a démarré est datasource, alors servermodel va réagir.

En pseudocode, on filtre sur:

if name == 'datasource' and status in ['started', 'start']:

status peut avoir la valeur start quand le conteneur est en train de démarrer, ou started quand on demande l’état du microservice.

servermodel envoie le message `self.publish('v1.zephir.services.available', name='datasource') à crossbar, et crossbar répond started.

Note

l’événement stop n’est actuellement pas pris en compte.