Technologies serveur. Benjamin Canou - Christian Queinnec Cours 4 du 10/12/2012. Architecture des Applications Réticulaires



Documents pareils
les techniques d'extraction, les formulaires et intégration dans un site WEB

Architectures en couches pour applications web Rappel : Architecture en couches

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Programmation Web. Madalina Croitoru IUT Montpellier

10. Base de données et Web. OlivierCuré

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Module BD et sites WEB

Web Tier : déploiement de servlets

Formation en Logiciels Libres. Fiche d inscription

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Hébergement de site web Damien Nouvel

Environnements de Développement

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Projet Java EE Approfondi

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

4. SERVICES WEB REST 46

Refonte front-office / back-office - Architecture & Conception -

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Utilisation de Jakarta Tomcat

Application Web et J2EE

1. Installation d'un serveur d'application JBoss:

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Java pour le Web. Cours Java - F. Michel

et Groupe Eyrolles, 2006, ISBN :

Le serveur HTTPd WASD. Jean-François Piéronne

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Cours en ligne Développement Java pour le web

Jahia. Guillaume Monnette École Ingénieurs 2000 Marne-La-Vallée IR3

JavaServer Pages (JSP)

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Formation : WEbMaster

Les architectures 3-tiers Partie I : les applications WEB

Serveurs de noms Protocoles HTTP et FTP

SYSTÈMES D INFORMATIONS

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

SITE WEB E-COMMERCE ET VENTE A DISTANCE

ECLIPSE ET PDT (Php development tools)

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Compte Rendu d intégration d application

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

A. Architecture du serveur Tomcat 6

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

DÉVELOPPEMENT INFONUAGIQUE - meilleures pratiques

Programme ASI Développeur

Cartographie des solutions BigData

Mise en œuvre des serveurs d application

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

«Clustering» et «Load balancing» avec Zope et ZEO

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Serveur d Applications Web : WebObjects

Développement des Systèmes d Information

NoSQL. Introduction 1/30. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Apache Cocoon Framework d'applications XML Sylvain Wallez Anyware Technologies

LICENCE PROFESSIONNELLE

Le développement d applications Web

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Application web de gestion de comptes en banques

Présentation du module Base de données spatio-temporelles

Architectures Web Services RESTful

Technologies du Web. Ludovic DENOYER - ludovic.denoyer@lip6.fr. Février 2014 UPMC

Master1 ère année. Réseaux avancés I. TP nº5 filière ISICG

CNAM Déploiement d une application avec EC2 ( Cloud Amazon ) Auteur : Thierry Kauffmann Paris, Décembre 2010

Introduction à ElasticSearch

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Présentation Alfresco

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

PROSOP : un système de gestion de bases de données prosopographiques

Un serveur d'archivage

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Hébergement de sites Web

Cours Bases de données

Architectures web/bases de données

Webinar. Découvrez Rubedo, la première solution CMS open-source tirant profit des atouts de Zend Framework et du NoSQL. avec la participation de

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Présentation du Framework BootstrapTwitter

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Bases de données documentaires et distribuées Cours NFE04

Implémentation des SGBD

INTRODUCTION AUX TESTS DE PERFORMANCE ET DE CHARGE

BES WEBDEVELOPER ACTIVITÉ RÔLE

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Déployer les Fonts, Icones, et Images avec Forms Services 11G

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

<Insert Picture Here>ApExposé. Cédric MYLLE 05 Février Exposé Système et Réseaux : ApEx, Application Express d Oracle

JOnAS Day 5.1. Clustering

Introduction à la plateforme J2EE

Architecture Orientée Service, JSON et API REST

JOnAS Day 5.1. Outils de développements

Alfstore workflow framework Spécification technique

Transcription:

Benjamin Canou - Christian Queinnec Cours 4 du 10/12/2012

Tâches du serveur Génération de documents Accès aux données, concurrence, sécurité Conversations et sessions

