Back

Breizhcamp 2018

On a été pas mal occupés ces dernier temps avec les différentes conférences, voici enfin une petite sélection de ce qu'on a vu à 2018.

La conférence s'est déroulée cette année à l'université Rennes 1 et son thème était ‘Retour vers le future’. Super thème que les organisateurs, sponsors et speakers on bien poussé.

Jour 1

Notre lab Kotlin

On a commencé la conférence par donner un Lab sur Kotlin: Kotlin par l'exemple. C'était l'occasion de partager notre entousiasme sur ce langage qu'on adore.

Faire un lab avec 70-80 personnes en amphi, ça fait faire du sport ! Après un sondage rapide dans la salle, 90% des gens étaient venu pour faire la partie Back-End, le reste étant réparti sur la partie Android et Front. Pas étonnant pour une conférence généraliste.

On a eu des retours plutôt bons, même si on a pas trop compris le "manque de démos" pour un workshop.

A savoir qu'on va refaire cet atelier à Sunny tech si des personnes souhaitent y assister.

Repas

À ce niveau, certaines autres conférences feraient bien de s'inspirer de BreizhCamp. Le repas était top, copieux et bon, avec des plats chaud et des couvert en bois 👍

Warp 10 - A la recherche des exoplanètes

Après le repas on a assisté à l'atelier sur Warp10 par l'équipe de HelloExoWorld. Sujet très intéressant que la recherche d'exoplanètes à partir des données de la NASA et sa sonde Kepler.

Le lab consistait à utiliser Warp10, une TimeSeries Database et son système de script dans le but de détecter des traces d'exoplanètes. Le moyen le plus simple de détecter une exoplanète consiste a détecter de faibles variations périodiques des photons recus lors de l'observation d'une partie d'une étoile. Une de ces variation correspond au passage d'une planète devant son étoile.

Avis perso: super workshop, ca donne envie de tester un peu plus Warp10, mais warpscript est assez rebutant (langage à pile). Vivement qu'il y ait des DSL au dessus ou des drivers qui permettent d'utiliser le scripting via des langages de plus haut niveau.

Jour 2

Keynote

La keynote démarre par le thème du film joué sur scène, puis Nicolas De Loof nous fait quelques rappels, toujours dans son style inimitable.

La suite de la keynote est assurée par Manuel Dorne (alias Korben) qui nous parle du principe de Bug Bounty pour détecter des failles de sécurité. L'idée est d'avoir à disposition un gros pool d'experts qui sont rémunérés lorsqu'ils trouvent une faille dans un système d'information.

Les avantages du Bug Bounty par rapport à un audit classique sont nombreux (illimité dans le temps, profils de chasseurs de bugs différents, ...). Le Bug Bounty et l'audit sont complémentaires. L'audit est souvent fait pour de l'analyse de code source, voire de sécurité à un instant t, alors que le Bug Bounty est censé avoir une durée plus longue sans accès au code source.

Pour ceux qui sont intéressés, voir YesWeHack et le lien de la Keynote.

Vos applications sous stéroïde avec Otoroshi et Izanami

Alexandre Delègue et Mathieu Ancelin nous parlent de 2 briques récemment mises en Open-source par la MAIF: Izanami et Otoroshi.

Pour commencer ils expliquent comment à la MAIF les architectes sont passées de SOAP, Oracle, EclipseRCP à JavaEE, SpringBoot, React puis à du WOA, Cloud, Reactive, BigData en à peu près 20 ans.

