Difference between revisions of "VT2020-Micronaut-Fiche"

From air
Jump to navigation Jump to search
 
(78 intermediate revisions by the same user not shown)
Line 1: Line 1:
  +
=Micronaut=
=Présentation=
 
  +
[[File:micronaut.jpg|200px|thumb|left|Micronaut 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.
 
  +
==Présentation==
Micronaut est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc.
 
  +
[[File:objectComputing.png|100px|thumb|right|Object cumputing logo]]
* La première version de Micronaut (1.0.0) est sortie en 2018
 
  +
Micronaut est un framework full-stack Java moderne, basé sur la JVM, est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc.
 
* Il est open source sous licence Apache 2.0
 
* Il est open source sous licence Apache 2.0
  +
* La première version de Micronaut (1.0.0) est sortie en 2018
[[File:micronaut.jpg|200px|thumb|right|Micronaut logo]]
 
  +
Micronaut est un framework qui permet de construire des applications de type Microservices,Serverless modulaires avec un support pour Java, Kotlin et le langage Groovy adaptés au JDK et à GraalVM.
   
=Fonctionnalités=
 
   
  +
Micronaut s'inspire des Framework Spring, Spring Boot et Grails.
 
  +
=Objectifs de Micronaut=
  +
Micronaut s'inspire des leçons apprises au fil des ans en construisant des applications, des monolithes aux microservices en utilisant les frameworks Spring, Spring Boot et Grails.
  +
 
Micronaut vise à fournir tous les outils nécessaires pour construire des applications JVM, y compris :
 
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.
+
* Injection de dépendance et inversion de contrôle (IoC)
  +
* Programmation orientée par aspect (PAO)
  +
* Défauts raisonnables et autoconfiguration
   
* 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.)
 
   
  +
Mais pas seulement , Micronaut par le travail de ces développeurs a pour objectifs d'éviter les inconvénients de framework comme Spring, Spring Boot et Grails en fournissant pour les applications:
* 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.
 
  +
* Temps de démarrage rapide
  +
* Réduction de l'empreinte mémoire
  +
* Utilisation minimale de la réflexion
  +
* Utilisation minimale des procurations
  +
* Pas de génération de bytecode au runtime
  +
* Test unitaire facile
   
  +
=Spéficité de Micronaut =
* 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 .
 
   
  +
Micronaut effectue l'injection de dépendance sans exiger de réflexion.
* Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…
 
  +
L'injection de dépendance est realisée au moment de la compilation.
  +
Micronaut par sa compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e Ahead-Of-Time (AOT)] et son injection de dépendance qui se passe de reflexion permet d'avoir des applications avec un temps de démarrage rapide,avec une faible empreinte sur la mémoire contrairement aux framework qui repose sur la reflexion et les proxys au Runtime.
   
  +
=Fonctionnalités=
Résilience et tolérance aux fautes
 
  +
Micronaut propose des fonctionnalités ,en voici une liste non exhaustive :
* 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)
 
* 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 (Netflix Ribbon )
  +
* Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
 
  +
* Serverless functions : L'approche de Micronaut en termes de son temps de démarrage rapide et sa faible empreinte mémoire à la compilation en font un candidat idéal pour servir de framework au développement de fonctions. En fait, Micronaut offre un support dédié au développement et au déploiement de fonctions pour AWS Lambda et tout système FaaS qui prend en charge l'exécution de fonctions en tant que conteneurs (tels que OpenFaaS, Rift ou Fn)
  +
* Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…
  +
* 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.
 
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/]
  +
[[File:generator.png|500px|thumb|center]]
   
  +
=Cas d'utilisations=
=Fonctionnement de MapReduce=
 
  +
Avec Micronaut, on peut construire des applications de type :
==Liaison HDFS/MapReduce==
 
  +
Microservices
Comme nous pouvons le voir sur le schema MapReduce s'appuie sur HDFS.
 
  +
