cours 2/3 - architecture web

86
Architecture web Cours

Upload: adyax

Post on 30-Nov-2014

1.365 views

Category:

Technology


1 download

DESCRIPTION

Cours donné à l'HETIC aux H4. Architecture Web. Ce cours traite des serveurs web, bases de données, application et scripts ainsi que des CDN.

TRANSCRIPT

Page 1: Cours 2/3 - Architecture Web

Architecture web Cours

Page 2: Cours 2/3 - Architecture Web
Page 3: Cours 2/3 - Architecture Web

La saison 2013 n’aura pas lieu.

Page 4: Cours 2/3 - Architecture Web

Reconversion de Alain Afflelou

Page 5: Cours 2/3 - Architecture Web

Des bonnes et mauvaises architectures

Page 6: Cours 2/3 - Architecture Web

Caches et leur importance

Page 7: Cours 2/3 - Architecture Web

Principes du cloud

Page 8: Cours 2/3 - Architecture Web

Load balancers et proxys

Page 9: Cours 2/3 - Architecture Web

Serveurs Web

Applications

Bases de données

CDN

Battle Plan pour aujourd’hui

Page 10: Cours 2/3 - Architecture Web

Serveurs Web

Page 11: Cours 2/3 - Architecture Web

Le client

et le serveur

Page 12: Cours 2/3 - Architecture Web

1989 CERN WWW HTTP HTML Tim Berners-Lee

(aka TimBL)

Page 13: Cours 2/3 - Architecture Web

URL URN

URI

protocole://user:[email protected]:port/chemin!

Page 14: Cours 2/3 - Architecture Web
Page 15: Cours 2/3 - Architecture Web

WWW > Nexus

Page 16: Cours 2/3 - Architecture Web

Ecouter sur le port 80

Analyser les connexions HTTP

Envoyer le contenu demandé

Récupérer les fichiers sur le

disque

Exécuter des scripts /

applications

Gérer plusieurs connexions simultanées

Page 17: Cours 2/3 - Architecture Web
Page 18: Cours 2/3 - Architecture Web

Requête 1 Requête 4 Requête 7

Requ

ête

2

Requ

ête

3

Requête 5

Requête 6

Page 19: Cours 2/3 - Architecture Web
Page 20: Cours 2/3 - Architecture Web

Requête 1

Requête 2 Requête 5

Requête 3

Requête 6

Requête 7

Requête 9

Requête 10

Requête 4 Requête 8

1 2 3 4 5 6 7 8 9 10

Page 21: Cours 2/3 - Architecture Web
Page 22: Cours 2/3 - Architecture Web

Requête 1

Requête 2 Requête 5

Requête 3

Requête 6

Requête 7

Requête 9

Requête 10

Requête 4

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

Requête 8

Page 23: Cours 2/3 - Architecture Web

Apache

Page 24: Cours 2/3 - Architecture Web

Evenements Threads

Page 25: Cours 2/3 - Architecture Web
Page 26: Cours 2/3 - Architecture Web

1 2

3 4

En ligne

Threads

Contenus

Page 27: Cours 2/3 - Architecture Web

1 2

1 2 3 4 5

3 4

5 Evenements

Page 28: Cours 2/3 - Architecture Web

Combien de serveurs web connaissez vous ?

Page 29: Cours 2/3 - Architecture Web

Apache

Page 30: Cours 2/3 - Architecture Web
Page 31: Cours 2/3 - Architecture Web

rambler.ru 500 Millions de page vues

par jour

Page 32: Cours 2/3 - Architecture Web

Igor Sysoev

2002

30% TOP 1000

C10K

Page 33: Cours 2/3 - Architecture Web
Page 34: Cours 2/3 - Architecture Web
Page 35: Cours 2/3 - Architecture Web

V8 Google Javascript Engine

Serveur Web Evenementiel

var http = require('http');! !http.createServer(! function (request, response) {! response.writeHead(200, {'Content-Type': 'text/plain'});! response.end('Hello World\n');! }!).listen(8000);! !console.log('Server running at http://localhost:8000/');!

Push & Long Polling

Page 36: Cours 2/3 - Architecture Web
Page 37: Cours 2/3 - Architecture Web
Page 38: Cours 2/3 - Architecture Web

C’est quoi le long polling ?

Page 39: Cours 2/3 - Architecture Web

Client JS Serveur λ

