Devoxx 2017 : retour sur les dernières innovations Java

Du 5 au 7 avril s’est déroulée la 6ème édition de Devoxx, la plus grande conférence française de l’écosystème Java. Comme d’habitude, énormément de sujets sont abordés dans pas moins de 8 tracks en parallèle. Voici le détail des sujets qui me paraissent intéressants à mettre en pratique cette année !

Terraform :

Terraform est un outil d’infra-as-code déclaratif et open source tout droit sorti des laboratoires HashiCorp. Il est à la fois simple et puissant et s’interface très bien avec les fournisseurs de services cloud les plus populaires. Dans cette présentation Yannick Lorenzati , a montré  comment créer une infrastructure simplement et rapidement sans passer par l’interface graphique.

devoxx 2017

Devoxx 2017 : Yannick Lorenzati

Retrouvez les slides de Terraform 101.

Les fonctionnalités clés de Terraform sont :

– Infrastructure as Code : Terraform permet de décrire des infrastructures avec une syntaxe très générique et de haut niveau (faisant abstraction des fournisseurs d’infrastructure). Cela permet de modéliser les ressources d’une architecture applicative.

– Execution Plans : Terraform permet de simuler les modifications qui vont être appliquées sur une infrastructure afin de prévoir et limiter les mauvaises surprises ou erreurs.

– Resource Graph : Terraform construit un graph de toutes les ressources utilisées et parallélise la création et la modification de toutes les ressources indépendantes..

Ci-après un exemple de fichier test.tf pour la création d’un groupe de ressources dans le cloud Azure :

# Configure the Microsoft Azure Provider

provider "azurerm" {

  subscription_id = "your_subscription_id_from_script_execution"

  client_id       = "your_client_id_from_script_execution"

  client_secret   = "your_client_secret_from_script_execution"

  tenant_id       = "your_tenant_id_from_script_execution"

}



# create a resource group

resource "azurerm_resource_group" "helloterraform" {

    name = "terraformtest"

    location = "West US"

}

Tous les informations de souscription sont disponibles dans le portal azure https://portal.azure.com

Le fichier peut être enrichi pour configurer la création d’une vm sur le cloud azure.

Pour tester avant déploiement (Execution Plan), exécuter la commande : terraform plan

Pour déployer, exécuter la commande : terraform apply

Pour supprimer les éléments d’infrastructure créés par Terraform précédemment : terraform destroy

 

Introduction à la détection d’anomalies avec Graphite :

Francois NOLLEN nous a montré comment créer des alarmes relativement élaborées avec les fonctions Graphite et des outils comme Grafana, Seyren ou Cerebro.

Graphite est un outil opensource très répandu pour suivre des indicateurs divers : infra, réseau, données applicatives, KPIs métier, mesures météo, etc.

dashoboard devoxx 2017

dashoboard devoxx 2017

La présentation vidéo est disponible ici : Introduction à la détection d’anomalies avec Graphite .

Francois NOLLEN a abordé trois sujets intéressants :

  • Limites du Dashboard: Les dashboards sont très visuels et peuvent communiquer beaucoup d’informations — > mettre en place des alarmes. Ainsi, dès qu’un signal dépasse un certain seuil, l’équipe prod,dev,… sont alertés.
  • Limites de la détection classique à base de seuils et d’écarts : la maintenance de seuils d’alerte n’est pas optimale, les tendances périodiques ne sont pas prises en compte, et il y a beaucoup de faux négatifs.
  • Techniques de détection d’anomalies avec Graphite: Lissage, prise en compte de l’historique, algorithmes. Ces Techniques ont été montrées à travers une demo de cerebro, un outil développé chez Voyage-SNCF, et entièrement disponible sur GitHub, pour manipuler Graphite et fournir une interface graphique user friendly.

Java 9 :

Jean-Michel Doudoux nous fait découvrir les nouveautés de Java 9 en omettant volontairement la modularisation JIGSAW (JSR 376).

devoxx 2017 : modulo

Devoxx 2017 : modulo

Retrouvez les Slide Java 9 ici :  slides de Java 9.

Ci-après les principales nouveautés qui vont améliorer/accélérer les développements des applications java :

  • Stack-Walking API : permet de Parcourir une stack d’execution de naviguer et d’interagir avec ses éléments et de filtrer les packages qui vous intéresse Grâce à cette API, lors d’une erreur, il est désormais possible de filtrer les classes en supprimant par exemple toutes les mentions de framework/proxies pour ne conserver que les classes métiers de l’application. Ci-après un exemple d’utilisation :
private static List<String> walkAndFilterStackframe() {

  return StackWalker.getInstance().walk(s ->

    s.map( frame -> frame.getClassName() + "/" + frame.getMethodName())

           .filter(name -> name.startsWith("fr.sqli"))

           .limit(10)

           .collect(Collectors.toList()) );

}           .limit(10)

           .collect(Collectors.toList()) );

}

 

  • Renforcement de la sécurité : un type publique (interface, classe, enum, …) n’est plus si publique que cela ! Si vous ne précisez rien, vos types publics sont visibles par l’ensemble des types du module dans lequel ils sont définis mais ne seront pas visibles depuis un autre module.

Java 9 introduit un nouveau niveau de visibilité : un package peut être « exporté » explicitement. Les types publiques de ce package (mais pas de ses sous packages) seront alors visibles depuis un autre module.  Cette configuration doit s’effectuer dans le fichier module-info.java définit dans la racine du module :

module fr.sqli.service {

    exports fr.sqli.model;

    export fr.sqli.dao

}

 

  • Jshell: Java Shell : beaucoup de langages (ruby, scala, python, …) proposent une Read-Evaluate-Print-Loop (REPL). C’est un interpréteur interactif pour tester rapidement quelques lignes de code. Jshell est disponible dans le répertoire %JAVA_HOME%/bin/jshell
jshell> int divide(int x, int y) {   ...>     return x / y;   ...> }|  created method divide(int,int) jshell> divide(5, 0)|  java.lang.ArithmeticException thrown: / by zero|        at divide (#1:2)|        at (#2:1)                             jshell> /list                                                               1 : int divide(int x, int y) {           return x / y;       }                                                                                                                                                                   2 : divide(5, 0)

 

 

Mohamed Djemaa

Architecte Devops – SQLI Paris

 

0 commentaires

votre commentaire

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Inscription newsletter

Ne manquez plus nos derniers articles !