IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Avantage d'un Cache system / reverse Proxy / Varnish?


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Par défaut Avantage d'un Cache system / reverse Proxy / Varnish?
    Bonjour à tous,
    je m'occupe actuellement de l'optimisation d'un site de vente de musique en ligne développé sur Symfony 1.4.
    Objectif: avoir un serveur bien dimensionné et le plus optimisé pour un fort traffic (rapidité et économiquement )

    Le serveur est assez puissant (bi-Intel Octocoeur avec 16giga RAM) mais le site doit être prêt à supporter une forte charge (~20 000 unique/jour).

    En me renseignant sur Symfony j'ai trouvé plusieurs informations sur son système de gestion de cache.

    Le reverse proxy "Varnish" semble être le plus performant de tous mais lourd à mettre en place.

    Si j'ai bien compris, l'utilisation d'un reverse proxy est tres consommatrice en RAM (~6giga) pour mettre en cache les data le plus souvent demandées.

    Es que dans mon cas, l'utilisation de Varnish est intéressante ou le système de cache interne a symfony donne de bon resultat?

    Deuxième point, nous ne possédons qu'un serveur où se trouve tous les services. Un reverse proxy semble être optimisé pour faire du load balancing, mais es que cela pose-t-il un réél soucis pour mon cas?

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Bonjour,

    Comme tu l'a fait remarquer, plusieurs solutions s'offre à toi et chacune à ses avantages et ses inconvénients.

    La solution avec Varnish va tout "simplement" mettre en cache le HTML. Cela signifie, que si un utilisateur est connecté et que tu affiche par exemple son nom en haut de la page, cela va poser problème. Mais son avatange est que ton serveur web ne fera plus appelle à PHP d'ou un gain de performance.

    L'autre solution avec le cache interne à symfony est aussi très performante. Tu peut ainsi mettre en cache uniquement certaine partie (des actions, des components, ...) cela pourra par exemple éviter des appels à ta base de données, ce qui est souvent le plus lourd. Le désavantage est que comme tu fait appel à PHP et à symfony. Cela rajoute un peu de lourdeur à la page, mais rien de bien impressionant sur un bon serveur.

    Enfin, au niveau de ton serveur web, ce que je peut te conseiller si tu as le choix, c'est de mettre en place nginx à la place de Apache. En effet, Apache consomme bien plus de mémoire si tu as installé mop_php. De plus, si tu utilise nginx, il te sera très facile de faire du load balancing entre serveur php. De plus, tu peut également utiliser nginx en reverse proxy comme varnish.

    Voila un exemple de configuration nginx pour symfony:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    # Liste des serveurs à utiliser pour le load balancing et/ou le fail over
    upstream phpservers {
        server ton-serveur-1:9000;
        server ton-serveur-2:9000;
    }
     
    server {
        listen          80;
        server_name     www.ton-projet.com;
        index           index.php index.html;
        root            /var/www/ton-projet/web/;
        charset         utf-8;
     
        access_log      /var/log/nginx/ton-projet-access_log;
        error_log       /var/log/nginx/ton-projet-error_log;
     
        location / {
            if (-f $request_filename) {
              expires max;
              break;
            }
     
            if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
              rewrite ^(.*) /index.php last;
            }
        }
     
        location /sf {
            root /var/www/ton-projet/lib/vendor/symfony/data/web/;
        }
     
        location ~ \.php($|/) {
            set $script     $uri;
            set $path_info  "";
     
            if ($uri ~ "^(.+\.php)(/.*)") {
                set $script     $1;
                set $path_info  $2;
            }
     
            # C'est la que tu met tes serveurs pour le load balancing ou le fail over
            fastcgi_pass    phpservers;
     
            include         /etc/nginx/fastcgi_params;
     
            fastcgi_param   SCRIPT_FILENAME  /var/www/ton-projet/web$script;
            fastcgi_param   PATH_INFO        $path_info;
            fastcgi_param   SCRIPT_NAME      $script;
        }
     
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
            log_not_found   off;
        }
    }
    Pour installer nginx et php-fpm, je te laisse regarder ces pages:
    http://www.papygeek.com/linux/instal...-performances/
    http://www.papygeek.com/linux/php-fp...configuration/

    Pour partager mon expérience personnel, j'utilise le système de cache interne à symfony, et le temp des requêtes pour certaines pages passe de 650ms à 100ms. Ces résultats sont obtenues sur ma machine de développement (Core i7 2.8Ghz, 8Go de Ram et DD 7200 RPM). Sur le serveur de production ces temps passent à 400ms sans cache et 35ms avec cache interne. On peut donc voir que le cache interne est déjà très bon et permet de réduire énormement le temps de chargement.
    De plus il est beaucoup moins contraignant qu'un reverse proxy, car j'affiche le nom de l'utilisateur connecté. Chose difficile à mettre en place avec varnish par exemple.

    Mais la ou un reverse proxy peut etre intéressant est par exemple avec un service REST, ou comme le service est forcément stateless (un utilisateur n'est pas connecté et doit donc donner ses identifiants à chaque requête), on peut mettre en cache la requête en fonction de l'URL qui contient l'identifiant.

    Inarius

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/12/2007, 03h16
  2. Problème Apache en Reverse Proxy + IIS
    Par CaroleM dans le forum Serveurs (Apache, IIS,...)
    Réponses: 3
    Dernier message: 12/03/2007, 10h07
  3. erreur d'acces via reverse proxy apache
    Par bretagne dans le forum Apache
    Réponses: 1
    Dernier message: 28/01/2007, 12h39
  4. [html:base] utilisation d'un reverse proxy
    Par Jerome L. dans le forum Struts 1
    Réponses: 2
    Dernier message: 08/06/2006, 10h19
  5. [OsCache] Cache system
    Par grosFab dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 01/02/2006, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo