13 mars 2015

Spring Cloud Config Server - Serveur de configuration des applications


Le serveur Spring Cloud Config Server permet de centraliser la configuration des applications des différents environnements.

Il peut être utilisé pour n'importe quelle application écrit dans n'importe quelle langage, ce n'est donc pas spécifique aux applications Spring. Cependant, son utilisation est facilitée pour les applications basées sur Spring Boot.

Il est capable de gérer les configurations des environnements de développement, d'intégration, de test jusqu'à la production.

Par défaut, il recherche les fichiers de configuration dans un répertoire situé sur un référentiel de source Git. Mais ceci peut être modifié pour rechercher les fichiers de configuration sur plusieurs référentiels Git. Il peut également rechercher les fichiers de configuration dans le classpath du serveur ou dans un répertoire sur le système de fichiers local au serveur de configuration.

En cas de modification d'un fichier sur le repository Git, cette modification sera prise en compte à la prochaine requête sur le serveur de configuration sans avoir besoin de redémarrer le serveur de configuration.

Les mots de passe et autres données sensibles peuvent être encryptées afin d'éviter de stocker les mots de passe en clair dans les fichiers de configuration sur le serveur de configuration.

Nous aurons à ajouter un fichier bootstrap.yml dans l'application cliente afin qu'elle recherche la configuration sur le serveur de configuration.

Documentation : http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html

12 mars 2015

The Go Programming Language - Créer un serveur HTTP léger


The Go Programming Language est un langage open source développé par Google qui est compilé en langage machine natif tout en ayant la gestion d'un garbage collector, des concurrences et dispose de librairies faciles d'utilisation.

Certaines librairies permettent par exemple de faire des opérations sur le filesystem, de créer un serveur HTTP léger, de créer de services Rest.

Installation

Premier pas

  • Créer le fichier "hello.go"
  • Compiler le programme :
  • go build hello.go
    => Le programme est compilé en un exécutable nommé "hello"
  • Exécuter le programme compilé:
  • $ ./hello
    Hello, world.
    

Petit serveur HTTP

Serveur HTTP avec une page statique simple

Nous utilisons la librairie net/http pour avoir accès aux fonctionnalités HTTP.


11 mars 2015

Netflix Eureka - Registre des services


Spring Cloud a pour objectif de fournir les serveurs et libraires prêts à l'emploi pour permettre les mécanismes suivants dans un cloud de serveurs :
  • Configuration distribuée et versionnée
  • Enregistrement et de découverte de services
  • Routing
  • Appels entre services
  • Load balancing
  • Coupe circuits
  • Vérouillage global
  • Election d'un leader
  • Etat d'un cluster
  • Distribution de messages entre services
Spring Cloud se décompose en plusieurs modules:
  • Spring Cloud Connectors:
    • Simplification de l'accès aux services du Cloud depuis les applications
    • Support de Cloud Foundry et de Heroku
    • Permet le support d'un cloud personnalisé
  • Spring Cloud Config:
    • Externalisation de la configuration dans un environnement distribué
    • Le serveur Spring Cloud Config Server centralise la configuration des applications sur les différents environnement
  • Spring Cloud Bus:
    • Serveur RabbitMQ : bus de messages basés sur le protocol AMQP pour la communication point-to-point et publish-subscribe

Pour faciliter la mise en place des serveurs et applications du cloud, il est préférable d'utiliser Spring Boot car il s'intègre très facilement à Spring Cloud via une simple dépendance Maven:
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter</artifactId>
    </dependency>

Spring Boot permet la mise en place rapide de serveurs et de services car il s'appuie sur le concept suivant :
  • Convention over configuration : nous n'avons plus besoin de tout configurer, Spring Boot utilise la configuration standard. Il est alors possible de surcharger la configuration par défaut via un fichier de configuration YAML

5 mars 2015

RabbitMQ - Serveur AMQP


RabbitMQ est un serveur Open Source produit par Pivotal qui permet de gérer des files de messages (Message Broker) pour l'échange d'informations entre des applications différentes sur des plate-formes différentes.

Il s'appuie sur le protocole AMQP qui veut dire Advanced Message Queuing Protocol.

AMQP est un protocole ouvert pour les systèmes orientés messages (MOM : Message-Oriented Middleware).

=> Voir la documentation de RabbitMQ sur les concepts AMQP

