Cours 2/3 - Architecture Web

Preview:

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.

Citation preview

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

Serveurs Web

Applications

Bases de données

CDN

Battle Plan pour aujourd’hui

Serveurs Web

Le client

et le serveur

1989 CERN WWW HTTP HTML Tim Berners-Lee

(aka TimBL)

URL URN

URI

protocole://user:pass@f.q.d.n:port/chemin!

WWW > Nexus

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

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

Requ

ête

2

Requ

ête

3

Requête 5

Requête 6

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 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

Apache

Evenements Threads

1 2

3 4

En ligne

Threads

Contenus

1 2

1 2 3 4 5

3 4

5 Evenements

Combien de serveurs web connaissez vous ?

Apache

rambler.ru 500 Millions de page vues

par jour

Igor Sysoev

2002

30% TOP 1000

C10K

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

C’est quoi le long polling ?

Client JS Serveur λ

getNewEvents();

“null”

getNewEvents();

“null”

getNewEvents();

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

Hello World Event

1

2

3

Client JS Node.js

getNewEvents();

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

Hello World Event

Looooong HTTP

Applications

1993 NCSA CGI 1997 RFC-3875

Ken Coar

Common Gateway Interface

http

CGI

Application

stdin stdout

http

Serveur Web

Client

1 requête = 1 process

1996 FastCGI

PHP-FPM Drupal

PHP-FPM Drupal

PHP-FPM 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

David Axmark

1995

MyISAM

Pas de transactions

Lock de tables

InnoDB

ACID

Lock de 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-%d\\T%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

Partition Tolerance 2

Carlo Strozzi

1998

NoSQL

MongoDB

Cassandra

CouchDB Voldemort

Big Table

HyperTable

use mydb!

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

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

Recommended