Via High Scalability, j'ai découvert cette présentation intitulée Real World Web: Performance & Scalability donnée lors de la MySQL conference 2008 par Ask Bjørn Hansen. Cette longue présentation (189 pages !) est une excellente compilation de la plupart des conseils que l'on peut trouver un peu partout pour améliorer les performances et l'extensibilité (au niveau de l'architecture) d'une application web par exemple à base de MySQL et du langage de votre choix (PHP, Perl, Ruby, ...)
On peut y trouver également quelques petites phrases assez amusantes du type (traduction libre) :
N'hésitez pas à dé-normaliser les données; [...] appelez cela des summary tables, votre DBA n'y prêtera même pas attention.
où encore une jolie manière d'expliquer les concepts de MVC et d'API
Model : parle le SQL
View : parle le HTML
Controller : parle le HTTP
API : fait des trucs
Bref, ce document mérite de s'y attarder quelques minutes :
Le réseau Dédibox n'était visiblement pas en grande forme cet après midi... Le paquet numéro 1 arrive en 6ième position après le paquet 24, inutile de dire que ce n'est pas très normal...
> tigrou@Lorien[192.168.0.243]:~$ ping pwet.fr
PING pwet.fr (88.191.30.29)56(84) bytes of data.
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=20ttl=54time=43.5 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=21ttl=54time=41.2 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=22ttl=54time=40.2 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=23ttl=54time=44.3 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=24ttl=54time=40.7 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=1ttl=54time=38254 ms
Où sont passés les tuyaux ? sur le blog de Frederic de Villamil, un billet un peu long mais très intéressant sur les problèmes des FAI face à l'augmentation exponentielle du traffic réseau, vraiment très intéressant !
Planet Libre un planet consacré au libre et à Linux lancé par Sébastien Bilbeau sur lequel sont repris mes articles consacrés à Linux.
Un mise à jour du Pagerank Google serait en cours... le PR sert plus à flatter l'ego du webmaster qu'à autre chose d'ailleurs mon ego est encore mal soigné, je reste à zéro sur tous les DC, wait and see.
Le projet Le Jargon Français s'étoffe et devient un wiki. Ce projet vise à réunir toutes les expressions spécifiques au vocabulaire informatique.
Suite de la série d'articles sur comment rendre son shell bash un peu plus attractif et plus facile d'utilisation, avec cette fois ci quelques trucs pour se simplifier la vie dans la navigation au sein du système de fichier et sur la gestion des alias.
Navigation dans les répertoires
La variable CDPATH
Les shells sont configurés en partie à l'aide de variables d'environnement. Il en existe un certain nombre et celles définies sur votre système peuvent être listées à l'aide de printenv. Parmis ces variables, CDPATH permet de se simplifier la navigation dans l'arborescence à l'aide du shell et sa commande cd.
En effet, par défaut, cd xxxyyyzzz recherche le répertoire xxxyyyzzz dans le répertoire courant, mais en spécificiant la variable CDPATH, il est possible de demander au shell de regarder éventuellement dans d'autres répertoires si ce répertoire existe. J'utilise cette fonctionnalités pour naviguer rapidement dans les différents répertoires stockant les sites web sur ma machine en insérant la ligne suivante dans mon fichier .bashrc :
Ainsi à chaque fois que je fais un cd xxxyyyzzz, le shell cherche si xxxyyyzzz existe dans le répertoire courant, et si ce n'est pas le cas, il cherche en suite dans /home/public_html/damien. Il procède de la même manière, si on utilise le complètement avec la touche <Tab>.
Correction automatique
Une option permet de demander à bash de corriger les (petites) fautes frappes simples lors de l'utilisation de cd. Elle s'active avec la ligne suivante que l'on peut ajouter dans son .bashrc
Avec cette option certaines fautes sont corrigées :
> tigrou@Lorien[192.168.0.243]:~/tmp/test$ mkdir Documents
> tigrou@Lorien[192.168.0.243]:~/tmp/test$ cd Documen
bash: cd: Documen: Aucun fichier ou répertoire de ce type
> tigrou@Lorien[192.168.0.243]:~/tmp/test$ cd Document
Documents
> tigrou@Lorien[192.168.0.243]:~/tmp/test/Documents$ cd ..
> tigrou@Lorien[192.168.0.243]:~/tmp/test$ cd Documents-
Documents
> tigrou@Lorien[192.168.0.243]:~/tmp/test/Documents$
Quelques petits trucs avec cd
Taper cd sans argument permet d'aller directement dans son répertoire personnel.
En shell, ~ signifie le répertoire personnel de l'utilisateur, ainsi taper cd ~damien permet d'aller dans le répertoire personnel de l'utilisateur dont le login est damien. cd ~damien/Documents permet d'aller dans le répertoire Documents dans le home directory de damien. Si le login est omis, c'est celui de l'utilisateur courant qui est pris en compte.
cd - permet de retourner au répertoire précédent. Très pratique pour passer d'un répertoire à un autre éloiginé dans l'arborescence.
Les alias
Les alias permettent se simplifier des lignes de commandes en les réduisant au plus court et aussi de pallier aux fautes de frappe. Pour définir un alias, il suffit d'utiliser la commande interne alias. Lorsqu'un alias défini est tappé par l'utilisateur, le bash remplace simplement l'alias par sa définition. Quelques exemples de féfinitions (à mettre dans son .bashrc) :
aliascd..='cd ..'aliasrezo="sudo watch netstat -alpe --ip"aliasag="sudo apt-get"alias :wq='echo Je ne suis PAS vim'
Le premier permet aux habitués du DOS de garder leur habitudes. Le deuxième (rezo) permet de surveiller régulièrement quels programmes utilisent le réseau. Le troisième est un raccourci bien pratique enfin le dernier est là pour pallier à des erreurs de fenêtre.
Pour voir la liste des alias, il suffit de taper alias sans paramètre. La commande interne unalias permet de supprimer un alias dont le nom est passé en paramètre.
SSH est, comme l'indique la page du manuel du client ssh OpenSSH, un client permettant de s'identifier sur une machine distante et constitue un remplacement sécurisé (en tout cas crypté) de telnet et des utilitaires comme rsh ou rlogin qui s'appuient sur un identification par adresse IP ou pas mot de passe en clair. Une des particularités du protocole SSH est qu'il est prévu pour servir de transport à n'importe quel type de données. Cette application est appelée TCPForwarding et dans le cas d'application particulier de données "graphiques" cela s'appelle le X11Forwarding mais peut être utile pour faire circuler n'importe quelle informations de manière sûre ou pour faire des redirections de ports pour franchir un firewall par exemple.
X11Forwarding, quels intérêts ?
La possibilité d'afficher une application sur une machine différente de celle qui l'éxécute est déjà possible par X11 de manière native (avec un peu de configuration), alors pourquoi en rajouter une couche avec SSH ? Il y a plusieurs avantages à utiliser le X11Forwarding :
tout comme telnet, les connections par le protocole X11 sont en clair (ie non cryptées) et donc par nature assez peu sécurisées.
l'utilisation est simpliste et en configurant SSH pour utiliser l'authentification par échange de clés, on peut lancer une application distante quasiment comme une application locale.
ssh dispose d'une option permettant de compresser les données échangées, ce qui peut grandement améliorer les performances sur des lignes à faible débit (mais les ralentir sur d'autres, à tester donc...)
Évidemment cette solution comporte quelques points faibles mais quelle solution n'en a pas ?
Configuration et utilisation
La mise en place de ce système est très simple. Sur le serveur sur lequel on va lancer les applications il faut installer OpenSSH (à l'aide d'apt-get sur un système Ubuntu ou Debian ou du votre système de paquets préféré) et configurer le daemon SSH en positionnant l'option X11Forwarding à yes dans le fichier de configuration /etc/ssh/sshd_config. Il ne faut évidemment par oublier de redémarrer le daemon ssh par :
Une fois cette opération réalisée, on peut lancer des applications sur la machine distante et les afficher sur votre machine locale (ou sur une autre machine distante d'ailleurs) avec la ligne de commande suivante :
Explications : cette ligne indique à ssh de se connecter sur le serveur adresse "adresse" sous le login "login" pour y lancer ton_application.L'option -X indique que l'on souhaite utiliser le X11Forwarding ce qui signifie que ssh va installer toutes les variables d'environnements et faire toutes les opérations nécessaires pour cela. Les autres options sont toutes facultatives. -C active la compression gzip qui peut ralentir ou accélèrer le lancement selon le débit (c'est à tester), -c blowfish indique à SSH d'utiliser un cryptage à l'aide de l'algorithme blowfish qui est normalement le plus performant. Enfin -f indique à SSH de passer en arrière plan une fois la commande lancée.
Après avoir tapé cette commande, par défaut ssh vous demandera votre mot de passe. Il est possible de s'authentifier uniquement à partir d'un système de clefs ou à partir d'une passphrase. Toutes ces possibilités sont détaillés dans la documentation SSH sur Ubuntu-fr et feront peut être l'objet d'un billet tant les options, les possibilités et les usages sont nombreux. Il faudra alors regarder du côté de ssh-agent, ssh-add et certainement x11-ssh-askpass...