TPE 2016 : Le Réseau informatique
Apache

Apache est un serveur HTTP, c'est-à-dire un logiciel qui va servir au serveurs WEB de gérer les communications avec ses clients (les internautes).




Apache est extrèmement populaire dans le monde des serveurs WEB pour les raisons suivantes :
- Le logiciel est entièrement gratuit
- De nombreux langages de programmation peuvent être interprétés par Apache tel que le "Ruby", le "Python", le "PHP", ou encore le "Perl" (logos ci-contre).
- Le logiciel est modulable (on peut y ajouter des modules pour remplir une fonction additionnelle au logiciel).
- Apache est compatible avec la plus grande partie des systèmes d'exploitation, soit Windows, MacOSX, Linux et le reste des systèmes UNIX.
- On peut retrouver une communauté importante et active en cas de problème mais ceci n'est pas dû au hasard, Apache est présent sur la majorité des serveurs WEB au détriment de ses concurents (voir graphique sur l'utilisation des serveurs).

- Definition :
- un Processus : Un programme enregistré dans la mémoire vive (RAM) devient un processus, un processus peut en créer un deuxième, on appelle ça un "fork", qui donne un processus fils à partir d'un processus père, une sorte de clonage. Un processus fils prend autant de place dans la mémoire que son "père", donc une place conséquente dans la mémoire mais il peut fonctionner en même temps que le processus qui l'a lancé.
- un Thread : Cette fois une notion exclusivement réservée aux systèmes UNIX (MacOSX et Linux majoritairement, mais pas Windows car les threads n'existent pas sous Windows) qui consiste à executer en parallèle du processus un morceau de code executant une seule fonction prédéfinie. Le thread est donc beaucoup moins volumineux en mémoire que le processus qui l'a appelé, le thread prend moins de place en mémoire que le processus qui l'a lancé et il peut aussi fonctionner en même temps.
Donc l'utilité commune du fork et du thread est d'executer deux actions simultanément, Apache utilise ces deux méthodes dans deux modes différents, le fait de pouvoir agir simultanément permet d'écouter les requêtes de plusieurs utilisateurs (un procesus ou thread par utilisateur) et d'y répondre pour qu'ils puissent se connecter en même temps, sinon une seule personne réussirait à se connecter et monopoliserait le site, ce qui serait catastrophique pour un site web.
Donc Apache, dans son premier mode, son mode par défaut, le mode "Prefork", créé autant de processus qu'il y a de visiteurs sur le site (à l'aide du fork). On a donc un processus père qui contient toutes les actions à faire qu'il va copier à chacun de ses fils en leur donnant aussi une IP dont ils devront s'occuper ainsi que la requête de l'utilisateur (pour le fonctionnement de l'IP, voir onglet "Identité"). Et une fois que le processus fils est lancé et connaît sa cible, le père ne s'occupe plus de lui sauf pour le "tuer" (s'il estime qu'il est inutile, afin de faire de la place dans la mémoire).
Une fois que le fils est créé, il est directement indépendant, il aura pour mission de subvenir aux requêtes de l'utilisateur et de vérifier les autorisations à accéder au contenu, mais tout cela est écrit dans le mode opératoire qu'il a hérité de son père.
Donc chaques processus fils s'occupent d'un client chacun et contiennent chacun toute la méthode (le mode opératoire). Ce qui en fait des processus lourds qui occupent beaucoup de mémoire et peuvent surcharger la mémoire jusqu'à la saturer, à ce moment là le serveur plante et redémarre.
Schema du mode Prefork d'Apache

Bien que le mode Prefork puisse fonctionner, nous aimerions bien pouvoir faire des serveurs sans avoir énormément de mémoire, on a alors créé un nouveau mode pour Apache.
Les développeurs du mode Worker se sont rendus compte que le mode Prefork allouait trop de RAM pour un seul utilisateur et que le processus passait plus de temps à attendre une réponse de l'utilisateur qu'à travailler.
Ils ont donc eu l'idée d'utiliser plusieurs threads pour écouter les requêtes en les reliant à un processus qui sera chargé de suivre le mode opératoire qu'on lui aura transmis.
Donc ce serait les thread, plus légers et moins puissants qui attendraient les requêtes d'un utilisateur,
et les processus, plus lourds et plus puissants, qui n'auraient presque pas à attendre, traiteraient les requêtes transmises par leurs threads.
Donc au final, un processus de mode Worker est légèrement plus lourd qu'un processus de mode Prefork mais permet de répondre à plusieurs visiteurs à la fois.
Schema du mode Worker d'Apache

Ce mode, beaucoup plus intéressant car il offre un moyen d'optimiser l'espace mémoire n'est pas compatible avec Windows, puisque les threads n'existent pas. Les serveurs sous Windows se redirigent donc vers le mode Prefork mais puisqu'Apache est multiplateforme, il n'est pas vraiment optimisé pour fonctionner sous Windows, les utilisateurs de serveurs Windows se redirigent souvent vers le logiciel ASP.NET de Microsoft qui est semblable au mode Prefork mais qui est extrèmement bien optimiser pour Windows. Mais Apache en mode Prefork reste une très bonne alternative à ASP.NET pour les petits serveurs web sous Windows.