Icones réseaux sociaux de Zenika Contacter Zenika Accéder au facebook Zenika Accéder au blog Zenika Accéder au twitter ZenikaIT
chargement...

Rejoignez-nous

Besoin d'un renseignement ?

+33(0)1 45 26 19 15

info@zenika.com

Zenika contact

Expertise Terracotta

Terracotta est un middleware open-source gratuit pour Java de type NAM (Network Attached Memory). De la même manière qu'un NAS (Network Attached Storage) permet à plusieurs machines d'accéder aux mêmes fichiers sur un disque partagé, un NAM permet à plusieurs applications (ou plusieurs instances d'une même application) d'accéder aux mêmes graphes d'objets au sein d'une mémoire virtuelle partagée.


Afin de limiter le trafic réseau, Terracotta s'emploie à maintenir les données au plus près du code qui les utilise. Ainsi, lors qu'une application obtient un lock sur un sous-ensemble du graphe d'objet commun, ce sous-ensemble est monté (ou maintenu) au niveau de la JVM de l'application, qui y accède alors localement. Toute modification apportée aux objets est immédiatement répliquée sur le NAM pour des raisons de sécurité.


Pour toutes les problématiques de mise en cluster d'applications, de répartition de charge (datagrid) ou de distribution de données (caches), cette solution présente de nombreux avantages. Premièrement, le développement et la maintenance des applications en est fortement simplifié, puisqu'elles ne dépendent plus d'une API explicite pour s'échanger des données (JMS, RMI, SOAP...) : celles-ci peuvent être consultées et modifiées de manière transparente, comme si elles étaient disponibles localement. Ensuite, il n'y a plus besoin de répliquer préventivement les données : elles sont sécurisées au sein du NAM, et seront transmises, à la demande et de manière optimisée, aux seules applications devant y accéder. Enfin, ce système autorise la manipulation de structures qui seraient habituellement trop larges pour tenir dans la mémoire locale des applications : les informations nécessaires sont fournies en temps réel par le NAM.


Techniquement, Terracotta est composé de deux éléments :

  • Un serveur indépendant chargé de la gestion de la mémoire partagée. Afin de garantir une reprise sur incident immédiate, toutes les données sont sécurisées de manière asynchrone dans une base de données interne (BerkeleyDB), et le serveur lui-même peut être mis en redondance active ou passive.
  • Un « bootClassLoader » spécial qui instrumente la JVM des applications clientes et assure la liaison avec le serveur Terracotta. Un fichier de configuration « tc-config.xml » permet alors de définir quels graphes d'objets doivent être déployés sur le NAM (il est également possible d'utiliser des annotations).

 

La clusterisation est donc fournie comme un simple service d'infrastructure qui ne nécessite aucun apprentissage particulier de la part des développeurs.


Architecture Terracotta


L'instrumentation de la JVM et des classes partagées autorise de nombreuses optimisations. Par exemple, contrairement au mécanisme de sérialisation qui transmet des objets complets, Terracotta travaille à un niveau plus fin et ne transmet que des différentiels, de manière compressée et par batches. Les applications instrumentées peuvent également être monitorées par la console d'administration de Terracotta, afin de suivre en temps réel l'état du cluster, le volume des données échangées, repérer les « deadlocks » distribués, etc.

Pour finir, Terracotta propose des modules d'intégration (TIM, Terracotta Integration Module), qui fournissent toute la configuration nécessaire pour s'intégrer aux principaux frameworks d'entreprise : Spring, Hibernate, EHCache, Struts...

Actuellement, Terracotta est déployé avec succès chez des grands comptes de la finance et des services (WalMart, Comcast, JPMorgan, Pearson...).