Choix technologiques Les choix d'implantations dépendent de plusieurs critères Niveau de fiabilité requis Temps/budget de développement Temps/budget de maintenance Forme et taille de l'équipe de développement Nombre d'utilisateurs et fréquentation de l'application Pas de solution miracle et universelle 3 / 42

Génération de documents Dans n'importe quel langage : On peut produire un document (X)HTML On peut même forger des réponses HTTP complètes En fait, dans n'importe quel langage disposant de print Beaucoup de solutions De plus ou moins haut niveau Plus ou moins sûres Plus ou moins facile d'accès et souples Un thème important, pourtant souvent mis de côté 4 / 42

Accès aux données Vu au cours 1 : dialogue entre la base de données et le langage Sépararation des rôles / tâches Traitement des très grands volumes de données Traitement des accès concurrents très fréquents Un domaine en mutation 5 / 42

Concurrence Une problématique majeure, historiquement gérée en reposant : Sur un serveur Web éprouvé La base de données Le serveur Apache (par exemple) : S'occupe d'ordonner les connexions Gère les entrées / sorties Est configurable (ex pour la concurrence : fork, prefork,threads) Les solutions à la mode (REST, NodeJS,etc) demandent plus au programmeur La base de données : Est utilisée pour partager des informations entre toutes les requêtes Assure la cohérence par le modèle transactionnel Mais les bases à la mode n'assurent plus ni l'un ni l'autre 6 / 42

Conversations 1 / 2 Pour les services,on a vu : REST : requêtes idépendantes SOAP : séquences simples de requêtes Dans une application pour humains, on a : De vraies conversations (formulaires multiples, etc) Le retour en arrière et le clonage du navigateur 7 / 42

Conversations 2 / 2 SumServlet (I) A number please? 123 SUBMIT! A SumServlet (I) B SumServlet (II) 123 C + + 201 SUM? E F D SumServlet (III) + 123 201 324 SumServlet (III) 123 21 144 A number please? 100 SUBMIT! G SumServlet (II) SumServlet (III) + 100 66 SUM? H + 100 66 166 8 / 42

Fiabilité, rapidité de développement L'approche langage

Confection d'html à l'ancienne 1 / 3 Modèle historique : métissage Un programme en plusieurs langages mêlés 10 / 42

Confection d'html à l'ancienne 2 / 3 En réalité : un langage principal + inclusions d'un ou plusieurs langages C et cpp (pour les macros) notation backquote en Lisp/Scheme programmation littéraire (T E X) Java et javadoc, commentaires structurés, annotations X et SQL (par exemple, jsql = Java + SQL) 11 / 42

Confection d'html à l'ancienne 3 / 3 Constat : pour une page basique, le HTML statique est le plus important Idée : Inclure des parties de langage généraliste dans HTML On utilise un Compilateur traduisant le langage HTML+X en X Une JSP est compilée en une servlet (une classe Java) Shervlet = sh+html 1 : <html><head>< t i t l e > shervlet </ t i t l e ></head><body> 2 : I l est <? sh date? > en ce moment<br > 3 : d i t <?sh uname a? > </body></html> 4 : 5 : <html><head>< t i t l e > shervlet </ t i t l e ></head><body> 6 : <?sh i f [ "$REMOTE_HOST" = ' 1 2 3 4 ' ] ; then?> 7 : Salut v i e i l l e branche, <?sh ; else?> 8 : Bonjour, <? sh f i? > </body></ html> Compilation : sed -e 's/(^?>)/echo "/g' -e 's/($ <?)/"/g' 12 / 42

Confection d'html de plus haut niveau 1 / 2 Première idée : HTML bien caché derrière des composants Utilisé par la plupart des bibliothèques de composants propriétaires Astuce de typage : on empaquette chaque composant dans un DIV Permet des implantations Web de toolkits existants (ex Gtk + HTML5) 13 / 42