Ils enchaînent sur Izanami, un outil qui permet de faire du feature flipping (activation ou désactivation d'une fonctionalité), du partage de configurations, de l'A/B testing, ...

Izanami est construit avec du Play et du Akka, mais c'est assez ouvert, on peut par exemple utiliser Redis, Cassandra, ElasticSearch, ou encore LevelDb comme support de stockage; ou encore utiliser Kafka, Redis ou Distributed pub-sub comme event store.

Il expose du SSE, du Webhooks, des API REST et il existe des client Scala, Java, NodeJS, Angular, React pour Izanami.

Ensuite ils nous parlent d'Otoroshi, une brique qui sert de gateway (reverse-proxy), et qui permet l'exposition d'API. La configuration peut se faire à chaud, tout en étant clusterisée pour éviter les SPOF (Single Point Of Failure). On peut aussi effectuer une synchronisation des services grâces aux API de Docker, Kubernetes, etc. Ce type de brique va aussi nous permettre de définir, entre autres, des quotas et des contraintes de sécurité.

On a bien aimé les démos de ces deux projets, et on espère avoir l'occasion de les tester sur des vrai projets. En plus, on a trouvé particulièrement intéressant qu'une société française comme la MAIF ait pris le virage de l'Open-source, espèrons que ça fera des émules.

https://maif.github.io/

Byte Buddy

Pendant ce quickie (15min), Nicolas Comet nous présente Byte Buddy.

Cette Bibliothèque permet de manipuler du bytecode Java au runtime. Au travers de tests unitaires, il nous montre rapidement quelques cas d'utilisation intéressants :

  • AOP
  • créer une instance d'une interface dynamiquement
  • mocking
  • ...

On n'a pas toujours besoin de manipuler du byte-code, mais connaître les outils qui rendent cela plus facile c'est toujours bien.

Java 9, 10, 11...

Un retour sur les changements impactants de Java 9, en particulier les modules. Sur le fond, JM Doudoux fait bien le tour des problèmes et des avantages de ces évolutions, il nous présente les outils (jdep, jlink, ...) et leurs principales options qui nous aident à résoudre les problèmes courants. Un rapide aperçu du contenu de Java 10 (qui est sorti le 20 mars), en particulier sur la nouvelle syntaxe avec var qui infère automatiquement les types.

Enfin la statégie du nouveau cycle de release choisi par Oracle nous interroge, on a l'impression qu'ils font ça pour forcer l'achat du support (la version LTS étant payante), et les nouveautés ajoutées nous semblent plus pauvres que les espoirs qu'on pouvait avoir.

Les slides

La vidéo faite à Devoxx Fr 2018 :

HTTP/2

Alexis Hassler nous parle d'HTTP/2.

Pour rappel les fonctionalités d'HTTP/2 sont : la compression des entêtes, protocole binaire, push serveur et multiplexage de requête.

Le multiplexage permet de faire passer plusieurs réponses lors de la même connexion réseau ce qui permet d'économiser de la latence.

Lors de cette conférence Alexis nous a fait faire le tour de l'implémentation du HTTP/2 pour nous développeurs en utilisant le projet nghttp2. Il a abordé les notions de modes : client, serveur, container et reverse proxy.

Pour résumer, HTTP/2 offre des optimisations non négligeables, mais passer à HTTP/2 a un impact sur le code: plus besoin des mécanismes de concaténation pour réduire la latence, sprites, ... Attention cela peut avoir un impact sur la consommation des resources du serveur (peut être plus adapté sur les mécanismes d'event-loop).

Pour le push, le bilan plus ou moins est plus contrasté.

Les slides

Spectre et Meltdown

Un petit coup de photoshop pour mettre les deux logos l'un à côté de l'autre comme pour les logos MAIF serait sympa.

Romain Bentz nous présente les bases de ces failles qui ont été découvertes il y a presque 1 an et rendues publiques en Janvier 2018.

Pour comprende ce qu'il se passe, il faut descendre au niveau du CPU. Pour optimiser les performances, il y a plusieurs niveaux de cache car les accès à la mémoire RAM sont trop longs. Le CPU a besoin d'enchaîner plusieurs opérations pour éxécuter une instruction. Pour des raisons de performances, il va changer l'ordre de certaines instructions, ou faire de la prédiction de branches (sauts liés aux boucles, aux if, etc). Quand il se trompe, on perd quelques cycles du CPU, mais globalement ça améliore les performances.

Spectre et Meltdown sont des "side channel attack", ils vont extraire des informations que le processeur a mises dans le cache, car lors d'une mauvaise prédiction du CPU, le cache n'est pas vidé. On peut mesurer le temps d'accès d'une valeur pour déterminer si elle est dans le cache.

Le principe de Meltdown consiste à lire une information du noyau sans y être autorisé, mais le CPU a mis l'information dans le cache, et rejette l'exécution après la mise en cache. Donc on peut utiliser ce mécanisme pour lire l'ensemble des informations du noyau. Meltdown touche les processeurs Intel.

Spectre utilise la prediction d'information, il concerne tous les processeurs modernes. L'idée est de forcer le processeur à faire une mauvaise prédiction de branche, pour qu'il mette une valeur non prévue dans le cache.

Voici une façon de faire ceci :

if (i < lenArray>) {
    varSecret = array[i]
    junk = array2[varSecret]
}

Si on passe systématiquement des valeurs i inférieures à lenArray, le processeur va prédire qu'il faut rentrer dans le if. Si, après ce temps de chauffe, on met une valeur supérieure à cette taille, on va lire une valeur dans le cache qui n'appartient pas à ce tableau.

Voir les slides

Les mains dans le cambouis de ma blockchain

Fabrice Depaulis et Frédéric Chantrel sont venus nous présenter le fonctionnement de la technologie blockchain.

Ils ont commencé par une explication rapide de certains principes de la blockchain :

  • preuve de travail,
  • concurrence des nœuds du réseau,
  • ajout de blocks,
  • soumission de nouveaux blocks au réseau.

Pour ensuite nous montrer via du live code en python (en prenant quelques raccourcis) comment développer sa blockchain via des services REST :

  • ajout de transaction,
  • creation de nœuds,
  • minage des nœuds,
  • enregistrement des nœuds,
  • méthode résolution afin de trouver un consensus.

Ce talk est une initiation au fonctionnement de la blockchain et permet de démystifier un peu ce gros buzzword en nous donnant un cas concret d'implementation d'une blockchain lite.

Lien du projet github

Jour 3

Dernier jour de BreizhCamp ; comme la veille, on commence par une keynote. C'est l'occasion de remercier les bénévoles, associations, sponsors, l'ISTIC, et l'université de Rennes qui accueille la conférence.

L'annonce de la 7ème édition s'est faite en vidéo.

L'intégralité de la keynote est disponible sous youtube.

Transform a legacy application with Kubernetes and istio

David Gagot nous fait une présentation avec tout intégré dans ses slides (le terminal, le navigateur...), ça évite de perdre du temps lors des changements de contexte. 👍

Sa présentation est basée sur une application legacy: le Java PetStore en version JavaEE7 (voir le repository github), il nous montre la construction d'une image docker en partant de celle de wildfly, le déploiement de cette image dans kubernetes (k8s pour les intimes) puis effectue ensuite des transformations (ajout d'un nginx, nom de domaine, gzip, pages d'erreurs spécifiques) grâce notamment à Ingress et istio.

Istio permet d'injecter une façade qui va intercepter tous les appels et donc d'ajouter des fonctionnalités à kubernetes:

  • Couche SSL
  • Routing intelligent
  • Monitoring des services
  • Contraintes de sécurité
  • Résilience : retry, injection d'anomalies pour valider le comportement de notre système, circuit breaker, rate limiting, etc.

Tout cela sans avoir touché à notre application legacy.

La vidéo à Devoxx

Les vendredis noirs: même pas peur !

Après une petite pause repas, avec entre autre de la galette-saucisse, on se dirige vers la présentation de David Pilato sur la stack Elastic. Vous retrouverez ses slides sur speakerdeck.

Après une rapide présentation des composants de la stack (Beats, Logstash, Elasticsearch, Kibana), il nous parle en particulier des soucis de scalabilité (effet "black friday").

En gros il n'y a pas de formule magique : il faut tester pour trouver la meilleur configuration.

Pour rappel Elasticsearch est constitué d'un cluster de nœuds, dans ces nœuds on trouve des indexes qui sont découpés en shard (partition). Ces partitions sont les unités de travail principales, elles peuvent être primaires ou des réplicats, et correspondent à un index Lucene.

Si vous avez besoin de faire scaler vos instances Elasticsearch, je vous recommande chaudement la vidéo de cette présentation.

Fin de la conférence

Un grand merci à l'équipe organisatrice, aux sponsors, et à toutes les personnes avec qui on a pu discuter lors de la conférence. Vivement la prochaine édition !

La vidéo de la keynote de fin.