Difference between revisions of "VT2020-Micronaut-Fiche"

From air
Jump to navigation Jump to search
Line 6: Line 6:
 
* La première version de Micronaut (1.0.0) est sortie en 2018
 
* La première version de Micronaut (1.0.0) est sortie en 2018
 
* Il est open source sous licence Apache 2.0
 
* Il est open source sous licence Apache 2.0
  +
   
 
=Fonctionnalités=
 
=Fonctionnalités=
Line 25: Line 26:
   
 
Cloud
 
Cloud
  +
 
* Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
 
* Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
 
* Service Discovery (Consul, Eureka, Kubernetes …)
 
* Service Discovery (Consul, Eureka, Kubernetes …)
 
* Load Balancing (Équilibrage des charges) côté client
 
* Load Balancing (Équilibrage des charges) côté client
  +
* Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
 
  +
* fonctions Serverless
 
Les projets Micronaut peuvent également être générés à l'aide d'un générateur en ligne [https://micronaut.io/launch/ https://micronaut.io/launch/]
 
Les projets Micronaut peuvent également être générés à l'aide d'un générateur en ligne [https://micronaut.io/launch/ https://micronaut.io/launch/]
  +
  +
==Fonctionnement de l'IoC==
  +
Micronaut effectue l'injection de dépendance ci-dessus sans exiger de réflexion. La clé est un ensemble de transformations AST (pour Groovy) et de processeurs d'annotation (pour Java) qui génèrent des classes qui implémentent l'interface BeanDefinition.
  +
La bibliothèque de bytecode d'ASM est utilisée pour générer les classes et comme Micronaut connaît à l'avance les points d'injection, il n'est pas nécessaire de scanner toutes les méthodes, champs, constructeurs, etc. à l'exécution comme le font d'autres framework tels que Spring qui repose exclusivement sur la réflexion et les proxys à l'exécution(runtime).
  +
  +
Pour les langages JVM(Java,kotlin…), ces processeurs d'annotation précompilent les métadonnées nécessaires afin d'effectuer des DI, de définir des proxies AOP et de configurer votre application pour qu'elle fonctionne dans un environnement à faible mémoire.
  +
En outre, avec Micronaut, le temps de démarrage de votre application et la consommation de mémoire ne sont pas liés à la taille de votre base de code, comme c'est le cas pour un framework qui utilise la réflexion.
   
 
=Fonctionnement de MapReduce=
 
=Fonctionnement de MapReduce=
Line 56: Line 66:
   
 
=Cas d'utilisations=
 
=Cas d'utilisations=
  +
Avec Micronaut, on peut construire des applications de microservices, Serverless, Message-driven avec Kafka/Rabbit ,applications de CLI, Android etc.
L’exemple classique pour illustrer le fonctionnement de MapReduce est le Wordcount (cf. Démonstration). Cependant MapReduce permet aussi de faire autre choses comme :
 
  +
Parmi ces applications on peut faire des applications axées sur les messages, des applications de ligne de commande, des serveurs HTTP et bien d'autres choses encore.
du grep distribué, du tri distribué, une analyse des journaux d'accès Web, une construction d'index inversé, un regroupement de documents, de l'apprentissage automatique, de la traduction automatique basée sur des statistiques, la génération d'un index de la recherche complète de Google, etc.
 
  +
   
 
=Avantages=
 
=Avantages=
  +
Micronaut vise à éviter les inconvénients de Framework comme Spring, Spring Boot et Grails. Micronaut dispose d'une injection de dépendance et d' AOP lors de l'exécution qui n'utilise pas de reflexion ce qui rends plus facile le lancement d'applications de Micronaut sur GraalVM. Les avantages qu'on peut tirer sont :
Les principaux avantage d'Hadoop sont sa haute scalabitilité et sa tolérance aux erreurs.
 
  +
La haute scalabité vient du fait que tout est conçu pour fonctionner dans un contexte distribué. On peut mettre autant de machine et de cluster que l'on veut, cela ne va pas impacter le traitement des données par mapreduce.
 
  +
* Temps de démarrage rapide
La tolérance aux fautes vient du fait que MapReduce s'appuie sur HDFS - qui elle-même possède un système de replication des etats et des blocs de données entre les DataNode). Quand un noeud meurt, on peut facilement basculer sur un autre noeud.
 
  +
  +
* Réduction de l'empreinte mémoire
  +
  +
* Utilisation minimale de la réflexion
  +
  +
* Utilisation minimale des proxys
  +
  +
* Pas de génération d'environnement d'exécution du bytecode
  +
  +
* Robuste, Scalable: Micronaut est doté d'un système robuste d'externalisation et d'adaptation de la configuration à l'environnement, inspiré
  +
d'approches similaires à celles de Grails et Spring Boot.
  +
* Test unitaire facile
  +
  +
 
=Inconvénients=
  +
* Certaines dépendances ne supportent pas (encore) GraalVM :
  +
Le support GraalVM (comme GraalVM lui-même) est toujours en phase d'incubation. Le support des bibliothèques tierces est aléatoire et l'équipe Micronaut est toujours en train de régler tous les problèmes potentiels.
  +
Jusqu'à présent, le serveur HTTP, le client HTTP, le support de fonction et le module de découverte de service de Micronaut ont été vérifiés comme fonctionnant sur GraalVM 1.0 RC6 ou supérieur. Le support des autres modules est encore en cours d'évolution.
  +
* Certainly, Micronaut does not provide as much functionality or integrations as Spring Boot
  +
https://desosa.nl/projects/micronaut/2020/04/09/microservices-in-detail.html
  +
  +
* Par exemple, il n'existe actuellement aucune prise en charge des vues côté serveur ou des fonctionnalités typiques d'un framework MVC côté serveur traditionnel.
  +
 
[[File:hdfs_archi.png|350px|thumb|center]]
 
[[File:hdfs_archi.png|350px|thumb|center]]
   
 
Par ailleurs, par rapport à d'autres technologies du même type présentes sur le marché comme Teradata par exemple, Hadoop se distingue du fait qu'il soit open-source.
 
Par ailleurs, par rapport à d'autres technologies du même type présentes sur le marché comme Teradata par exemple, Hadoop se distingue du fait qu'il soit open-source.
  +
=Inconvénients=
 
   
   
 
=Bibliographie=
 
=Bibliographie=
  +
*https://micronaut.io/
*https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf
 
*https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
+
*https://docs.micronaut.io/1.0.0/guide/index.html
  +
*https://simply-how.com/quarkus-vs-micronaut
*https://fr.wikipedia.org/wiki/Hadoop
 
  +
*https://opentracing.io/docs/overview/what-is-tracing/#:~:text=Distributed%20tracing%2C%20also%20called%20distributed,and%20what%20causes%20poor%20performance.
   
 
=Veille Technologique 2020=
 
=Veille Technologique 2020=

Revision as of 18:57, 15 November 2020

Présentation

Micronaut logo
Object cumputing logo

Micronaut est un framework full-stack Java moderne, basé sur la JVM, créé pour construire des applications de microservices, Serverless modulaires, facilement testables avec un support pour Java, Kotlin et le langage Groovy adaptés au JDK et à GraalVM. Micronaut est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc.

  • La première version de Micronaut (1.0.0) est sortie en 2018
  • Il est open source sous licence Apache 2.0


Fonctionnalités

Micronaut s'inspire des Framework Spring, Spring Boot et Grails. Micronaut vise à fournir tous les outils nécessaires pour construire des applications JVM, y compris :

  • Injection de dépendance et inversion de contrôle(IoC): Micronaut utilise les données à la compilation (compile time) pour mettre en œuvre l'injection de dépendance qui utiliser la réflexion qu'en dernier recours.
  • Aspect Oriented Programming(AOP): Micronaut fournit une implementation d'AOP qui n'utilise pas la réflexion pour définir les préoccupations transversales(cross cutting concerns) (logging, transactions, tracing etc.)
  • Sensible Defaults and Auto-Configuration:exemple Fast Access Configuration Micronaut fournit des valeurs par défaut raisonnables qui configurent automatiquement votre boîte à outils d'accès aux données et vos API préférées pour faciliter l'écriture de vos propres intégrations.
  • Micronaut propose un modèle asynchrone et non bloquant et le rend donc indiqué pour développer des applications réactives. Pour cela la couche réseau est basée sur le serveur Netty qui apporte la gestion de l’event loop .
  • Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…

Résilience et tolérance aux fautes

  • Mécaniques intégrées de retry et circuit breaker : être capable de se remettre d'echec est critique pour les clients HTTP et c'est là que les Retry Advice intégrés à Micronaut interviennent.

Cloud

  • Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
  • Service Discovery (Consul, Eureka, Kubernetes …)
  • Load Balancing (Équilibrage des charges) côté client
  • Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
  • fonctions Serverless

Les projets Micronaut peuvent également être générés à l'aide d'un générateur en ligne https://micronaut.io/launch/

Fonctionnement de l'IoC

Micronaut effectue l'injection de dépendance ci-dessus sans exiger de réflexion. La clé est un ensemble de transformations AST (pour Groovy) et de processeurs d'annotation (pour Java) qui génèrent des classes qui implémentent l'interface BeanDefinition. La bibliothèque de bytecode d'ASM est utilisée pour générer les classes et comme Micronaut connaît à l'avance les points d'injection, il n'est pas nécessaire de scanner toutes les méthodes, champs, constructeurs, etc. à l'exécution comme le font d'autres framework tels que Spring qui repose exclusivement sur la réflexion et les proxys à l'exécution(runtime).

Pour les langages JVM(Java,kotlin…), ces processeurs d'annotation précompilent les métadonnées nécessaires afin d'effectuer des DI, de définir des proxies AOP et de configurer votre application pour qu'elle fonctionne dans un environnement à faible mémoire. En outre, avec Micronaut, le temps de démarrage de votre application et la consommation de mémoire ne sont pas liés à la taille de votre base de code, comme c'est le cas pour un framework qui utilise la réflexion.

Fonctionnement de MapReduce

Liaison HDFS/MapReduce

Comme nous pouvons le voir sur le schema MapReduce s'appuie sur HDFS. Voici comment les deux couches sont liées :

liaison HDFS/MapReduce

Les rôles

Voici les principaux acteurs que nous pouvons retrouver dans les algorithmes de MapReduce:

  • User: qui s’exécute sur une machine client, est responsable d’initialiser le job puis de le soumettre pour exécution.
  • Master : est responsable de mapreduce, il affecte les travaux.
  • Worker: est la machine qui fait les tâche map et reduce.

L'exécution

Execution de MapReduce
  • Etape 1: Dans un premier temps, la bibliothèque MapReduce dans le programme utilisateur divise les fichiers d'entrée M par pièce. Il démarre ensuite de nombreuses copies du programme sur un groupe de machines.
  • Etape 2: L'une des copies du programme est spéciale - le master. Les autres sont des travailleurs qui sont affecté un travail par le master. Il y a M tâches de map et R reduce tâches. Le master choisit les travailleurs inactifs et attribue à chacun une tâche de map ou reduce.
  • Etape 3: Un travailleur lit le contenu d'entrée correspondant. Il parse les paires key / value des données d'entrée et passe chaque paire à la fonction Map définie par l'utilisateur. Les nouveaux paires key2 / value2 intermédiaires produites par la fonction Map sont stocké dans la mémoire.
  • Etape 4: Périodiquement, les paires dans le buffer sont écrites en local disque. Les emplacements de ces paires tamponnées sur le disque local est renvoyé au master.
  • Etape 5: Le travailleur de reduce utilise des remote appels pour lire les données sur le disque des travailleurs map. Lorsqu'un travailleur a lu toutes les données intermédiaires, il les trie par les clés afin que toutes les occurrences de la même clé soient regroupées. Le tri est nécessaire car généralement de nombreuses clés différentes sont dans la même tâche de réduction.
  • Etape 6: le travailleur de reduce transmet la clé et la valeur correspondante à la fonction de réduction de l'utilisateur. La sortie de reduce est ajoutée à un fichier de sortie final pour cette partition de réduction.
  • Etape 7: Une fois il est la réussi, la sortie de l'exécution de mapreduce est disponible dans les R fichiers( 1 par 1 reduce tache)

Cas d'utilisations

Avec Micronaut, on peut construire des applications de microservices, Serverless, Message-driven avec Kafka/Rabbit ,applications de CLI, Android etc. Parmi ces applications on peut faire des applications axées sur les messages, des applications de ligne de commande, des serveurs HTTP et bien d'autres choses encore.


Avantages

Micronaut vise à éviter les inconvénients de Framework comme Spring, Spring Boot et Grails. Micronaut dispose d'une injection de dépendance et d' AOP lors de l'exécution qui n'utilise pas de reflexion ce qui rends plus facile le lancement d'applications de Micronaut sur GraalVM. Les avantages qu'on peut tirer sont :

  • Temps de démarrage rapide
  • Réduction de l'empreinte mémoire
  • Utilisation minimale de la réflexion
  • Utilisation minimale des proxys
  • Pas de génération d'environnement d'exécution du bytecode
  • Robuste, Scalable: Micronaut est doté d'un système robuste d'externalisation et d'adaptation de la configuration à l'environnement, inspiré
       d'approches similaires à celles de Grails et Spring Boot.
  • Test unitaire facile


Inconvénients

  • Certaines dépendances ne supportent pas (encore) GraalVM :

Le support GraalVM (comme GraalVM lui-même) est toujours en phase d'incubation. Le support des bibliothèques tierces est aléatoire et l'équipe Micronaut est toujours en train de régler tous les problèmes potentiels. Jusqu'à présent, le serveur HTTP, le client HTTP, le support de fonction et le module de découverte de service de Micronaut ont été vérifiés comme fonctionnant sur GraalVM 1.0 RC6 ou supérieur. Le support des autres modules est encore en cours d'évolution.

  • Certainly, Micronaut does not provide as much functionality or integrations as Spring Boot

https://desosa.nl/projects/micronaut/2020/04/09/microservices-in-detail.html

  • Par exemple, il n'existe actuellement aucune prise en charge des vues côté serveur ou des fonctionnalités typiques d'un framework MVC côté serveur traditionnel.
Hdfs archi.png

Par ailleurs, par rapport à d'autres technologies du même type présentes sur le marché comme Teradata par exemple, Hadoop se distingue du fait qu'il soit open-source.


Bibliographie

Veille Technologique 2020

  • Année : VT2020
  • Sujet : Micronaut
  • Slides : Slides
  • Démonstration : []
  • Auteurs : BILOUNGA Aleck