Confection d'html de plus haut niveau 2 / 2 Meilleure idée : Représentation intermédiaire du HTML On construit un arbre avec des primitives 1 : ( <BODY> 2 : ( <H1> " Bonjour " ) 3 : ( <P> "Comment a l l e z vous? " ) 4 : ( <BR>) 5 : ; Pour Hop, achetez vos places pour le cours de Manuel Serrano en vague 3 Typage statique de la validité : CDuce, Ocsigen Couche basse propre composants plus fiables La création de document est intégrée au langage, pas mélangée 14 / 42

Gestion de conversations On introduit plusieurs notions : Session : stockage d'informations plus ou moins volatiles Espace sur le serveur + cookie / champs cachés / URL En JSP : requête, session, application, à vie En Ocsigen : plusieurs niveaux de session Le programmeur doit gérer l'empreinte mémoire Continuations : stockage de points d'exécution rappelables Sauvegarde de l'état courant pour reprise future possible Nécessite une prise en charge par le langage Implantations serveur : Seaside Notion de service : HOP, Ocsigen, un service = une continuation Links : la continuation est dans l'url Historique : mémorisation des actions et états successifs Ex : programmation fonctionnelle réactive (FRP) : Temps vu comme une ligne ponctuée par les évènements Retour en arrière possible Contraintes d'expressivité sur le langage / système de types En fait, utilise des continuations 1 / 2 15 / 42

Gestion de conversations 2 / 2 SumServlet (I) A number please? 123 SUBMIT! A SumServlet (I) B SumServlet (II) 123 C + + 201 SUM? E F D SumServlet (III) + 123 201 324 SumServlet (III) 123 21 144 A number please? 100 SUBMIT! G SumServlet (II) SumServlet (III) + 100 66 SUM? H + 100 66 166 16 / 42

Gestion des données persistantes dans le langage Intégration base - langage : Vu au premier cours ; ORM LinQ : langages de requêtes SQL intégré à C# Macaque : langage de requêtes déclaratives intégré à OCaml En OPA : seules données persistantes = DB On peut même typer les accès : HaskellDB : On donne une description déclarative de la base Les requêtes sont vérifiées statiquement Plus fort : PGOCaml : On vérifie au déploiement la compatibilité des requêtes avec la base Soit une erreur arrive tout de suite, soit le programme ne peut échouer Typage des requêtes pas d'injection par construction 17 / 42

Séparation des tâches L'approche templates Tissage, Modèle-Vue-Contrôleur

Tissage (templates) Linéarisation des objets métiers en des collections arborescentes de données élémentaires puis tissage à un patron (par macro-génération (texte, DOM, taglib) ou incrustation) (sur serveur ou client) 42 "foo" 4 "bar" 12 foo 42 4 bar 12 19 / 42

Perl -- HTML::Template Utiliser plutot TemplateToolkit! Substitution textuelle (HTML, XML, Java, JSON, etc) 1 : my $template = HTML : : Template >new( filename => ' t e s t tmpl ' ) ; 2 : $template >param ( ' T i t l e ' => " L ' Aar " ) ; 3 : my @names = [ {Nom => ' Lin ' }, {Nom => ' Clet ' } ] ; 4 : $template >param ( ' LesNoms ' => \@names ) ; 1 : <html><head>< t i t l e ><TMPL_VAR name= ' T i t l e ' ESCAPE="HTML" ></ t i t l e > 2 : <body> Les v o i c i : <ul > 3 : <TMPL_LOOP name= ' LesNoms ' > 4 : < l i ><TMPL_IF name= 'Nom ' > 5 : <a href= ' <TMPL_VAR name= 'Nom ' ESCAPE="URL" > ' >? </a> 6 : </TMPL_IF></ l i > 7 : </TMPL_LOOP></ ul > 8 : </body></html> L'équivalent en Java: Velocity, WebMacro 20 / 42

