Stateless is pricelessmercredi 7 mars 12
Thomas Recloux                     Développeur / Architecte indépendant                     @thomasrecloux                ...
Stateless                     SessionLess is pricelessmercredi 7 mars 12
mercredi 7 mars 12
Session Http ?mercredi 7 mars 12
Serveur                     JSESSIONID=1337AZERTYUIOPmercredi 7 mars 12
Serveur                     JSESSIONID=1337AZERTYUIOP                     JSESSIONID=1337AZERTYUIOPmercredi 7 mars 12
Serveur                                                 1337AZERTYUIOP                                                    ...
Serveur                                                 1337AZERTYUIOP                                                    ...
Pour quoi faire ?mercredi 7 mars 12
1 - Authentification                     En cas d’authentification par formulaire                     Placer un objet marque...
2 - Etat conversationnel                      Utiliser la session pour stocker l’état de la                      conversat...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOPmercredi...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOP        ...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOP        ...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOP        ...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOP        ...
3 - Cache                     Eviter de recharger des objets depuis leur                     système de stockage          ...
Il est ou le problème ?mercredi 7 mars 12
1 - Répartition de                          chargemercredi 7 mars 12
A                     sessionmercredi 7 mars 12
A                     session                               B                       ?mercredi 7 mars 12
A                                   session                         Load                       Balancer                   ...
A                                      session                         Load                          Load                 ...
2 - Tolérance aux pannesmercredi 7 mars 12
A                                      session                         Load                          Load                 ...
A                                      session                         Load                          Load                 ...
A                                   session                         Load                          Load                    ...
A                                  session                        Load                         Load                       ...
3 - Fourre tout                     Difficile de gérer le cycle de vie des objets en                     session           ...
4 - Scalabilité                     En cas de forte charge, les sessions existantes                     ne peuvent pas pro...
5 - Quelle durée de vie                     Réglage du timeout de session : durée de                     survie de la sess...
6 - Mise à jour de                          l’application                     La session contient des objets complexes de ...
7 - Ongletsmercredi 7 mars 12
Alors, on fait comment ?mercredi 7 mars 12
Stocker l’état ailleursmercredi 7 mars 12
URLmercredi 7 mars 12
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOPmercredi...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOPmercredi...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOP        ...
Serveur                     GET /petsearch?query=dog                                                1337AZERTYUIOP        ...
Cookie                     Echangé à chaque requête/réponse                     Peut être signé                     4Ko Ma...
Champs caché                     Ex : Mémoriser l’identifiant de l’entité en                     cours de modification      ...
Etat coté client                     Arbre DOM                     Variables globales JavaScript                     Appli...
Etat coté serveur                     Base de données                     Cache distribuémercredi 7 mars 12
mercredi 7 mars 12
mercredi 7 mars 12
Spring MVC / Securitymercredi 7 mars 12
Authentification                     Spring security 3.1 dispose d’un mode                     «stateless»                 ...
spring-security.xml          <http .... create-session="stateless">          	 ....          	 <remember-me key="myRemembe...
Entité en cours de                          modification                     Se passer du très utile @SessionAttributesmerc...
Serveur                                               1337AZERTYUIOP                                                      ...
Serveur                                               1337AZERTYUIOP                                                      ...
Serveur                                               1337AZERTYUIOP                                                      ...
Une solution :                       Annoter une méthode avec                       @ModelAttribute permet de l’insérer da...
Démomercredi 7 mars 12
Questions ?mercredi 7 mars 12
Prochain SlideShare
Chargement dans…5
×

Stateless is priceless

