Performances et "extensibilité" (scalability)

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 :

Problème réseau Dedibox

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=20 ttl=54 time=43.5 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=21 ttl=54 time=41.2 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=22 ttl=54 time=40.2 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=23 ttl=54 time=44.3 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=24 ttl=54 time=40.7 ms
64 bytes from dedibox.pwet.fr (88.191.30.29): icmp_seq=1 ttl=54 time=38254 ms
> tigrou@Lorien[192.168.0.243]:~$ tracepath pwet.fr
 1:  Lorien (192.168.0.243)                                 0.230ms pmtu 1500
 1:  192.168.0.1 (192.168.0.1)                              1.629ms 
 2:  82.225.188.254 (82.225.188.254)                       41.563ms 
 3:  montpellier-6k-1-a5.routers.proxad.net (213.228.12.62) asymm  4  41.176ms 
 4:  marseille-6k-1-v802.intf.routers.proxad.net (212.27.50.94) asymm  5  44.069ms 
 5:  no reply
 6:  no reply
 7:  bzn-6k-4-po3-t.intf.routers.proxad.net (212.27.58.42) asymm  8  57.881ms 
 8:  88.191.2.25 (88.191.2.25)                            asymm  9  56.838ms 
 9:  88.191.2.21 (88.191.2.21)                            asymm 10  55.103ms 
10:  no reply
[...]
18:  no reply
12:  dedibox.pwet.fr (88.191.30.29)                       asymm 11 21558.447ms reached
     Resume: pmtu 1500 hops 12 back 11
Tags : Réseau, Dedibox

À lire à droite, à gauche

Être à l'aise avec bash #2

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 :

export CDPATH=".:/home/damien/public_html"

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

shopt -s cdspell

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

alias cd..='cd ..'
alias rezo="sudo watch netstat -alpe --ip"
alias ag="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.

X11Forwarding : lancer une application sur un serveur et l'afficher ailleurs avec SSH

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 :

  1. 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.
  2. 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.
  3. 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 :

tigrou@mon-server:~ $ sudo /etc/init.d/ssh restart

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 :

tigrou@machine-locale:~ $ ssh -c blowfish -X -C -f login@adresse ton_application

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

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.