Perl -- Template 1 : my $config = { 2 : INCLUDE_PATH => ' / search / path ', # or l i s t r e f 3 : EVAL_PERL => 1, # evaluate P e r l code blocks 4 : } ; 5 : my $template = Template >new( $config ) ; 6 : my $vars = { 7 : var1 => $value, 8 : var2 => \%hash, 9 : var3 => \ @list, 10 : var4 => \&code, 11 : var5 => $object, 12 : } ; 13 : $template >process ( ' myfile html ', $vars ) 14 : die $template >error ( ) ; 21 / 42

Perl -- Template exemple 1 : [% I F hash key %] Bonjour [% ELSE %] Salut [% END %] 2 : [% GET v a r i a b l e %] 3 : [% FOREACH v = l i s t %] et [% v %], [% END %] Autres mots clés: SET, INSERT, INCLUDE, MACRO, FILTER, PERL, etc 22 / 42

PHP -- SPIP langage de patrons permettant l'extraction de données venant de base 1 : <B_personne> 2 : V o i c i l a l i s t e des #TOTAL_BOUCLE des : 3 : <ul > 4 : <BOUCLE_personne ( edb : SpipHDR ) { par 5 : LABORATORY_NICKNAME } { par LASTNAME} > 6 : < l i >[#LABORATORY_NICKNAME] < strong > 7 : <a href = ' mailto : [ ( # EMAIL replace {@, ( a ) } ) ] ' > 8 : <span s t y l e = ' text transform : lowercase ; ' > 9 : #FIRSTNAME</ span> 10 : [(#LASTNAME majuscules ) ] < / a></ strong > 11 : </ l i > 12 : </BOUCLE_personne> 13 : </ ul > 14 : </B_personne> 15 : I l n ' y a personne! 16 : <// B_personne> 23 / 42

Java -- Tomcat Apache Tomcat est un conteneur de servlets (comme Jetty) Il implante une série de standards visant à rendre le déploiement aisé Il peut fonctionner seul comme un serveur httpd ou fonctionner derrière Apache Une application Web (une WebApp) est définie par un fichier war (un jar avec un répertoire WEB INF/webxml) à installer dans le répertoire webapps de Tomcat Accès à l'url utilisée getcontextpath, getservletpath et getpathinfo tel que 1 : requesturi = ContextPath + ServletPath + PathInfo 24 / 42

Java -- Tomcat : descripteur webxml 1 / 4 1 : <?xml version=" 1 0" encoding=" ISO 8859 1"?> 2 : <!DOCTYPE web app 3 : PUBLIC " //Sun Microsystems, Inc / / DTD Web Application 2 2//EN" 4 : " http : / / java sun com/ j2ee / dtds /web app_2 2 dtd "> 5 : <web app> 6 : <display name>icfp2000 t a l k </ display name> 7 : <description >The icfp2000 t a l k as a war f i l e </ description > 8 : 9 : <! These context parameters w i l l appear in 10 : every ServletConfig > 11 : <context param> 12 : <param name>webmaster</param name> 13 : <param value> C h r i s t i a n Queinnec@lip6 f r </param value> 14 : <description > 15 : The Email address of the administrator to whom questions 16 : and comments about t h i s application should be addressed 17 : </ description > 18 : </ context param> 25 / 42

Java -- Tomcat : descripteur webxml 2 / 4 1 : <servlet > 2 : <servlet name> F i l t e r S e r v l e t </ servlet name> 3 : <servlet class > f r l i p 6 qnc videoc2000 F i l t e r S e r v l e t </ servlet class > 4 : <! This servlet serves pages from the CDRom, manages an Internet 5 : cache and a zone for updated files, f i l t e r s the pages > 6 : < init param> 7 : <param name> configuration builder </param name> 8 : <param value> 9 : f r l i p 6 qnc videoc2000 Videoc2000ConfigurationBuilder 10 : </param value> 11 : </ i n i t param> 12 : </ servlet > 26 / 42

Java -- Tomcat : descripteur webxml 3 / 4 1 : <servlet mapping> 2 : <servlet name> F i l t e r S e r v l e t </ servlet name> 3 : <url pattern>/ document /* </ url pattern> 4 : </ servlet mapping> 5 : <servlet mapping> 6 : <servlet name>lamlpage</ servlet name> 7 : <url pattern>* laml</ url pattern> 8 : </ servlet mapping> 9 : <servlet mapping> 10 : <servlet name>xmlpage</ servlet name> 11 : <url pattern>* xml</ url pattern> 12 : </ servlet mapping> 27 / 42

Java -- Tomcat : descripteur webxml 1 : <session config> 2 : <session timeout>120</ session timeout><! 2 hours > 3 : </ session config> 4 : 5 : <mime mapping> 6 : <extension>pdf</ extension> 7 : <mime type> application / pdf</mime type> 8 : </mime mapping> 9 : <mime mapping> 10 : <extension>readme</ extension> 11 : <mime type>text / plain </mime type> 12 : </mime mapping> 13 : <mime mapping> 14 : <extension> j s </ extension> 15 : <mime type> a p p l i c a t i o n / x j a v a s c r i p t </mime type> 16 : </mime mapping> 17 : 18 : <welcome file l i s t > 19 : <welcome f i l e >index html</welcome f i l e > 20 : </welcome f i l e l i s t > 21 : 22 : </web app> 4 / 4 28 / 42

Java -- Wicket Une page = une classe; greffe des composants UI dans (simili-)dom 1 : <! Hello html > 2 : <html xmlns : wicket=" http : / / wicket apache org " > 3 : Hello <span wicket : id="name" >you</ span>! 4 : </ html> 1 : / / Hello java 2 : public class Hello extends WebPage { 3 : public Hello ( ) { 4 : Label s = new Label ( "name", "AAR" ) ; 5 : add ( s ) ; 6 : } 7 : } 29 / 42

Java -- Cocoon Cascade de transformations d'xml (avec XSLT): 1 : <map : sitemap > 2 : <map : pipelines > 3 : <map : pipeline ><map : match pattern=" m y F i r s t P i p e l i n e "> 4 : <map : generate src=" myxmlfile xml " type=" f i l e " /> 5 : <map : s e r i a l i z e type=" xml " /> 6 : </map : match><map : match pattern=" mysecondpipeline " > 7 : <map : generate src=" myxmlfile xml " type=" f i l e " /> 8 : <map : transform src=" m y X s l t F i l e x s l t " type=" x s l t " /> 9 : <map : s e r i a l i z e type=" html " /> 10 : </map : match><map : match pattern=" mythirdpipeline " > 11 : <map : generate src=" myxmlfile xml " type=" f i l e " /> 12 : <map : transform src=" myxml2pdffile x s l t " type=" x s l t " /> 13 : <map : s e r i a l i z e type=" fo2pdf " /> 14 : </map : match></map : pipeline ></map : pipelines ></map : sitemap> 30 / 42

Model-View-Controler Depuis Smalltalk 80, la technique du MVC Les visualisateurs sont souvent des moteurs incrémentiels Le modèle peut être testé indépendamment des E/S événement page erreur Contrôleur Visualisateur action Modèle Dans le monde du Web, MVC un peu particulier : M : fortement couplé à la BD (automatiquement) V : composants prédéfinis C : la où est toute l'intelligence Exemples : RoR, django, Catalyst 31 / 42

Java -- JSF un fichier de configuration faces configxml des pages jsp utilisant les bibliothèques d'étiquettes (taglib) propres à JSF La jsp sert de vue et de générateur d'actions pour le contrôleur Une servlet unique FacesServlet un état préservé dans FacesContext 1 : <h : outputlabel value=" Group " for=" group " accesskey=" g" / > 2 : <h : selectonemenu id =" group " validatormessage=" r equired " 3 : value="#{ c o n t a c t C o n t r o l l e r selectedgroupid } "> 4 : <f : selectitems value="#{ c o n t a c t C o n t r o l l e r groups } " /> 5 : <f : validatelongrange minimum=" 1" / > 6 : </h : selectonemenu> 32 / 42

Java -- JSF cycle de vie Le cycle de vie: 1 Restore View: JSF reconstruit l'arborescence des composants de la page à partir de l'état courant (automatique par JSF) 2 Apply Request values: stocke les valeurs présentes dans la requête dans les composants 3 Process Validations: valide ces données à l'aide des règles définies dans les composants 4 Update model values: met à jour du modèle et engendre les événements signalant les modifications 5 Invoke Application: traite des événements et détermine la page suivante 6 Render Response: engendre le contenu de la réponse (automatique par JSF) 33 / 42

Java -- JSF navigation 1 : <navigation rule > 2 : <from view id >/ previous j s p </from view id > 3 : <navigation case> 4 : <from outcome>uneaction</ from outcome> 5 : <to view id >/ next j s p </ to view id > 6 : </ navigation case> 7 : <navigation case> 8 : <from outcome>uneautreaction</ from outcome> 9 : <to view id >/ other j s p </ to view id > 10 : </ navigation case> 11 : <! autres navigation case > 12 : </ navigation rule > 34 / 42

Java -- JSF structure de formulaire assez statique formulaires avec sous-ensembles au choix formulaires avec sous-ensembles dépendant nécessaire parallélisme entre page affichée et état sauvegardé bibliothèques additionnelles de composants (Tomahawk, Tobago) 35 / 42

Passage à l'échelle Architecture nuageuse Élasticité

Gestion de la mémoire par client Pendant une requête : Limiter la taille des documents Envoi par morceaux (chunks) Force le modèle d'exécution Difficile avec une représentation intermédiaire Impossible d'annoncer une erreur tardive en HTTP Entre les requêtes : Limiter la taille des données de session Dans l'idéal, pas d'information sur les clients : stateless Cela signifie : Fortes implications / limitations sur l'architecture de l'application Implications sur les langages / modèles Maintenant : on peut déléguer aux clients 37 / 42

Nombre de clients 1 / 2 Grand nombre de clients : Plusieurs serveurs, plusieurs BD Répartisseur de charge (load balancer) (ex Wikipédia) Utilisation du DNS comme répartiteur (ex google) Nombre variable de clients : Architecture nuageuse (ex amazon EC2) Trop de clients : louer des machines! Pas assez de clients : libérer des machines! 38 / 42

Nombre de clients 2 / 2 Il faut parfois redistribuer les clients : REST : Code HTTP Moved + IP nouveau serveur Serveur stateful : pas si simple client httpd webapp client httpd webapp httpd webapp base des objets Session répartiteur de charges affinité de Session base des objets Session 39 / 42

Stockage nuageux 1 / 2 Les Bases de Données Relationnelles (type SQL) savent gérer : De très gros volumes de données Réparties sur un grand nombre de machines /disques Avec une très bonne cohérence grâce au modèle transactionnel Les bases de données pour réseaux sociaux modernes doivent gérer : De trèe très très gros volumes de données Réparties sur un très très grand nombre de machines /disques En faisant au mieux pour la cohérence Les besoins sont spécifiques : On n'implanterait pas (par exemple) une gestion bancaire sur ce type de BD On ne tient pas à la cohérence parfaite entre les serveurs On peut avoir des délais Mais on ne veut tout de même pas se tromper de compte / personne 40 / 42

Stockage nuageux 2 / 2 Mouvement NoSQL : Émergence de plusieurs nouvelles bases de données, sans standard Avec un langage de requêtes ou non Des primitives plus simples que l'algèbre relationnel Plus ou moins flexibles, plus ou moins efficaces Parfois même avec un peu de transactionnel si nécessaire Quelques noms : Clef / Valeur : Cassandra, MemcacheDB, Dynamo, BigTable Stockage de documents / records : MongoDB, HBase Échanges P2P : BitTorrent Modèle de base : la Table de Hachage Distribuée (DHT) Division horizontale (sharding) : l'ensemble des documents est séparé (pas les documents) On hache la clef pour trouver le serveur Tolérance aux pannes : réplication Variation des serveurs : routage des clefs 41 / 42

Conclusion De nombreux points de choix Pas de solution universelle