web-dev-qa-db-fra.com

Gestion de session dans les microservices

Nous avons la configuration suivante.

  1. STM (Stingrey Traffic Manager) fait l'équilibrage de charge + l'adhérence de session
  2. Cluster Weblogic
  3. Auth géré par un outil tiers

Par conséquent, je n'ai pas à me soucier de la session en ce qui concerne la mise à l'échelle horizontale/l'exécution de plusieurs instances de l'application. Le cluster STM/Weblogic s'assure que la demande suivante parvient au même serveur géré.

Ce que nous avons actuellement est une application monolithique et nous essayons de passer aux microservices. De plus, nous ne voulons pas sortir de l'infrastructure actuelle (c'est-à-dire STM/cluster Weblogic/outil Auth). Ce que nous avons prévu, c'est:

  1. Une passerelle WAR qui achemine les requêtes vers d'autres microservices
  2. N x microservices (WAR) pour chaque sous-domaine fonctionnel
  3. Seule la passerelle API reçoit les demandes des utilisateurs et les autres microservices ne sont pas accessibles de l'extérieur

Donc ma question est

  1. La passerelle API doit-elle être pleine d'état alors que d'autres microsevices sont sans état?
  2. Dans l'affirmative, comment les données de session utilisateur doivent-elles être partagées entre API Gateway et les microservices?

Veuillez également suggérer de meilleures alternatives et ressources/liens. Merci.

18
Fahim Farook

Permettez-moi de partager mon opinion.

Tout d'abord, si vous pouvez garder votre application sans état, faites-le par tous les moyens :) Ce sera la meilleure solution en termes de performances et d'évolutivité.

Maintenant, si c'est impossible, vous devez conserver une couche de gestion de session distribuée.

La passerelle responsable de l'authentification pourrait générer un identifiant de session unique qui pourrait ensuite être utilisé comme clé. Cette clé pourrait être propagée à tous les microservices et faire partie de l'API ou quelque chose.

Afin d'accéder à la session, le microservice pourrait "obtenir" de la valeur par clé et travailler avec.

En termes d'implémentation: je voudrais jeter un oeil sur les solutions NoSQL. Certains d'entre eux qui peuvent répondre à vos besoins sont:

  1. Redis . Jetez un oeil sur '' hset '' là-bas
  2. Hazelcast . C'est plus une grille en mémoire mais si la solution est Java seulement, vous pouvez également implémenter les fonctionnalités requises
  3. Memcache.d . Cela vous donnera une vieille bonne carte, juste distribuée :)

Il y a aussi d'autres solutions, je crois.

Maintenant, les performances sont cruciales ici, sinon toute la solution sera tout simplement trop lente. Donc, à ma connaissance, l'utilisation d'un SGBDR ne serait pas bonne ici, en outre, il serait potentiellement plus difficile de le faire évoluer.

J'espère que cela t'aides

26
Mark Bramnik

1) La passerelle API doit-elle être pleine d'état alors que les autres microservices sont sans état?

Oui, comme dans 12 lignes directrices de l'application Factor tous les services doivent être apatrides.

2) Dans l'affirmative, comment les données de session utilisateur devraient-elles être partagées entre API Gateway et les microservices?

Votre API doit être sans état, donc ne partagez pas l'état de la session avec les microservices. L'approche recommandée consiste à configurer un cache Redis pour stocker les données de session.

enter image description here

2
indika