1 274 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 274
Sur SlideShare
0
Issues des intégrations
0
Intégrations
130
Actions
Partages
0
Téléchargements
5
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Stateless is priceless

  1. 1. Stateless is pricelessmercredi 7 mars 12
  2. 2. Thomas Recloux Développeur / Architecte indépendant @thomasrecloux https://github.com/trecloux/ Ch’ti JUG (co) leadermercredi 7 mars 12
  3. 3. Stateless SessionLess is pricelessmercredi 7 mars 12
  4. 4. mercredi 7 mars 12
  5. 5. Session Http ?mercredi 7 mars 12
  6. 6. Serveur JSESSIONID=1337AZERTYUIOPmercredi 7 mars 12
  7. 7. Serveur JSESSIONID=1337AZERTYUIOP JSESSIONID=1337AZERTYUIOPmercredi 7 mars 12
  8. 8. Serveur 1337AZERTYUIOP user com.myapp.User@45567 JSESSIONID=1337AZERTYUIOP roles [CONFIGURATION, DICTATOR] JSESSIONID=1337AZERTYUIOPmercredi 7 mars 12
  9. 9. Serveur 1337AZERTYUIOP user com.myapp.User@45567 JSESSIONID=1337AZERTYUIOP roles [CONFIGURATION, DICTATOR] DFGHH76434455 user com.myapp.User@24098 JSESSIONID=1337AZERTYUIOP roles []mercredi 7 mars 12
  10. 10. Pour quoi faire ?mercredi 7 mars 12
  11. 11. 1 - Authentification En cas d’authentification par formulaire Placer un objet marqueur en session pour mémoriser l’authentificationmercredi 7 mars 12
  12. 12. 2 - Etat conversationnel Utiliser la session pour stocker l’état de la conversation entre le client et le serveur Exemples : Panier Entité en cours de modification ....mercredi 7 mars 12
  13. 13. Serveur GET /petsearch?query=dog 1337AZERTYUIOPmercredi 7 mars 12
  14. 14. Serveur GET /petsearch?query=dog 1337AZERTYUIOP search [Pet, Pet, Pet, Pet, Pet, Pet]mercredi 7 mars 12
  15. 15. Serveur GET /petsearch?query=dog 1337AZERTYUIOP search [Pet, Pet, Pet, Pet, Pet, Pet] GET /pet?idx=2mercredi 7 mars 12
  16. 16. Serveur GET /petsearch?query=dog 1337AZERTYUIOP search [Pet, Pet, Pet, Pet, Pet, Pet] GET /pet?idx=2 pet com.myapp.Pet@566577mercredi 7 mars 12
  17. 17. Serveur GET /petsearch?query=dog 1337AZERTYUIOP search [Pet, Pet, Pet, Pet, Pet, Pet] GET /pet?idx=2 pet com.myapp.Pet@566577 POST /petmercredi 7 mars 12
  18. 18. 3 - Cache Eviter de recharger des objets depuis leur système de stockage Exemples : Utilisateur, Roles Objets fréquemment utilisés : Client, Articles, .....mercredi 7 mars 12
  19. 19. Il est ou le problème ?mercredi 7 mars 12
  20. 20. 1 - Répartition de chargemercredi 7 mars 12
  21. 21. A sessionmercredi 7 mars 12
  22. 22. A session B ?mercredi 7 mars 12
  23. 23. A session Load Balancer 1337AZE RTYUIOP A Bmercredi 7 mars 12
  24. 24. A session Load Load Balancer Balancer 1337AZE 1337AZE RTYUIOP A A B RTYUIOPmercredi 7 mars 12
  25. 25. 2 - Tolérance aux pannesmercredi 7 mars 12
  26. 26. A session Load Load Balancer Balancer 1337AZE 1337AZE RTYUIOP A A B RTYUIOPmercredi 7 mars 12
  27. 27. A session Load Load Balancer Balancer 1337AZE 1337AZE RTYUIOP A A B RTYUIOPmercredi 7 mars 12
  28. 28. A session Load Load Balancer Balancer 1337AZE RTYUIOP A B ?mercredi 7 mars 12
  29. 29. A session Load Load Load Load Balancer Balancer Balancer Balancer A B sessionmercredi 7 mars 12
  30. 30. 3 - Fourre tout Difficile de gérer le cycle de vie des objets en session Syndrome de la session obèse, refactoring complexe Typage faiblemercredi 7 mars 12
  31. 31. 4 - Scalabilité En cas de forte charge, les sessions existantes ne peuvent pas profiter de l’ajout de nouveaux serveurs Quelle taille mémoire provisionner pour ma session ?mercredi 7 mars 12
  32. 32. 5 - Quelle durée de vie Réglage du timeout de session : durée de survie de la session après la dernière requête de l’utilisateur Trop court : la session ne survie pas à une pause dans l’utilisation de l’application Trop long : utilisation de ressources inutilesmercredi 7 mars 12
  33. 33. 6 - Mise à jour de l’application La session contient des objets complexes de l’application, elle est donc liée à une version de l’application Procédures complexe de migrationmercredi 7 mars 12
  34. 34. 7 - Ongletsmercredi 7 mars 12
  35. 35. Alors, on fait comment ?mercredi 7 mars 12
  36. 36. Stocker l’état ailleursmercredi 7 mars 12
  37. 37. URLmercredi 7 mars 12
  38. 38. Serveur GET /petsearch?query=dog 1337AZERTYUIOPmercredi 7 mars 12
  39. 39. Serveur GET /petsearch?query=dog 1337AZERTYUIOPmercredi 7 mars 12
  40. 40. Serveur GET /petsearch?query=dog 1337AZERTYUIOP GET /pet/543/chimpanzeemercredi 7 mars 12
  41. 41. Serveur GET /petsearch?query=dog 1337AZERTYUIOP GET /pet/543/chimpanzee POST /pet/543mercredi 7 mars 12
  42. 42. Cookie Echangé à chaque requête/réponse Peut être signé 4Ko Maximum : privilégier l’échange d’identifiants vs objets complexes Peut être persistant <!> Partagé entre les ongletsmercredi 7 mars 12
  43. 43. Champs caché Ex : Mémoriser l’identifiant de l’entité en cours de modification Onglet friendly <!> Vérifier les droits lors du GET et du POSTmercredi 7 mars 12
  44. 44. Etat coté client Arbre DOM Variables globales JavaScript Applications «Single Page» Ex : GWT Stockage local HTML5 Web Storage, Indexed DB, Web SQLmercredi 7 mars 12
  45. 45. Etat coté serveur Base de données Cache distribuémercredi 7 mars 12
  46. 46. mercredi 7 mars 12
  47. 47. mercredi 7 mars 12
  48. 48. Spring MVC / Securitymercredi 7 mars 12
  49. 49. Authentification Spring security 3.1 dispose d’un mode «stateless» Qui ne fonctionne pas en authentification par formulaire Solution : utiliser l’authentification «Remember Me» <!> Uniquement en mode «Token»mercredi 7 mars 12
  50. 50. spring-security.xml <http .... create-session="stateless"> .... <remember-me key="myRememberMeKey" /> </http> login.jsp <form id=form Texte Texte action="<c:url value="/j_spring_security_check"/>" method="POST"> <input type="hidden" value="true" name="_spring_security_remember_me" /> ... </form>mercredi 7 mars 12
  51. 51. Entité en cours de modification Se passer du très utile @SessionAttributesmercredi 7 mars 12
  52. 52. Serveur 1337AZERTYUIOP pet com.myapp.Pet@566577 GET /pet/573/chimpanzee POST /petmercredi 7 mars 12
  53. 53. Serveur 1337AZERTYUIOP pet com.myapp.Pet@566577 GET /pet/573/chimpanzee POST /pet 1 - Récupérer l’attribut en session 2 - «Binding» à partir des données du POST 3 - Appel de la méthode du contrôleurmercredi 7 mars 12
  54. 54. Serveur 1337AZERTYUIOP pet com.myapp.Pet@566577 GET /pet/573/chimpanzee POST /pet 1 - Récupérer l’attribut en session 1 - Charger l’entité depuis la base de données 2 - «Binding» à partir des données du POST 3 - Appel de la méthode du contrôleurmercredi 7 mars 12
  55. 55. Une solution : Annoter une méthode avec @ModelAttribute permet de l’insérer dans le traitement de la requête avant le «binding» Cette méthode peut prendre les même paramètres qu’une méthode de Contrôleurmercredi 7 mars 12
  56. 56. Démomercredi 7 mars 12
  57. 57. Questions ?mercredi 7 mars 12

×