Installation de RabbitMQ - via l'installeur Windows

RabbitMQ nécessite Erlang pour fonctionner.

Pour installer Erlang :
  • Aller sur la page suivante pour télécharger Erlang 
  • Sur Windows:
    • Télécharger l’installeur via le lien OTP 17.4 Windows 64-bit Binary File
    • Lancer et terminer l’installation
Pour installer RabbitMQ :
  • Aller sur la page suivante pour télécharger RabbitMQ :
  • Sur Windows: 
    • Télécharger l’installeur rabbitmq-server.exe
    • Lancer et terminer l’installation

4 mars 2015

Dropwizard


Dropwizard est un framework Java qui est orienté Hautes Performances, Web Services REST et qui produit une application prête à être mise en production en intégrant des services utiles aux "Ops".

Dropwizard est adapté pour la mise en place de micro-services.

En effet, une application produite avec Dropwizard est autonome et autoportée :
  • elle embarque un serveur Jetty pour exposer des services RESTful via Jersey (norme JAX-RS)
  • elle peut utiliser une base mémoire comme H2
Cette application est packagée sous la forme d'un JAR et ne nécessite que la présence du JDK de Java pour fonctionner.

L'application se lance via la commande java -jar avec en paramètre la localisation du fichier YAML de configuration.
java -jar application.jar server config.yml
Les paramètres de configuration qui sont spécifiques à l'environnement cible peuvent être surchargés via la commande java -jar afin de ne pas avoir à modifier à chaque fois le fichier de configuration.

Il est également possible de fournir des services pour l'arrêt et le redémarrage de certains services de l'application (interface Managed) ainsi que pour le changement de fichiers statiques à la volée (Assets).

La présence de métriques via Metrics permet de fournir des informations aux "Ops" (opérations) :
  • état de la JVM
  • état des composants critiques de l'application : 
    • temps de réponses de requêtes, état du pool de connexions JDBC (nombre de connexions actives, en attente), etc.
Les métriques fournies par Metrics peuvent s'interfacer avec des outils de reporting comme Ganglia et Graphite afin d'avoir un tableau de bord pour les "Ops".

19 février 2015

HTTPS avec Spring Boot

Générer la clé SSL

Nous allons générer un keystore contenant une clé pour l'application Spring Boot.

Pour cela, nous nous servons du programme "keytool" installé par défaut dans Java dans le répertoire bin du JDK ou du JRE.

  • Lancer la commande suivante à la racine du projet Spring Boot :
keytool -genkey -alias [nom de la clé] -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
, en remplaçant [nom de la clé] par le nom de l'application
  • Saisir et confirmer le mot de passe de la clé
  • Saisir le nom de l'application à la 3è question
  • Répondre aux autres questions sans obligatoirement mettre de valeur
  • Répondre à la dernière question par "yes"
Le fichier keystore.p12 a été généré à la racine du projet. Nous pouvons vérifier le contenu de ce keystore :
keytool -list -v -keystore keystore.p12 -storetype pkcs12
Cette commande affiche les informations de la clé.

Configurer Spring Boot

Nous indiquons à SpringBoot que nous utilisons le protocol HTTPS à l'aide de la clé que nous avons généré.

  • Dans le fichier src/main/resources/application.yml, ajouter les lignes suivantes :
server:
  port: 9000
  ssl.key-store: keystore.p12
  ssl.key-store-password: [mot de passe]
  ssl.keyStoreType: PKCS12
  ssl.keyAlias: [nom de l'alias]
, avec :
  • 9000 : le port HTTPS de Tomcat
  • keystore.p12 : le fichier de la clé que nous avons générée
  • [mot de passe] : le mot de passe saisi lors de la création de la clé
  • [nom de l'alias] : le nom de la clé que nous avons défini lors de sa création

Lancer l'application

  • Relancer l'application basée sur Spring Boot, via la commande :
    mvn spring-boot:run
    • Si l'exception Caused by: javax.crypto.BadPaddingException: Given final block not properly padded apparaît, cela veut dire que le mot de passe saisi dans le fichier application.yml ne correspond pas à celui de la clé
  • Accéder à la page d'accueil de l'application en utilisant le protocole HTTPS, c'est à dire en utilisant
    https://localhost:9000/[application]
    au lieu de
    http://localhost:8080/[application]