Serverless
Voici comment les deux couches sont liées :
 
  +
Message-Driven : axés sur les messages avec Kafka/Rabbit
[[File:hdfsmr.png|350px|thumb|center|liaison HDFS/MapReduce]]
 
  +
CLI : interface en ligne de commandes
==Les rôles==
 
  +
Android
Voici les principaux acteurs que nous pouvons retrouver dans les algorithmes de MapReduce:
 
   
  +
=Micronaut et GraalVM=
* '''User: ''' qui s’exécute sur une machine client, est responsable d’initialiser le job puis de le soumettre pour exécution.
 
  +
[[File:graalvm.png|100px|thumb|right|GraalVM logo]]
   
  +
Micronaut fonctionne bien avec GraalVM. GraalVM permet de produire des images natives grâce à la compilation Ahead-of-time.Et GraalVM est bien intégrée dans un frameworks tels que Micronaut par le fait que Micronaut dispose d'une compilation AOT ,ce qui fait que le temps démarrage de ses applications sont grandement réduit lorsqu'il utilise GRaalVM.
* '''Master : '''est responsable de mapreduce, il affecte les travaux.
 
   
  +
=Limites=
* '''Worker: ''' est la machine qui fait les tâche map et reduce.
 
  +
* 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.
   
==L'exécution==
 
