VT2018 Zipkin

From air
Jump to navigation Jump to search

Auteur

  • Nom : OZENDA Thomas
  • Sujet : Dapper & Zipkin

Résumé

Dans les architectures en microservices, obtenir des métriques sur la latence, la perte éventuelle de paquets ou encore d'autres choses, est primordial. Toutefois, une problématique se pose rapidement : Comment pouvoir exploiter facilement les données de logs pour en tirer des leçons. C'est le principe de Zipkin, un "distributed tracing system", qui prends en charge ce travail d'extraction de données pour fournir des métriques concrètes.

Abstract

In micro-service architectures, obtaining metrics on latency, possible packet loss or other things is essential. However, a problem quickly arises: How to easily use log data to learn from it. It is the Zipkin principle, a "distributed tracing system", that supports this data extraction work to provide concrete metrics.

Synthèse

Introduction

Les problématiques rencontrées dans les architectures microservices nécessitent de pouvoir mesurer les latences au sein de celles ci. Zipkin, basé sur Dapper (issu d'un article académique de Google) répond à cette problématique en fournissant un serveur qui va servir à collecter les paquets émis par les microservice à chaque entrée et sortie de paquet. Ces paquets vont permettre plusieurs choses à Zipkin : pouvoir tracer une timeline pour chaque requete, et aussi de pouvoir tracer un "plan" des microservices. Ceci peut être trés utile dans le sens où nous allons pouvoir voir où les requetes se perdent, dans quel microservices.

Zipkin-fonctionnement.png

Fonctionnement

La première étape est de récupérer, puis lancer le serveur zipkin, qui va servir à collecter les mesures.

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

On utilise ici, la version "java" du serveur.

Le serveur se lance par défaut sur le port 9411.

L'idée est ensuite de lancer les microservices. En ce qui concerne JHipster, on peut lancer le système grâce à Maven et au profil "Zipkin" comme suit :

mvn -Pzipkin

En ce qui me concerne, j'ai choisi d'utiliser une démo préparée par Zipkin, trouvable à ce lien : https://github.com/openzipkin/brave-webmvc-example

Elle se lance facilement avec 2 commandes :

mvn jetty:run -Pfrontend

et

mvn jetty:run -Pbackend

Une fois que l'on a accédé à ce front (qui est sur le port 8081), des requetes vont être envoyés aux backend. On va ainsi pouvoir observer ces requêtes sur le ZipkinUI, en http://localhost:9411/

Zipkin-trace.png

Ce système ne contient que 2 microservices, mais il permet d'imaginer ce que cela pourrait donner sur une architecture plus développée.