Architecture web 
Cours
La saison 2013
n aura pas lieu.
Reconversion de
Alain Afflelou
Des bonnes et
mauvaises
architectures
Caches et leur
  importance
Principes du
cloud
Load balancers
     et proxys
Battle Plan pour
             aujourd hui


Serveurs Web




           Applications




                Bases de données




                                   CDN
Serveurs Web
et le serveur




Le client
1989

                  CERN

                  WWW

                  HTTP

Tim Berners-Lee   HTML
  (aka TimBL)
protocole://user:pass@f.q.d.n:port/chemin!
                      




                     URI

              URL
          URN
WWW > Nexus
Récupérer les
                     Ecouter sur le
    fichiers sur le
                     port 80
           disque



Exécuter des
                          Analyser les
    scripts /
                          connexions H
 applications


   Gérer plusieurs   Envoyer le
       connexions    contenu
      simultanées    demandé
Requête 2


                           Requête 3
Requête 1
                Requête 4
                           Requête 5
                Requête 7


                                        Requête 6
Requête 1
            Requête 6
          Requête 10



    Requête 2
          Requête 5
        Requête 9



             Requête 3
              Requête 7



                  Requête 4
              Requête 8

1
 2
   3
   4
 5
 6
          7
    8
 9
 10
Requête 1
            Requête 6
          Requête 10



    Requête 2
          Requête 5
        Requête 9



             Requête 3
              Requête 7

                                                       R
                                                       eq
                  Requête 4
            Requête 8
     uê
                                                       te
1
 2
   3
   4
 5
 6
          7
    8
 9
 10
          8
Apache
Evenements   Threads
Contenus
        3
2




             Threads
        4
1




 En ligne
1
    2
         3
            4
   5




                       4
             2
Evenements
                  3


                            5
             1
Combien de
serveurs web
 connaissez
   vous ?
Apache
rambler.ru
500 Millions de page vues
         par jour
C10K
2002



                   30%
                   TOP
   Igor Sysoev    1000
V8 Google Javascript Engine



                              Serveur Web Evenementiel



           Push & Long Polling



var http = require('http');!
 !
http.createServer(!
   function (request, response) {!
      response.writeHead(200, {'Content-Type': 'text/plain'});!
      response.end('Hello Worldn');!
   }!
).listen(8000);!
 !
console.log('Server running at http://localhost:8000/');!
C est quoi le
long polling ?
Client JS                       Serveur λ


             getNewEvents();
 1

                   “null”


             getNewEvents();
 2

                                          Hello World Event 
                   “null”

             getNewEvents();
 3


       “{ "Message": "Hello World!" }”
Client JS                                    Node.js


                       getNewEvents();
Looooong HTTP




                                                    Hello World Event 



                 “{ "Message": "Hello World!" }”
Applications
1993       Ken Coar

NCSA

CGI

1997

RFC-3875
Common Gateway Interface




                            Serveur Web
            http

                        http


  Client
                        stdout
 CGI
 stdin



1 requête = 1 process
                                Application
1996
FastCGI
PHP-FPM
   PHP-FPM
   PHP-FPM
 Drupal
    Drupal
    Drupal
Bases de données
1964
Ansi/Sparc
Prix Turing

1970
SQL
IBM

               Charles
              Bachman
Base de données hiérarchiqueBase de
données réseauBase de données
relationnelleBase de données orientée
objetBase de données orientée
documentsBase de données XMLBase
de données orientée composant
Base de données relationnelle
Normalisation
1995
       David Axmark
MyISAM
       InnoDB

   Pas de
                 ACID
transactions



  Lock de       Lock de
   tables
       lignes
C est quoi le
   acid ?
Atomicité
Cohérence
Isolation
Durabilité
Atomicité
Cohérence
Isolation
Durabilité
SELECT nom
FROM personnes
WHERE id = 2
for (i=0; i<5000000; i++) {
if personne[i].id == 2 break;
}
Indexes
SELECT!
 DISTINCT(node.nid) AS nid,!
 node_data_field_contenu_1.field_contenu_1_nid AS
node_data_field_contenu_1_field_contenu_1_nid,!
 node.TYPE AS node_type,!
 node.vid AS node_vid,!
 node_data_field_contenu_1.field_contenu_2_nid AS
node_data_field_contenu_1_field_contenu_2_nid,!
 node_data_field_contenu_1.field_contenu_3_nid AS
node_data_field_contenu_1_field_contenu_3_nid,!
 node_data_field_contenu_1.field_contenu_4_nid AS
node_data_field_contenu_1_field_contenu_4_nid,!
 node_data_field_contenu_1.field_contenu_5_nid AS
node_data_field_contenu_1_field_contenu_5_nid,!
 node_data_field_contenu_1.field_contenu_6_nid AS
node_data_field_contenu_1_field_contenu_6_nid,!
 node_data_field_date.field_date_value AS node_data_field_date_field_date_value!
FROM node node!
LEFT JOIN content_field_date node_data_field_date ON node.vid = node_data_field_date.vid!
LEFT JOIN content_type_une node_data_field_contenu_1 ON node.vid =
node_data_field_contenu_1.vid!
WHERE!
 ((node.TYPE IN ('tagazok')) AND (node.STATUS <> 0))!
 AND (DATE_FORMAT(STR_TO_DATE(node_data_field_date.field_date_value, '%Y-%m-%dT%T'), '%Y-
%m-%dT%H:%i:%s')<= '2009-06-30T00:55:00')!
ORDER BY node_data_field_date_field_date_value DESC!
LIMIT 0,1!
Théorème CAP
Consistency      Availability




2         Partition
         Tolerance
NoSQL


1998
        Carlo Strozzi
MongoDB
 Big Table
      CouchDB
Voldemort
     Cassandra
HyperTable
use mydb!

   j = { name3:}!
   k = { x :    "mongo" }!


      db.things.insert( j )!
      db.things.insert( k )!
Collections
db.inventory.find( !
{ type: 'food', !
  price: { !
           $lt: 9.95 } !
} )!
Sharding
CDN
Akamai =
Intélligent
TelCo
CDN
@mtopolov


mtopolov@adyax.com

Cours 2/3 - Architecture Web