Distribuer des cubes ActivePivot dans le cloud Amazon (AWS)

Une des grandes force d’ActivePivot réside dans la possibilité de distribuer les données au travers de multiple serveurs. Par ailleurs, Amazon Webservices offre la possibilité de mettre en place très rapidement une infrastructure de serveur. Alors pourquoi ne pas réunir le meilleur des 2 mondes?

Intérêt de la démarche

Différents cas d’utilisations peuvent nécessiter de mettre des instances ActivePivot sur le cloud.

  • Dans le cadre d’un PoC (Proof of Concept) : Cela permet de tester à moindre frais l’intérêt d’utiliser ActivePivot ou l’intérêt d’une nouvelle Architecture basée sur ActivePivot ;
  • Raccourcir le time to market : Il arrive que dans certaines grandes entreprise le temps d’acquisition et de mise en place de nouvelles machines soit très long. Or les clients internes ou externes demandent a voir au plus tôt leur nouvelle application. Cela est particulièrement vrai dans un contexte Agile où l’équipe voudra livrer au plus tôt les premières versions du produit (Minimum Viable Product, ou MVP) ;
  • Limiter les immobilisations et frais fixes : Louer une instance AWS peut aussi être une façon de limiter ses immobilisations et permet d’éviter tous les coûts induits (stockage des serveurs, maintenance…)

NB : L’architecture décrite ci-après permets aussi de mettre en place des solutions mixte où certains serveurs sont dans le cloud et d’autres des machines physiques de l’entreprise.

Rappel sur la distribution des cubes ActivePivot

Il existe 2 types de distribution au sein d’ActivePivot:

  • Distribution horizontale : Il s’agit de faire communiquer des cubes ayant la même Structure, mais avec des données différentes selon un certain axe. Le cas d’école serait la gestion de l’historisation des données où un premier serveur contiendrait les données les plus récentes et un ou plusieurs autres serveurs seraient chargés des données les plus vieilles. 
  • Polymorphisme : Il s’agit d’offrir à l’utilisateur une vision agrégée de cubes avec des structures différentes. Dans ce cadre, la distribution permet à la fois la spécialisation des structures tout en offrant la possibilité de faire des requêtes trans-cubes.

Dans notre cas, nous avons choisi de mettre en place une distribution horizontale, dans laquelle un groupe de serveur gère les données les plus récentes, tandis qu’un second groupe est en charge de données historiques. Les structures des cubes sont identiques pour l’ensemble des instances ActivePivot, la seule différence étant que les cubes historique gardent leurs données sur disques plutôt qu’en RAM, afin de limiter leur consommation mémoire.

En termes de rendu auprès des utilisateurs, la mise en place d’un système de cube distribués se concrétise pas la visualisation d’un nouveau cube. Celui-ci peut être vu comme un cube virtuel représentant l’agrégation de tous les cubes distribués. L’utilisateur l’interroge comme un cube tout à fait standard et ActivePivot gère l’interrogation des cubes sous-jacents.

Quel type d’instance AWS choisir?

Amazon offre pléthore de configurations en fonction des utilisations et du type d’OS choisi (Cf. http://aws.amazon.com/fr/ec2/instance-types).

Au vu des consommations mémoires d’ActivePivot, ainsi que des problématiques d’enregistrement sur disque pour les cubes historiques, le choix s’est porté sur les « instances en cluster à mémoire élevée » qui offrent 244 GB de RAM, 2 processeurs Intel Xeon à 8 coeurs et un disque SSD de 240 GB. LE choix de l’OS est laissé à l’appréciation personnelle, puisqu’ActivePivot tourne aussi bien sur Windows que sur Unix/Linux.

Installation d’une instance ActivePivot dans AWS

L’installation d’ActivePivot sur une instance du cloud Amazon se fait sans la moindre difficulté. Le processus est identique à un déploiement sur une machine physique. Il ne faut simplement pas oublier de demander une licence rattachée à l’adresse IP de l’instance.

Mise en place de la distribution sur AWS

ActivePivot se base sur la bibliothèque JGroups (http://www.jgroups.org) pour faire communiquer ses différentes instance. C’est une bibliothèque éprouvée et la configuration standard d’ActivePivot permet de ne pas se préoccuper de tous ces aspects relatifs au réseau.

Là où les choses se corsent c’est lorsque l’on souhaite faire communiquer des instances installées sur AWS. En effet, ActivePivot s’appuie par défaut sur du multicast UDP pour la communication entre les différents serveurs. L’avantage est que l’inscription d’un nouveau serveur à un cube distribué se fait de manière transparente.

Or, le multicast n’est pas permis dans par Amazon car il nécessite d’envoyer des requêtes de broadcast. Il s’agit donc de configurer ActivePivot afin qu’il se base sur d’autres protocoles.

2 pistes ont été envisagées :

  • Utilisation d’un « Gossip Router » : Cette technique se base sur un « Gossip Server ». Il s’agit d’un petit programme lancé sur un serveur et un port spécifique. Tout nouveau serveur devra en premier lieu aller s’inscrire auprès de ce gossip server qui lui donnera la liste des membres déjà inscrits.
  • TCP Multiple Ping : Dans cette configuration il n’est plus nécessaire de faire appel à un programme tiers. Il s’agit de préciser dans la configuration une liste de serveurs de référence qui serviront de gossip server

Nous avons choisi la seconde solution, car elle évite la mise en place d’une autre instance et est plus simple en termes de configuration.

3 étapes de sont nécessaires à sa mise en place :

1 – Configuration du protocole TCPPING

Première chose à faire, c’est remplacer le Protocole Ping par TCPPING. Pour ce faire, il faut éditer le fichier protocol.xml, supprimer le paragraphe relatif à PING et rajouter le paragraphe suivant :

<!-- Hardcoded ip addresses for the 2 AWS instances -->
<TCPPING timeout="3000"
initial_hosts="XX.XX.XX.XX[7800],YY.YY.YY.YY[7800]"
port_range="1"
num_initial_members="3"/>

Ce paragraphe permet de déclarer 2 serveurs, sur les adresses IP XX.XX.XX.XX et YY.YY.YY.YY. Chacun utilise le port 7800 qui est le port par défaut. Ce port doit être le même que celui précisé au niveau du protocole TCP.

2 – Configuration du protocole TCP

Le point le plus important et de spécifier le port de connection, toujours dans le fichier protocol.xml

bind_port="7800"

3 – Lier l’adresse IP à l’executable

Le dernier point à mettre en place est de lier l’adresse IP du serveur. Pour ce faire, il s’agit de fournir l’adresse IP du serveur en paramètre de l’executable java:

-Djgroups.bind_addr=XX.XX.XX.XX

Conclusion

La mise en place d’instance d’ActivePivot distribuées sur le cloud d’Amazon ne nécessite pas forcément un gros effort. Il s’agit surtout de paramétrage de la couche de communication.

Pour aller plus loin:

  • Sur ActivePivot : http://quartetfs.com/
  • Sur la configuration de Jgroups : http://www.jgroups.org/manual/html/user-advanced.html

Laisser un commentaire

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