getNewEvents();

“null”

getNewEvents();

“null”

getNewEvents();

“{ "Message": "Hello World!" }”

Hello World Event

1

2

3

Page 40: Cours 2/3 - Architecture Web

Client JS Node.js

getNewEvents();

“{ "Message": "Hello World!" }”

Hello World Event

Looooong HTTP

Page 41: Cours 2/3 - Architecture Web

Applications

Page 42: Cours 2/3 - Architecture Web

1993 NCSA CGI 1997 RFC-3875

Ken Coar

Page 43: Cours 2/3 - Architecture Web

Common Gateway Interface

http

CGI

Application

stdin stdout

http

Serveur Web

Client

1 requête = 1 process

Page 44: Cours 2/3 - Architecture Web

1996 FastCGI

Page 45: Cours 2/3 - Architecture Web
Page 46: Cours 2/3 - Architecture Web
Page 47: Cours 2/3 - Architecture Web

PHP-FPM Drupal

PHP-FPM Drupal

PHP-FPM Drupal

Page 48: Cours 2/3 - Architecture Web

Bases de données

Page 49: Cours 2/3 - Architecture Web
Page 50: Cours 2/3 - Architecture Web
Page 51: Cours 2/3 - Architecture Web

1964 Ansi/Sparc Prix Turing 1970 SQL IBM

Charles Bachman

Page 52: Cours 2/3 - Architecture Web

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

Page 53: Cours 2/3 - Architecture Web

Base de données relationnelle

Page 54: Cours 2/3 - Architecture Web

Normalisation

Page 55: Cours 2/3 - Architecture Web

David Axmark

1995

Page 56: Cours 2/3 - Architecture Web
Page 57: Cours 2/3 - Architecture Web

MyISAM

Pas de transactions

Lock de tables

InnoDB

ACID

Lock de lignes

Page 58: Cours 2/3 - Architecture Web

C’est quoi le acid ?

Page 59: Cours 2/3 - Architecture Web
Page 60: Cours 2/3 - Architecture Web

Atomicité Cohérence Isolation Durabilité

Page 61: Cours 2/3 - Architecture Web

Atomicité

Page 62: Cours 2/3 - Architecture Web

Cohérence

Page 63: Cours 2/3 - Architecture Web

Isolation

Page 64: Cours 2/3 - Architecture Web

Durabilité

Page 65: Cours 2/3 - Architecture Web

SELECT nom FROM personnes WHERE id = 2

Page 66: Cours 2/3 - Architecture Web

for (i=0; i<5000000; i++) { if personne[i].id == 2 break; }

Page 67: Cours 2/3 - Architecture Web
Page 68: Cours 2/3 - Architecture Web

Indexes

Page 69: Cours 2/3 - Architecture Web

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-%d\\T%H:%i:%s')<= '2009-06-30T00:55:00')!ORDER BY node_data_field_date_field_date_value DESC!LIMIT 0,1!

Page 70: Cours 2/3 - Architecture Web
Page 71: Cours 2/3 - Architecture Web
Page 72: Cours 2/3 - Architecture Web

Théorème CAP

Page 73: Cours 2/3 - Architecture Web

Consistency Availability

Partition Tolerance 2

Page 74: Cours 2/3 - Architecture Web

Carlo Strozzi

1998

NoSQL

Page 75: Cours 2/3 - Architecture Web

MongoDB

Cassandra

CouchDB Voldemort

Big Table

HyperTable

Page 76: Cours 2/3 - Architecture Web

use mydb!

j = { name : "mongo" }!k = { x : 3 }!

db.things.insert( j )!db.things.insert( k )!

Page 77: Cours 2/3 - Architecture Web

Collections

Page 78: Cours 2/3 - Architecture Web

db.inventory.find( !{ type: 'food', ! price: { ! $lt: 9.95 } !} )!

Page 79: Cours 2/3 - Architecture Web

Sharding

Page 80: Cours 2/3 - Architecture Web
Page 81: Cours 2/3 - Architecture Web

CDN

Page 82: Cours 2/3 - Architecture Web

Akamai = Intélligent

Page 83: Cours 2/3 - Architecture Web
Page 84: Cours 2/3 - Architecture Web
Page 85: Cours 2/3 - Architecture Web

TelCo CDN

Page 86: Cours 2/3 - Architecture Web

@mtopolov

[email protected]