[[File:mapreduce.png|700px|thumb|center|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)
 
   
  +
* Petite communauté mais qui croit d'année en année.
=Cas d'utilisations=
 
  +
L’exemple classique pour illustrer le fonctionnement de MapReduce est le Wordcount (cf. Démonstration). Cependant MapReduce permet aussi de faire autre choses comme :
 
  +
=Installation=
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.
 
  +
==Avec SDKMAN==
  +
Cet outil facilite l'installation de Micronaut sur toute plate-forme basée sur Unix (Mac OSX, Linux, Cygwin, Solaris ou FreeBSD).
  +
  +
Ouvrez un nouveau terminal entrez :
  +
<pre> $ curl -s https://get.sdkman.io | bash </pre>
  +
  +
  +
Suivez les instructions à l'écran pour terminer l'installation.
  +
  +
Ouvrez un nouveau terminal ou tapez la commande :
  +
<pre> $ source "$HOME/.sdkman/bin/sdkman-init.sh" </pre>
  +
  +
Installez ensuite la dernière version stable de Micronaut:
  +
<pre> $ sdk install micronaut </pre>
  +
  +
Une fois l'installation finie. Vous pouvez voir la version installé en tapant la commande:
  +
<pre> $ mn --version </pre>
  +
  +
  +
'''Utilisation :'''
  +
  +
Créer une application en utilisant l'interface de ligne de commande Micronaut.
  +
  +
<pre> mn create-app example.micronaut.complete </pre>
  +
  +
La commande précédente crée une application micronaut avec le paquet par défaut '''example.micronaut''' dans un dossier nommé '''complete'''.
  +
  +
Par défaut, '''create-app''' crée une application Java Micronaut qui utilise le système de compilation '''Gradle'''. Cependant, vous pouvez utiliser d'autres outils de compilation tels que '''Maven''' ou d'autres langages de programmation comme '''Groovy''' ou '''Kotlin'''.
  +
  +
Si vous utilisez Java ou Kotlin et IntelliJ IDEA, assurez-vous que vous avez activé le traitement des annotations.
  +
[[File:intellij.png|400px|thumb|center]]
  +
Pour plus d'informations cliquer [https://guides.micronaut.io/micronaut-cli/guide/index.html ici]
  +
  +
==Utiliser Micronaut avec JHipster==
  +
Installer MHipster
  +
<pre> $ npm install -g generator-jhipster-micronaut</pre>
  +
  +
Creer a new folder for your application
  +
Lancer MHipster
  +
<pre> $ mhipster </pre>
   
  +
Si vous avez déjà installé JHipster, vous pouvez utiliser la commande suivante:
=Avantages=
 
  +
<pre> $ jhipster --blueprints micronaut </pre>
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.
 
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.
 
[[File:hdfs_archi.png|350px|thumb|center]]
 
   
  +
*Monolith projects
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.
 
  +
*Microservice projects
=Inconvénients=
 
  +
*JWT or OAuth 2.0 Authentication
  +
*SQL Database Support
  +
MySQL
  +
MariaDB
  +
PostgreSQL
  +
H2
  +
*Ehcache
  +
*Caffeine Cache
  +
*Redis Cache
  +
*Maven or Gradle Build System
  +
*Angular or React Client
  +
*Protractor Tests
  +
*Heroku Deployment
   
  +
=Démonstration=
  +
Une démonstration de Micronaut est disponible [https://air.imag.fr/index.php/VT2020-Micronaut-Demo ici]
   
 
=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://desosa.nl/projects/micronaut/2020/03/17/from-vision-to-architecture.html#sec-runtime-view
  +
*https://opentracing.io/docs/overview/what-is-tracing/#:~:text=Distributed%20tracing%2C%20also%20called%20distributed,and%20what%20causes%20poor%20performance.
  +
*https://objectcomputing.com/case-studies/case-study-from-monolith-to-microservices-with-micronaut
  +
*https://github.com/jhipster/generator-jhipster-micronaut
  +
*https://objectcomputing.com/files/8415/4220/9027/18-11-14-Intro-Micronaut-Webinar-slide-deck.pdf
  +
*https://desosa.nl/projects/micronaut/2020/04/09/microservices-in-detail.html
  +
*https://www.lavajug.org/2020/03/19/micrograal.html
  +
*https://michael.codes/posts/micronaut-intro/
  +
*https://www.baeldung.com/micronaut
   
 
=Veille Technologique 2020=
 
=Veille Technologique 2020=
 
* Année : [[VT2020|VT2020]]
 
* Année : [[VT2020|VT2020]]
 
* Sujet : Micronaut
 
* Sujet : Micronaut
* Slides : [https://docs.google.com/presentation/d/1rnQAACXoWcCMSLj3QQBssma6tFt3ETM0PnCwJqstqIE/edit?usp=sharing Slides]
+
* Slides : [https://docs.google.com/presentation/d/1oVq_81RwLelY1EptNoObHhmRRfGnfuxBD6PRd49jyjI/edit#slide=id.p Slides]
 
* Démonstration : []
 
* Démonstration : []
 
* Auteurs : BILOUNGA Aleck
 
* Auteurs : BILOUNGA Aleck

Latest revision as of 19:16, 21 November 2020

Micronaut

Micronaut logo

Présentation

Object cumputing logo

Micronaut est un framework full-stack Java moderne, basé sur la JVM, est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc.

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

Micronaut est un framework qui permet de construire des applications de type Microservices,Serverless modulaires avec un support pour Java, Kotlin et le langage Groovy adaptés au JDK et à GraalVM.


Objectifs de Micronaut

Micronaut s'inspire des leçons apprises au fil des ans en construisant des applications, des monolithes aux microservices en utilisant les frameworks 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)
  • Programmation orientée par aspect (PAO)
  • Défauts raisonnables et autoconfiguration


Mais pas seulement , Micronaut par le travail de ces développeurs a pour objectifs d'éviter les inconvénients de framework comme Spring, Spring Boot et Grails en fournissant pour les applications:

  • Temps de démarrage rapide
  • Réduction de l'empreinte mémoire
  • Utilisation minimale de la réflexion
  • Utilisation minimale des procurations
  • Pas de génération de bytecode au runtime
  • Test unitaire facile

Spéficité de Micronaut

Micronaut effectue l'injection de dépendance sans exiger de réflexion. L'injection de dépendance est realisée au moment de la compilation. Micronaut par sa compilation Ahead-Of-Time (AOT) et son injection de dépendance qui se passe de reflexion permet d'avoir des applications avec un temps de démarrage rapide,avec une faible empreinte sur la mémoire contrairement aux framework qui repose sur la reflexion et les proxys au Runtime.

Fonctionnalités

Micronaut propose des fonctionnalités ,en voici une liste non exhaustive :

  • Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
  • Service Discovery (Consul, Eureka, Kubernetes …)
  • Load Balancing(Équilibrage des charges) côté client (Netflix Ribbon )
  • Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
  • Serverless functions : L'approche de Micronaut en termes de son temps de démarrage rapide et sa faible empreinte mémoire à la compilation en font un candidat idéal pour servir de framework au développement de fonctions. En fait, Micronaut offre un support dédié au développement et au déploiement de fonctions pour AWS Lambda et tout système FaaS qui prend en charge l'exécution de fonctions en tant que conteneurs (tels que OpenFaaS, Rift ou Fn)
  • Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…
  • 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.

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

Generator.png

Cas d'utilisations

Avec Micronaut, on peut construire des applications de type : Microservices Serverless Message-Driven : axés sur les messages avec Kafka/Rabbit CLI : interface en ligne de commandes Android

Micronaut et GraalVM

GraalVM logo

Micronaut fonctionne bien avec GraalVM. GraalVM permet de produire des images natives grâce à la compilation Ahead-of-time.Et GraalVM est bien intégrée dans un frameworks tels que Micronaut par le fait que Micronaut dispose d'une compilation AOT ,ce qui fait que le temps démarrage de ses applications sont grandement réduit lorsqu'il utilise GRaalVM.

Limites

  • 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.


  • Petite communauté mais qui croit d'année en année.

Installation

Avec SDKMAN

Cet outil facilite l'installation de Micronaut sur toute plate-forme basée sur Unix (Mac OSX, Linux, Cygwin, Solaris ou FreeBSD).

Ouvrez un nouveau terminal entrez :

  $ curl -s https://get.sdkman.io | bash 


Suivez les instructions à l'écran pour terminer l'installation.

Ouvrez un nouveau terminal ou tapez la commande :

 $ source "$HOME/.sdkman/bin/sdkman-init.sh" 

Installez ensuite la dernière version stable de Micronaut:

 $ sdk install micronaut 

Une fois l'installation finie. Vous pouvez voir la version installé en tapant la commande:

 $ mn --version 


Utilisation :

Créer une application en utilisant l'interface de ligne de commande Micronaut.

 mn create-app example.micronaut.complete 

La commande précédente crée une application micronaut avec le paquet par défaut example.micronaut dans un dossier nommé complete.

Par défaut, create-app crée une application Java Micronaut qui utilise le système de compilation Gradle. Cependant, vous pouvez utiliser d'autres outils de compilation tels que Maven ou d'autres langages de programmation comme Groovy ou Kotlin.

Si vous utilisez Java ou Kotlin et IntelliJ IDEA, assurez-vous que vous avez activé le traitement des annotations.

Intellij.png

Pour plus d'informations cliquer ici

Utiliser Micronaut avec JHipster

Installer MHipster

 $ npm install -g generator-jhipster-micronaut

Creer a new folder for your application Lancer MHipster

 $ mhipster 

Si vous avez déjà installé JHipster, vous pouvez utiliser la commande suivante:

 $ jhipster --blueprints micronaut 
  • Monolith projects
  • Microservice projects
  • JWT or OAuth 2.0 Authentication
  • SQL Database Support
    MySQL
    MariaDB
    PostgreSQL
    H2
  • Ehcache
  • Caffeine Cache
  • Redis Cache
  • Maven or Gradle Build System
  • Angular or React Client
  • Protractor Tests
  • Heroku Deployment

Démonstration

Une démonstration de Micronaut est disponible ici

Bibliographie

Veille Technologique 2020

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