Mettre en place un cluster de sessions web pour Hybris avec Apache Ignite

Découvrez dans cet article comment mettre en place un cluster de sessions web avec Apache Ignite et la suite e-commerce SAP Hybris.

Apache Ignite va garder les sessions web dans un cluster “In memory”. C’est à dire qu’elles seront partagées dans la mémoire de plusieurs serveurs web.

 

Ci-dessous, le schéma de ce qui va être mis en place :

 

Overview

Chaque instance Hybris va contenir une instance d’Ignite et on peut ajouter des instances séparées d’Ignite pour la redondance des données.

Mise en place

Premièrement, il faut mettre à jour le fichier pom.xml pour récupérer les dépendances.

   <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-core</artifactId>
      <version> ${ignite.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-web</artifactId>
        <version> ${ignite.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-log4j</artifactId>
        <version>${ignite.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-spring</artifactId>
        <version>${ignite.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.cache</groupId>
        <artifactId>cache-api</artifactId>
        <version>1.0.0</version>
    </dependency>
pom.xml

 

Après, il faut définir la configuration. Dans cet exemple, je vais mettre en place une réplication complète des sessions et demander à Ignite de détecter les autres nœuds du cluster automatiquement.

Ensuite, il faut mettre à jour le fichier web.xml de l’extension storefront :

<listener>
    <listener-class>org.apache.ignite.startup.servlet.ServletContextListenerStartup</listener-class>
</listener>

<filter>
    <filter-name>IgniteWebSessionsFilter</filter-name>
    <filter-class>org.apache.ignite.cache.websession.WebSessionFilter</filter-class>
</filter>

<!-- You can also specify a custom URL pattern. -->
<filter-mapping>
    <filter-name>IgniteWebSessionsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

    <context-param>
    <param-name>IgniteConfigurationFilePath</param-name>
    <param-value>
        **path to your**/ignite-config.xml
    </param-value>
</context-param>

<!-- Specify the name of Ignite cache for web sessions. -->
<context-param>
    <param-name>IgniteWebSessionsCacheName</param-name>
    <param-value>replicated</param-value>
</context-param>
web.xml

Ici on déclare un nouveau filtre qui va démarrer le serveur embarqué Apache ignite. Attention à ne pas oublier de mettre le chemin vers le fichier de config.

Finalement, la dernière chose à faire et de mettre à jour le fichier de sécurité Spring.

storefront/web/webroot/WEB-INF/config/spring-security-config.xml

Il faut changer

<security:session-management session-authentication-strategy-ref="fixation" />

par

<security:session-management session-fixation-protection="none"/>

Maintenant, au démarrage d’Hybris on peut voir dans les logs qu’une instance d’Ignite est lancée.

En plus de l’instance dans Hybris, il faut aussi au minimum une deuxième instance pour répliquer les sessions web. Par exemple, une instance en mode standalone.

Voici, un exemple de docker-compose pour rapidement démarrer une instance d’Apache Ignite.

ignite:
  image: apacheignite/ignite
  net: "host"
  volumes:
    - <path to>/ignite/config/:/config
  environment:
    CONFIG_URI: /config/ignite-config.xml
docker-compose.yml

Pour tester

Pour vérifier que tout est fonctionnel :

  1. Aller sur le site web et s’identifier.
  2. Stopper le serveur web et le redémarrer.
  3. Quand l’instance web est à nouveau opérationnelle, vous devriez avoir gardé votre session et être toujours connecté.

Conclusion

Ici, l’exemple est très simple, mais les sessions étant partagées entre les nœuds et du coup les clusters, cela permet notamment de stopper un des cluster pour le mettre à jour,tout en maintenant les sessions sur les autres clusters .

 


 

Ressources:

https://ignite.apache.org/use-cases/caching/web-session-clustering.html

https://www.hybris.com/fr/products/commerce

Laisser un commentaire

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

Captcha *